引言:为什么需要优化 AlmaLinux 系统性能

AlmaLinux 作为 CentOS 的稳定替代品,广泛应用于企业级服务器环境。系统性能优化是确保服务器高效运行、资源合理利用的关键环节。通过合理的优化策略,我们可以显著提升系统响应速度、增加并发处理能力、降低资源消耗,从而提高整体业务的稳定性和用户体验。

性能优化不是一次性的工作,而是一个持续监控、分析和调整的过程。本文将从多个维度深入探讨 AlmaLinux 的性能优化策略,包括内核参数调整、文件系统优化、资源管理技巧等实战内容。

一、系统性能评估与监控

1.1 基础性能监控工具

在进行优化之前,首先需要了解系统的当前状态。AlmaLinux 提供了丰富的监控工具:

# 安装基础监控工具
sudo dnf install sysstat htop iotop

# 启动 sysstat 服务(收集系统性能数据)
sudo systemctl enable --now sysstat

# 查看实时系统资源使用情况
htop

常用监控命令详解:

# CPU 使用率统计(每10秒更新一次,共3次)
mpstat -P ALL 10 3

# 内存使用情况
free -h

# 磁盘 I/O 统计
iostat -x 1 5

# 网络连接状态
ss -tunap

# 进程级资源监控
pidstat -u -r -d 1 5

1.2 性能数据分析

通过监控工具收集数据后,需要关注以下关键指标:

  • CPU 使用率:用户态(us)、系统态(sy)、空闲(id)
  • 内存使用:可用内存、缓存、交换分区使用率
  • 磁盘 I/O:等待时间、吞吐量、队列长度
  • 网络 I/O:连接数、重传率、带宽使用

二、内核参数优化策略

2.1 sysctl 内核参数调整

内核参数是影响系统性能的核心因素。通过 /etc/sysctl.conf 文件可以永久修改这些参数。

2.1.1 网络性能优化

# 编辑 sysctl 配置文件
sudo vi /etc/sysctl.conf

# 添加以下网络优化参数
# 增加 TCP 最大连接队列
net.core.somaxconn = 65535

# 增加网络设备队列长度
net.core.netdev_max_backlog = 65536

# TCP 接收缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 67108864

# TCP 发送缓冲区大小
net.ipv4.tcp_wmem = 4096 65536 67108864

# 增加可用端口范围
net.ipv4.ip_local_port_range = 1024 65535

# TIME_WAIT 状态连接重用
net.ipv4.tcp_tw_reuse = 1

# 快速回收 TIME_WAIT 连接
net.ipv4.tcp_tw_recycle = 0  # 注意:在 NAT 环境下应设为 0

# TCP 连接超时设置
net.ipv4.tcp_fin_timeout = 30

# 减少 ACK 重试次数
net.ipv4.tcp_retries2 = 5

# 启用 TCP SACK 和 DSACK
net.ipv4.tcp_sack = 1
net.ipv4.tcp_dsack = 1

# 增加最大半连接数
net.ipv4.tcp_max_syn_backlog = 65535

# 增加已连接连接的最大数量
net.ipv4.tcp_max_tw_buckets = 2000000

# 启用 TCP 时间戳
net.ipv4.tcp_timestamps = 1

# 增加文件描述符限制
fs.file-max = 2097152

# 增加进程可打开的文件描述符数量
fs.nr_open = 2097152

2.1.2 内存管理优化

# 在 /etc/sysctl.conf 中添加内存优化参数

# 虚拟内存区域最大数量
vm.max_map_count = 262144

# 内存过度分配策略(0: 禁止过度分配, 1: 轻度, 2: 重度)
vm.overcommit_memory = 1

# 过度分配内存的百分比
vm.overcommit_ratio = 80

# 系统内存不足时的处理策略
vm.panic_on_oom = 0

# OOM  killer 优先级调整(-1000 到 1000,越低越不容易被杀死)
vm.oom_kill_allocating_task = 1

# 交换分区使用策略
vm.swappiness = 10  # 降低交换倾向,值越小越倾向于使用物理内存

# 内存回收策略
vm.vfs_cache_pressure = 100  # 文件系统缓存回收倾向

# 内存页合并(KSM)
vm.ksm.run = 1
vm.ksm.sleep_millisecs = 20

2.1.3 磁盘 I/O 优化

# 在 /etc/sysctl.conf 中添加磁盘 I/O 优化参数

