引言:为什么需要对 AlmaLinux 进行性能优化?

AlmaLinux 是一个基于 RHEL(Red Hat Enterprise Linux)源代码构建的开源企业级 Linux 发行版,作为 CentOS 的替代者,它继承了 RHEL 的稳定性和安全性,同时提供了长期支持(LTS)。在企业环境中,AlmaLinux 常用于服务器、云计算和容器化部署,但默认配置往往无法充分发挥硬件潜力。性能优化可以帮助系统在高负载下更高效地利用 CPU、内存、磁盘 I/O 和网络资源,从而提升应用响应速度、降低延迟,并减少资源浪费。

性能优化不是一蹴而就的,而是基于具体工作负载(如 Web 服务器、数据库或大数据处理)进行的迭代过程。本文将从内核参数调优、文件系统优化、内存管理、CPU 调度、网络优化以及监控工具等方面,提供详细的实战指南。每个部分都包含理论解释、具体步骤和完整示例,帮助你逐步实施。优化前,请备份系统并在测试环境中验证,以避免生产环境风险。

1. 内核参数调优:sysctl 的核心配置

内核参数通过 sysctl 接口动态调整,直接影响系统行为。AlmaLinux 默认使用 Linux 内核 5.x 或更高版本,优化重点包括网络栈、虚拟内存和进程调度。参数存储在 /etc/sysctl.conf/etc/sysctl.d/ 目录下,修改后需运行 sysctl -p 生效。

1.1 网络相关参数优化

高并发网络应用(如 Nginx 或 Apache)常受限于 TCP 连接上限和缓冲区大小。默认参数适合通用场景,但服务器需调整以支持更多连接。

  • net.core.somaxconn:定义监听套接字的最大连接队列长度。默认 128,太低会导致连接被丢弃。
  • net.ipv4.tcp_max_syn_backlog:SYN 队列长度,应对 SYN 洪水攻击。
  • net.core.netdev_max_backlog:网络设备接收队列,处理突发流量。

实战示例: 编辑 /etc/sysctl.d/99-network.conf

# 增加最大连接队列
net.core.somaxconn = 65535

# SYN 队列优化
net.ipv4.tcp_max_syn_backlog = 8192

# 网络设备队列
net.core.netdev_max_backlog = 2048

# 启用 TCP 快速打开(减少握手延迟)
net.ipv4.tcp_fastopen = 3

# TIME_WAIT 状态套接字重用,减少端口耗尽
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30

应用配置:

sudo sysctl -p /etc/sysctl.d/99-network.conf

解释与细节:这些参数在高负载 Web 服务器上可将并发连接数从数千提升到数万。例如,使用 ss -s 命令检查当前套接字统计,优化后观察 netstat -an | grep TIME_WAIT 减少。测试时,用 ab -n 10000 -c 1000 http://your-server/ 模拟并发请求。

1.2 虚拟内存和交换优化

内存管理参数影响页面交换和 OOM(Out of Memory)行为。AlmaLinux 默认使用 swap,但过度 swap 会降低性能。

  • vm.swappiness:控制 swap 使用倾向(0-100),默认 60。对于内存充足的服务器,设为 10 以优先使用 RAM。
  • vm.vfs_cache_pressure:文件系统缓存回收压力,默认 100。增大到 200 可加速缓存释放。
  • vm.overcommit_memory:内存过量提交策略,0 为启发式,1 为始终允许(适合数据库)。

实战示例: 在 /etc/sysctl.d/99-memory.conf

# 减少 swap 使用
vm.swappiness = 10

# 增加缓存压力,加速文件系统缓存回收
vm.vfs_cache_pressure = 200

# 允许内存过量提交(小心使用,避免 OOM)
vm.overcommit_memory = 1

# OOM 杀手调整,优先杀非关键进程
vm.oom_kill_allocating_task = 1

应用并验证:

sudo sysctl -p /etc/sysctl.d/99-memory.conf
free -h  # 检查 swap 使用
vmstat 1 10  # 监控虚拟内存统计,观察 si/so(swap in/out)变化

细节:在数据库服务器上,将 vm.swappiness 设为 10 可减少 50% 的 swap I/O。监控工具如 sar -r 可显示内存使用趋势,如果 swap 频繁,考虑增加物理 RAM。

1.3 进程和文件描述符限制

  • fs.file-max:系统最大打开文件数,默认较低(约 8192),高负载需增大。
  • fs.nr_open:单进程最大文件描述符。

示例

# /etc/sysctl.d/99-files.conf
fs.file-max = 2097152
fs.nr_open = 2097152

结合 /etc/security/limits.conf

* soft nofile 1048576
* hard nofile 1048576

重启后生效,使用 ulimit -n 检查。

2. 文件系统调优:选择与挂载选项

文件系统是 I/O 性能瓶颈的核心。AlmaLinux 支持 ext4、XFS(默认)和 Btrfs。优化包括选择合适 FS、挂载选项和定期维护。

2.1 选择文件系统

  • XFS:适合大文件和高并发 I/O(如视频流、数据库),默认在 AlmaLinux。
  • ext4:通用,稳定,适合小文件。
  • Btrfs:支持快照和压缩,但性能稍逊。

对于服务器,推荐 XFS。创建分区时:

sudo mkfs.xfs /dev/sdX1

2.2 挂载选项优化

