引言:为什么需要对 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 调度器
默认 cfq 或 deadline,对于 I/O 密集型应用,使用 noop 或 kyber。
设置:
# 临时
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 进程优先级
使用 nice 和 renice 调整。
示例:
# 启动高优先级进程
nice -n -10 /usr/bin/myapp
# 调整现有进程
renice -n -10 -p $(pgrep myapp)
监控:top 或 htop 观察 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. 监控与基准测试工具
优化后需持续监控。
- sysstat:
sar -u 1 10(CPU)、sar -r 1 10(内存)、sar -n DEV 1 10(网络)。 - iostat:
iostat -x 1 10(磁盘 I/O)。 - perf:
perf 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。
- 内核:应用上述网络和内存参数。
- 文件系统:挂载
/var/www为noatime。 - 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 - Nginx:在
nginx.conf增加worker_connections 1024;。 - 重启服务:
sudo systemctl restart nginx php-fpm。 - 测试:用
wrk -t12 -c400 -d30s http://localhost/模拟负载,优化后 QPS 可从 5000 升至 15000。
结论
AlmaLinux 性能优化是一个系统工程,从内核参数入手,逐步调优文件系统、内存、CPU 和网络。每个优化都应基于基准测试验证,并监控长期效果。建议使用 Ansible 或 Puppet 自动化部署这些配置。记住,过度优化可能引入不稳定,始终优先稳定性。如果遇到特定工作负载问题,可进一步细化参数。通过这些实战步骤,你的 AlmaLinux 服务器将显著提升效率,支持更高负载的企业应用。