# 虚拟内存脏页比例阈值(百分比)
vm.dirty_ratio = 15

# 系统后台刷写脏页的比例(百分比)
vm.dirty_background_ratio = 5

# 脏页刷写时间阈值(秒)
vm.dirty_writeback_centisecs = 500

# 脏页过期时间(秒)
vm.dirty_expire_centisecs = 3000

# I/O 调度器队列深度
vm.nr_requests = 65536

# 增加 I/O 调度器队列数量
vm.scheduler_max_batch = 16

2.2 应用内核参数

修改完成后,应用这些参数:

# 立即应用参数(无需重启)
sudo sysctl -p

# 验证参数是否生效
sysctl net.core.somaxconn
sysctl vm.swappiness

2.3 内核参数调优案例

案例:高并发 Web 服务器优化

假设你有一台运行 Nginx 的 AlmaLinux 服务器,需要处理每秒 10,000+ 的并发连接:

# 针对高并发 Web 服务器的完整 sysctl 配置
cat >> /etc/sysctl.conf << 'EOF'

# 高并发 Web 服务器优化配置
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65536
net.ipv4.tcp_max_syn_backlog = 65535

# TCP 缓冲区优化
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864

# TIME_WAIT 优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15

# 文件系统限制
fs.file-max = 2097152
fs.nr_open = 2097152

# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

# 端口范围
net.ipv4.ip_local_port_range = 1024 65535
EOF

# 应用配置
sudo sysctl -p

三、文件系统优化

3.1 文件系统选择与挂载选项

不同的文件系统有不同的性能特性。对于 AlmaLinux,推荐使用 XFS 或 ext4。

3.1.1 XFS 文件系统优化

# 创建 XFS 文件系统(如果需要重新格式化)
sudo mkfs.xfs -f /dev/sdX

# 查看 XFS 文件系统参数
xfs_info /dev/sdX

# 调整 XFS 参数
sudo xfs_admin -u /dev/sdX  # 查看 UUID
sudo xfs_admin -L "my_data" /dev/sdX  # 设置标签

# 优化挂载选项
# 编辑 /etc/fstab
sudo vi /etc/fstab

# 添加优化的挂载选项
/dev/sdb1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0

XFS 挂载选项详解:

  • noatime:不更新文件访问时间,减少磁盘写入
  • nodiratime:不更新目录访问时间
  • logbufs=8:增加日志缓冲区数量
  • logbsize=256k:设置日志缓冲区大小
  • allocsize=64m:预分配大小优化

3.1.2 ext4 文件系统优化

# 创建 ext4 文件系统
sudo mkfs.ext4 -E lazy_itable_init=1,lazy_journal_init=1 /dev/sdX

# 优化挂载选项
# 编辑 /etc/fstab
sudo vi /etc/fstab

# 添加优化的挂载选项
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,data=writeback,barrier=0 0 0

ext4 挂载选项详解:

  • noatime:不更新访问时间
  • data=writeback:写回模式,提高写入性能(但可能降低数据安全性)
  • barrier=0:禁用写入屏障(仅在 UPS 电源保护下使用)
  • delalloc:延迟分配,减少碎片
  • commit=60:每60秒提交一次事务(默认30秒)

3.2 I/O 调度器优化

I/O 调度器决定了磁盘请求的处理顺序,对性能有重要影响。

# 查看当前 I/O 调度器
cat /sys/block/sda/queue/scheduler

# 临时修改 I/O 调度器
echo deadline > /sys/block/sda/queue/scheduler

# 永久修改 I/O 调度器(创建 udev 规则)
sudo tee /etc/udev/rules.d/60-ioscheduler.rules << 'EOF'
# 为所有 SATA/SCSI 磁盘设置 deadline 调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
EOF

# 重新加载 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger

I/O 调度器选择指南:

  • deadline:适合数据库和通用服务器,保证请求延迟
  • cfq:适合桌面系统,公平分配 I/O 带宽
  • noop:适合虚拟机和 SSD,无调度开销
  • kyber:适合高速 SSD,现代调度器
  • mq-deadline:多队列版本的 deadline

3.3 文件系统性能监控

# 监控文件系统性能
sudo apt-get install sysstat  # 如果未安装

# 查看磁盘使用情况
df -h

# 查看 inode 使用情况
df -i

# 查看文件系统详细信息
tune2fs -l /dev/sda1  # ext4
xfs_info /dev/sda1    # xfs