/etc/fstab 中添加选项,重启生效。

  • noatime:禁用访问时间更新,减少 I/O。
  • nodiratime:类似,针对目录。
  • barrier=0:禁用写屏障(仅电池备份 RAID),提升写速。
  • logbufs=8:XFS 日志缓冲区增大。

实战示例: 编辑 /etc/fstab

/dev/sdb1 /data xfs defaults,noatime,nodiratime,logbufs=8 0 0

重新挂载:

sudo mount -o remount /data

解释noatime 可减少 20-30% 的元数据 I/O。测试 I/O 性能:

# 安装 fio
sudo dnf install fio -y

# 随机读写测试
fio --name=randread --ioengine=libaio --iodepth=64 --rw=randread --bs=4k --size=1G --numjobs=8 --runtime=300 --group_reporting --filename=/data/testfile

输出示例(简化):

randread: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (D) 4096B-4096B, ioengine=libaio, iodepth=64
...
read: IOPS=50k, BW=195MiB/s (205MB/s)

优化后,IOPS 可提升 2-3 倍。定期运行 xfs_repair 检查文件系统。

2.3 日志和缓存调优

  • XFS 日志:分离日志设备以提升性能。
sudo xfs_logprint /dev/sdX1  # 检查日志
sudo xfs_admin -L /dev/sdX1  # 启用大日志

对于 ext4:

sudo tune2fs -o journal_data_writeback /dev/sdX1  # 写回模式

3. 内存管理优化:避免瓶颈

AlmaLinux 默认使用透明大页(THP)和 NUMA,但某些场景需禁用。

3.1 透明大页(THP)

THP 适合大内存应用,但数据库(如 MySQL)可能因碎片化而性能下降。

禁用 THP: 创建 /etc/systemd/system/disable-thp.service

[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

启用服务:

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

验证

cat /sys/kernel/mm/transparent_hugepage/enabled

细节:在 MySQL 上禁用后,查询延迟可降低 15%。监控 grep THP /proc/meminfo

3.2 NUMA 调优

对于多 CPU 服务器,使用 numactl 绑定进程到节点。

示例

# 绑定进程到节点 0
numactl --cpunodebind=0 --membind=0 /path/to/app

/etc/default/grub 添加 numa=off 以全局禁用,然后 grub2-mkconfig -o /boot/grub2/grub.cfg 更新。

4. CPU 调度和进程优化

4.1 CPU 调度器

默认 cfqdeadline,对于 I/O 密集型应用,使用 noopkyber

设置

# 临时
echo noop > /sys/block/sda/queue/scheduler

# 永久,通过 udev 规则 /etc/udev/rules.d/60-scheduler.rules
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="noop"

4.2 进程优先级

使用 nicerenice 调整。

示例

# 启动高优先级进程
nice -n -10 /usr/bin/myapp

# 调整现有进程
renice -n -10 -p $(pgrep myapp)

监控tophtop 观察 CPU 使用,mpstat -P ALL 1 查看每个核心。

5. 网络优化:接口与协议栈

5.1 网卡队列

增加 RSS(Receive Side Scaling)队列。

示例(Intel 网卡):

sudo ethtool -L eth0 combined 16  # 设置队列数

持久化:在 /etc/udev/rules.d/99-net.rules

SUBSYSTEM=="net", ACTION=="add", KERNEL=="eth0", RUN+="/usr/bin/ethtool -L %k combined 16"

5.2 TCP BBR 拥塞控制

AlmaLinux 内核支持 BBR,提升高延迟网络吞吐。

启用

sudo sysctl -w net.core.default_qdisc=fq
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

持久化到 /etc/sysctl.d/99-network.conf

测试:使用 iperf3

# 服务器
iperf3 -s

# 客户端
iperf3 -c server_ip -t 30 -P 10

优化后,带宽利用率可提升 20-50%。

6. 监控与基准测试工具

优化后需持续监控。

  • sysstatsar -u 1 10(CPU)、sar -r 1 10(内存)、sar -n DEV 1 10(网络)。
  • iostatiostat -x 1 10(磁盘 I/O)。
  • perfperf top 分析热点。
  • 基准测试:使用 sysbench 测试 CPU/内存/OLTP。

安装

sudo dnf install sysstat perf sysbench -y
sudo systemctl enable --now sysstat

示例 sysbench CPU 测试

sysbench cpu --cpu-max-prime=20000 run

输出:每秒运算数(events/s),优化前后对比。

7. 实战案例:Web 服务器优化

假设 AlmaLinux 运行 Nginx + PHP-FPM。

  1. 内核:应用上述网络和内存参数。
  2. 文件系统:挂载 /var/wwwnoatime
  3. PHP-FPM:在 /etc/php-fpm.d/www.conf 调整:
    
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 10
    pm.min_spare_servers = 5
    pm.max_spare_servers = 20
    
  4. Nginx:在 nginx.conf 增加 worker_connections 1024;
  5. 重启服务sudo systemctl restart nginx php-fpm
  6. 测试:用 wrk -t12 -c400 -d30s http://localhost/ 模拟负载,优化后 QPS 可从 5000 升至 15000。

结论

AlmaLinux 性能优化是一个系统工程,从内核参数入手,逐步调优文件系统、内存、CPU 和网络。每个优化都应基于基准测试验证,并监控长期效果。建议使用 Ansible 或 Puppet 自动化部署这些配置。记住,过度优化可能引入不稳定,始终优先稳定性。如果遇到特定工作负载问题,可进一步细化参数。通过这些实战步骤,你的 AlmaLinux 服务器将显著提升效率,支持更高负载的企业应用。