# 监控文件系统事件
sudo inotifywait -m -r /data

四、内存管理与优化

4.1 内存使用分析

# 详细内存使用情况
cat /proc/meminfo

# 实时内存监控
vmstat 1 5

# 内存使用排名
ps aux --sort=-%mem | head -20

# 查看内存泄漏
sudo valgrind --leak-check=full ./your_application

4.2 透明大页(THP)优化

透明大页可以减少 TLB 压力,但对某些工作负载可能产生负面影响。

# 查看 THP 状态
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag

# 临时禁用 THP(推荐数据库服务器)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 永久禁用 THP
sudo tee /etc/systemd/system/disable-thp.service << 'EOF'
[Unit]
Description=Disable Transparent Huge Pages
DefaultDependencies=no
After=sysinit.target local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp.service

4.3 内存压缩与交换优化

# 启用内存压缩(zswap)
# 编辑 /etc/default/grub
sudo vi /etc/default/grub

# 在 GRUB_CMDLINE_LINUX 中添加
GRUB_CMDLINE_LINUX="... zswap.enabled=1 zswap.compressor=lz4"

# 更新 grub 并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot

# 调整交换分区策略
# 编辑 /etc/sysctl.conf
vm.swappiness = 10  # 降低交换倾向
vm.vfs_cache_pressure = 100  # 平衡缓存回收

# 创建交换文件(如果需要更多交换空间)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# 永久添加到 fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

4.4 应用内存限制

使用 cgroups 限制应用程序内存使用:

# 安装 cgroups 工具
sudo dnf install libcgroup-tools

# 创建内存限制组
sudo cgcreate -g memory:/limited

# 设置内存限制(512MB)
sudo cgset -r memory.max=512M limited
sudo cgset -r memory.swap.max=128M limited

# 在限制组中运行程序
sudo cgexec -g memory:limited your_application

# 创建 systemd 服务单元(自动应用限制)
sudo tee /etc/systemd/system/limited-app.service << 'EOF'
[Unit]
Description=Application with Memory Limit
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/your_application
MemoryMax=512M
MemorySwapMax=128M
Restart=always

[Install]
WantedBy=multi-user.target
EOF

五、CPU 性能优化

5.1 CPU 调控器设置

CPU 调控器决定了 CPU 频率的调整策略。

# 查看当前 CPU 调控器
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 查看可用调控器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors

# 临时设置调控器(performance 模式)
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 永久设置调控器
# 安装 cpupower 工具
sudo dnf install kernel-tools

# 创建 systemd 服务
sudo tee /etc/systemd/system/cpu-performance.service << 'EOF'
[Unit]
Description=CPU Performance Governor
After=sysinit.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now cpu-performance.service

CPU 调控器类型:

  • performance:始终运行在最高频率,适合服务器
  • powersave:始终运行在最低频率,适合节能
  • ondemand:根据负载动态调整,适合桌面
  • conservative:保守的动态调整
  • userspace:用户空间控制

5.2 中断亲和性优化

将特定中断分配给特定 CPU 核心,减少缓存失效。

# 查看中断分布
cat /proc/interrupts

# 查看特定中断的亲和性
cat /proc/irq/XX/smp_affinity

# 设置中断亲和性(以中断号 123 为例,分配到 CPU0)
echo 1 > /proc/irq/123/smp_affinity

# 设置网络中断亲和性
# 查看网络接口中断号
cat /proc/interrupts | grep eth0

# 将网络中断分配到 CPU2 和 CPU3
echo 4 > /proc/irq/123/smp_affinity  # 二进制 0100,对应 CPU2
echo c > /proc/irq/124/smp_affinity  # 二进制 1100,对应 CPU2 和 CPU3

# 创建自动化脚本
sudo tee /usr/local/bin/set_irq_affinity.sh << 'EOF'
#!/bin/bash
# 将网络中断分配到 CPU2-CPU3
for irq in $(cat /proc/interrupts | grep -E 'eth|ens' | awk '{print $1}' | sed 's/://'); do
    echo c > /proc/irq/$irq/smp_affinity 2>/dev/null
done
EOF

sudo chmod +x /usr/local/bin/set_irq_affinity.sh

5.3 进程绑定(CPU 亲和性)

# 查看进程当前的 CPU 亲和性
taskset -p <PID>

# 设置进程的 CPU 亲和性(绑定到 CPU0 和 CPU1)
taskset -cp 0,1 <PID>

# 启动时指定 CPU 亲和性
taskset -c 0,1 your_application

# 使用 numactl 进行 NUMA 架构优化
# 查看 NUMA 拓扑
numactl --hardware

# 在特定 NUMA 节点上运行程序
numactl --cpunodebind=0 --membind=0 your_application

# 分配特定 CPU 核心
numactl --physcpubind=0,1,2 --membind=0 your_application

5.4 定时器与调度优化

# 调整内核定时器频率(降低功耗)
# 编辑 /etc/default/grub
GRUB_CMDLINE_LINUX="... timer_hz=100"

# 调整调度器参数
# 编辑 /etc/sysctl.conf
kernel.sched_migration_cost_ns = 500000
kernel.sched_wakeup_granularity_ns = 1500000
kernel.sched_autogroup_enabled = 0  # 禁用自动分组,适合专用服务器

六、网络性能优化

6.1 网络接口参数优化

# 查看网络接口信息
ethtool eth0

# 优化网络接口参数
sudo ethtool -G eth0 rx 4096 tx 4096  # 设置环形缓冲区大小
sudo ethtool -C eth0 rx-usecs 100 tx-usecs 100  # 设置中断合并
sudo ethtool -K eth0 tso on gso on gro on  # 启用硬件卸载

# 永久保存设置(创建 systemd 服务)
sudo tee /etc/systemd/system/ethtool-optimize.service << 'EOF'
[Unit]
Description=Network Interface Optimization
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -G eth0 rx 4096 tx 4096
ExecStart=/usr/sbin/ethtool -C eth0 rx-usecs 100 tx-usecs 100
ExecStart=/usr/sbin/ethtool -K eth0 tso on gso on gro on
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl enable --now ethtool-optimize.service

6.2 TCP/IP 协议栈优化

除了 sysctl 参数,还可以使用更高级的优化:

# 启用 TCP BBR 拥塞控制算法(Google 开发,适合高带宽延迟积网络)
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

# 永久设置
echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.conf

# 查看可用拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control

# 启用 TCP Fast Open
sudo sysctl -w net.ipv4.tcp_fastopen=3
echo 'net.ipv4.tcp_fastopen=3' >> /etc/sysctl.conf

# 调整 TCP 重传参数
sudo sysctl -w net.ipv4.tcp_retries2=3
sudo sysctl -w net.ipv4.tcp_slow_start_after_idle=0

6.3 网络连接跟踪优化

对于高连接数服务器,需要优化连接跟踪表:

# 查看当前连接跟踪数
cat /proc/sys/net/netfilter/nf_conntrack_count

# 查看最大连接跟踪数
cat /proc/sys/net/netfilter/nf_conntrack_max

# 增加连接跟踪表大小
sudo sysctl -w net.netfilter.nf_conntrack_max=2097152
sudo sysctl -w net.netfilter.nf_conntrack_buckets=2097152

# 永久设置
echo 'net.netfilter.nf_conntrack_max=2097152' >> /etc/sysctl.conf
echo 'net.netfilter.nf_conntrack_buckets=2097152' >> /etc/sysctl.conf

# 调整超时时间
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7200
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30

6.4 网络性能监控工具

# 实时网络流量监控
sudo dnf install nload iftop

# 监控网络连接
iftop -i eth0 -P

# 监控网络接口流量
nload eth0

# 抓包分析
sudo tcpdump -i eth0 -w capture.pcap

# 分析 TCP 连接状态
ss -s

# 查看网络统计
netstat -s

七、存储系统优化

7.1 RAID 配置优化

# 查看 RAID 状态
cat /proc/mdstat

# 创建 RAID10(推荐用于性能和冗余)
sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]

# 优化 RAID 参数
sudo mdadm --grow /dev/md0 --bitmap=internal  # 启用位图日志
sudo mdadm --grow /dev/md0 --chunk-size=512   # 设置块大小

# 监控 RAID 重建速度
cat /proc/sys/dev/raid/speed_limit_min
cat /proc/sys/dev/raid/speed_limit_max

# 调整重建速度
echo 50000 > /proc/sys/dev/raid/speed_limit_min
echo 200000 > /proc/sys/dev/raid/speed_limit_max

7.2 LVM 优化

# 查看 LVM 配置
sudo lvs
sudo vgs
sudo pvs

# 优化 LVM 策略
sudo tee /etc/lvm/lvm.conf << 'EOF'
devices {
    # 启用 LVM 策略优化
    filter = [ "a|sd.*|", "r|.*|" ]
    sysfs_scan = 1
    obtain_device_list_from_udev = 1
}

activation {
    # 优化激活策略
    udev_sync = 1
    udev_rules = 1
    verify_udev_pass = 0
}
EOF

# 调整 LVM 缓存
sudo lvchange --cachepolicy writethrough /dev/vg0/lv_data

7.3 SSD 优化

# 检查是否为 SSD
lsblk -d -o NAME,ROTA

# SSD 特定优化
# 禁用 discard(TRIM)在某些场景下可能影响性能
# 编辑 /etc/fstab
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,discard 0 0

# 改为定期手动 TRIM
# 创建 systemd 定时器
sudo tee /etc/systemd/system/fstrim.timer << 'EOF'
[Unit]
Description=Weekly SSD TRIM

[Timer]
OnCalendar=weekly
Persistent=true

[Install]
WantedBy=timers.target
EOF

sudo tee /etc/systemd/system/fstrim.service << 'EOF'
[Unit]
Description=SSD TRIM

[Service]
Type=oneshot
ExecStart=/usr/sbin/fstrim -a
EOF

sudo systemctl enable fstrim.timer

八、应用程序级优化

8.1 数据库优化(以 MySQL/MariaDB 为例)

# 安装 MariaDB
sudo dnf install mariadb-server
sudo systemctl enable --now mariadb

# 优化配置 /etc/my.cnf.d/server.cnf
sudo tee /etc/my.cnf.d/server.cnf << 'EOF'
[mysqld]
# 内存优化
innodb_buffer_pool_size = 4G  # 设置为总内存的 50-70%
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2  # 平衡性能和数据安全

# 连接优化
max_connections = 1000
max_connect_errors = 100000
thread_cache_size = 100

# 查询缓存(MySQL 8.0+ 已移除,MariaDB 仍可用)
query_cache_type = 1
query_cache_size = 128M

# I/O 优化
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_io_capacity = 2000

# 日志优化
slow_query_log = 1
slow_query_log_file = /var/log/mariadb/slow.log
long_query_time = 2
EOF

# 重启服务
sudo systemctl restart mariadb

8.2 Web 服务器优化(Nginx)

# 安装 Nginx
sudo dnf install nginx
sudo systemctl enable --now nginx

# 优化配置 /etc/nginx/nginx.conf
sudo tee /etc/nginx/nginx.conf << 'EOF'
user nginx;
worker_processes auto;  # 自动设置为 CPU 核心数
worker_rlimit_nofile 65535;  # 工作进程文件描述符限制

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 4096;  # 每个工作进程的连接数
    use epoll;  # 使用 epoll 事件模型
    multi_accept on;  # 一次接受多个连接
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    # 日志格式优化
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    'rt=$request_time uct="$upstream_connect_time" '
                    'uht="$upstream_header_time" urt="$upstream_response_time"';

    access_log /var/log/nginx/access.log main;

    # 性能优化
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 1000;
    client_max_body_size 100M;

    # Gzip 压缩
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types
        text/plain
        text/css
        text/xml
        text/javascript
        application/javascript
        application/xml+rss
        application/json;

    # 缓存配置
    open_file_cache max=1000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;

    # 包含其他配置
    include /etc/nginx/conf.d/*.conf;
}
EOF

# 测试配置并重启
sudo nginx -t
sudo systemctl restart nginx

8.3 应用程序性能分析工具

# 安装性能分析工具
sudo dnf install perf valgrind gdb

# 使用 perf 分析 CPU 性能
sudo perf top

# 分析特定进程
sudo perf record -p <PID> -g
sudo perf report

# 使用 valgrind 检测内存泄漏
valgrind --leak-check=full --show-leak-kinds=all ./your_app

# 使用 strace 跟踪系统调用
strace -c -p <PID>

# 使用 lsof 查看打开的文件
lsof -p <PID>

九、系统服务与启动优化

9.1 禁用不必要的服务

# 查看所有服务
systemctl list-unit-files --type=service

# 查看已启用的服务
systemctl list-unit-files --type=service --state=enabled

# 禁用不必要的服务(示例)
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon
sudo systemctl disable ModemManager

# 查看服务依赖关系
systemctl list-dependencies sshd.service

# 查看服务资源使用
systemd-cgtop
systemd-analyze blame  # 查看启动时间
systemd-analyze critical-chain  # 查看关键链

9.2 优化 systemd 服务

# 创建优化的服务单元示例
sudo tee /etc/systemd/system/optimized-app.service << 'EOF'
[Unit]
Description=Optimized Application Service
After=network.target
Wants=network.target

[Service]
# 资源限制
LimitNOFILE=65535
LimitNPROC=65535
MemoryMax=2G
CPUQuota=200%  # 允许使用 2 个 CPU 核心

# 安全优化
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/log/myapp /data

# 性能优化
Type=simple
ExecStart=/usr/local/bin/myapp
Restart=always
RestartSec=5

# 进程优先级
Nice=-5
CPUSchedulingPolicy=rr
CPUSchedulingPriority=50

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable optimized-app.service

9.3 启动过程优化

# 分析启动时间
systemd-analyze time
systemd-analyze blame
systemd-analyze critical-chain

# 优化内核启动参数
sudo vi /etc/default/grub

# 添加以下参数到 GRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX="... systemd.log_level=3 systemd.log_target=journal console=ttyS0,115200"

# 更新 grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

# 预加载常用库
sudo tee /etc/ld.so.preload << 'EOF'
/lib64/libc.so.6
/lib64/libpthread.so.0
EOF

十、监控与持续优化

10.1 搭建监控系统

# 安装 Prometheus + Grafana(推荐)
# 安装 Prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus

# 下载 Prometheus
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
tar xvf prometheus-2.37.0.linux-amd64.tar.gz
sudo cp prometheus-2.37.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.37.0.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool

# 配置 Prometheus
sudo tee /etc/prometheus/prometheus.yml << 'EOF'
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']
EOF

# 安装 Node Exporter(系统指标采集)
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xvf node_exporter-1.5.0.linux-amd64.tar.gz
sudo cp node_exporter-1.5.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

# 创建 systemd 服务
sudo tee /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Node Exporter
After=network.target

[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=always

[Install]
WantedBy=multi-user.target
EOF

sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl enable --now prometheus

10.2 自动化优化脚本

#!/bin/bash
# /usr/local/bin/system-optimizer.sh

set -e

LOG_FILE="/var/log/system-optimizer.log"

log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE
}

# 检查是否为 root
if [[ $EUID -ne 0 ]]; then
   echo "This script must be run as root" 
   exit 1
fi

log "Starting system optimization..."

# 1. 应用 sysctl 优化
log "Applying sysctl optimizations..."
cat >> /etc/sysctl.conf << 'SYSCTL_EOF'

# Auto-optimized settings
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 10
fs.file-max = 2097152
SYSCTL_EOF

sysctl -p

# 2. 优化文件描述符限制
log "Optimizing file descriptors..."
cat >> /etc/security/limits.conf << 'LIMITS_EOF'
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
LIMITS_EOF

# 3. 禁用不必要的服务
log "Disabling unnecessary services..."
services_to_disable=("bluetooth" "cups" "avahi-daemon")
for service in "${services_to_disable[@]}"; do
    if systemctl is-enabled $service &>/dev/null; then
        systemctl disable $service
        log "Disabled $service"
    fi
done

# 4. 设置 CPU 调控器
log "Setting CPU governor to performance..."
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

# 5. 优化内核参数
log "Optimizing kernel parameters..."
echo 1 > /proc/sys/kernel/numa_balancing 2>/dev/null || true

log "Optimization complete! Please reboot for all changes to take effect."

十一、高级优化技巧

11.1 使用 eBPF 进行性能分析

# 安装 bpftrace
sudo dnf install bpftrace

# 跟踪系统调用延迟
sudo bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @start[tid] = nsecs; }
tracepoint:raw_syscalls:sys_exit /@start[tid]/ { @latency = hist(nsecs - @start[tid]); delete(@start[tid]); }'

# 监控文件系统操作
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args->filename)); }'

11.2 内核模块参数优化

# 查看已加载模块参数
modinfo <module_name>

# 临时修改模块参数
sudo modprobe <module_name> parameter=value

# 永久修改模块参数
sudo tee /etc/modprobe.d/<module_name>.conf << 'EOF'
options <module_name> parameter=value
EOF

# 重新加载模块
sudo modprobe -r <module_name>
sudo modprobe <module_name>

11.3 使用 tuned 进行自动化调优

# 安装 tuned
sudo dnf install tuned

# 查看可用配置文件
tuned-adm list

# 应用优化配置
sudo tuned-adm profile throughput-performance  # 高吞吐量
# 或
sudo tuned-adm profile latency-performance    # 低延迟

# 创建自定义配置
sudo mkdir -p /etc/tuned/custom-profile
sudo tee /etc/tuned/custom-profile/tuned.conf << 'EOF'
[main]
include=throughput-performance

[sysctl]
net.core.somaxconn=65535
vm.swappiness=10

[cpu]
governor=performance
EOF

sudo tuned-adm profile custom-profile

十二、性能优化最佳实践

12.1 优化原则

  1. 测量优先:在优化前先测量当前性能
  2. 渐进式调整:一次只修改一个参数,观察效果
  3. 备份配置:修改前备份原始配置
  4. 文档记录:记录所有修改和效果
  5. 测试验证:在生产环境应用前充分测试

12.2 常见性能瓶颈及解决方案

瓶颈类型 症状 解决方案
CPU 瓶颈 高 CPU 使用率,负载高 优化算法,增加核心数,调整调度器
内存瓶颈 频繁交换,OOM 增加内存,优化应用内存使用,调整 swappiness
磁盘 I/O 瓶颈 高 iowait,响应慢 使用 SSD,优化文件系统,调整 I/O 调度器
网络瓶颈 高延迟,丢包 优化网络参数,增加带宽,使用 BBR

12.3 性能优化检查清单

#!/bin/bash
# 性能优化检查清单

echo "=== AlmaLinux 性能优化检查清单 ==="

# 1. 系统信息
echo -e "\n[1] 系统信息:"
echo "OS: $(cat /etc/redhat-release)"
echo "Kernel: $(uname -r)"
echo "CPU: $(grep -c ^processor /proc/cpuinfo) cores"
echo "Memory: $(free -h | awk '/^Mem:/ {print $2}')"

# 2. 当前负载
echo -e "\n[2] 当前负载:"
uptime
echo "Memory Usage: $(free | grep Mem | awk '{printf("%.1f%%", $3/$2 * 100.0)}')"

# 3. 检查关键优化参数
echo -e "\n[3] 关键参数检查:"
echo "somaxconn: $(sysctl -n net.core.somaxconn)"
echo "tcp_tw_reuse: $(sysctl -n net.ipv4.tcp_tw_reuse)"
echo "swappiness: $(sysctl -n vm.swappiness)"
echo "file-max: $(sysctl -n fs.file-max)"

# 4. 检查文件系统
echo -e "\n[4] 文件系统:"
df -h | grep -v tmpfs
echo "I/O Scheduler: $(cat /sys/block/sda/queue/scheduler 2>/dev/null | grep -o '\[.*\]')"

# 5. 检查运行的服务
echo -e "\n[5] 运行的服务:"
systemctl list-units --type=service --state=running | grep -c "\.service"

# 6. 检查网络连接
echo -e "\n[6] 网络连接:"
ss -s | grep -E "estab|timewait"

# 7. 检查文件描述符使用
echo -e "\n[7] 文件描述符:"
echo "System Max: $(cat /proc/sys/fs/file-max)"
echo "Current Usage: $(lsof | wc -l)"

echo -e "\n=== 检查完成 ==="

十三、总结

AlmaLinux 性能优化是一个系统工程,需要从多个层面综合考虑。通过本文介绍的策略,您可以:

  1. 系统评估:准确识别性能瓶颈
  2. 内核调优:优化系统核心参数
  3. 资源管理:高效利用 CPU、内存、磁盘和网络
  4. 应用优化:针对特定应用进行深度调优
  5. 持续监控:建立长效的性能监控机制

记住,优化是一个持续的过程。建议定期审查系统性能,根据业务变化调整优化策略。同时,保持系统更新,及时应用 AlmaLinux 官方的安全和性能补丁。

关键要点回顾:

  • 始终从测量开始,避免盲目优化
  • 一次只调整一个参数,便于效果评估
  • 建立完整的监控体系,实现数据驱动的优化
  • 保持配置文档化,便于维护和回滚
  • 在生产环境应用前,务必在测试环境验证

通过这些优化策略,您的 AlmaLinux 系统将能够更好地应对高负载场景,提供更稳定、更高效的服务。