引言:为什么需要对 AlmaLinux 进行性能优化?
AlmaLinux 作为 CentOS 的替代者,继承了 RHEL 的稳定性和安全性,广泛应用于服务器环境。然而,随着业务负载的增加,系统默认配置往往无法满足高性能需求。性能优化不是一蹴而就的,它涉及内核参数调整、资源调度、文件系统优化等多个层面。本文将从实战角度出发,详细讲解如何在 AlmaLinux 上进行系统级性能调优,帮助你榨干硬件性能,同时保持系统稳定。
优化前,我们需要明确目标:是提升 I/O 吞吐量?减少 CPU 上下文切换?还是降低内存延迟?不同场景需要不同的策略。接下来,我们将分模块深入探讨。
1. 系统监控与基准测试:优化的基础
在盲目调整参数前,必须先了解系统当前状态。AlmaLinux 提供了丰富的工具来监控资源使用情况。
1.1 常用监控工具
- top/htop:实时查看 CPU、内存和进程占用。htop 是增强版,支持交互式操作。
- vmstat:报告虚拟内存统计,包括进程、内存、I/O 等信息。
- iostat:监控磁盘 I/O 统计,帮助识别瓶颈。
- sar(sysstat 包):系统活动报告器,可收集历史数据。
安装 sysstat:
sudo dnf install sysstat -y
sudo systemctl enable --now sysstat
示例:使用 vmstat 每 2 秒采样一次,共 3 次:
vmstat 2 3
输出示例:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 123456 67890 456789 0 0 100 200 500 600 5 2 93 0 0
0 0 0 123456 67890 456789 0 0 0 0 400 500 3 1 96 0 0
- r:运行队列长度,> CPU 核数表示 CPU 瓶颈。
- us/sy:用户/系统 CPU 使用率。
- wa:I/O 等待时间,高值表示磁盘瓶颈。
1.2 基准测试工具
- sysbench:测试 CPU、内存、I/O 和数据库性能。
- fio:灵活的 I/O 测试器,模拟各种读写模式。
安装 sysbench:
sudo dnf install sysbench -y
CPU 基准测试示例:
sysbench cpu --cpu-max-prime=20000 run
输出包括每秒事件数(events/s)和延迟统计,帮助量化 CPU 性能。
通过这些工具,你可以建立基线(baseline),例如:当前 CPU 利用率 70%,I/O 等待 10%。优化后对比,确保改进有效。
2. 内核参数调整:sysctl 的力量
内核参数是性能优化的核心,通过 /etc/sysctl.conf 或 sysctl 命令动态调整。AlmaLinux 默认使用 kernel-5.x,支持大量可调参数。调整前备份原配置:cp /etc/sysctl.conf /etc/sysctl.conf.bak。
2.1 CPU 和进程调度优化
默认调度器是 CFS(完全公平调度器),适合通用场景,但高负载服务器可切换到 deadline 或 noop(针对 SSD)。
编辑 /etc/sysctl.conf:
# 启用内核抢占,提高响应性
kernel.sched_migration_cost_ns = 5000000
# 减少 CPU 上下文切换,提高吞吐量
kernel.sched_wakeup_granularity_ns = 15000000
# 调整进程优先级,nice 值范围 -20 到 19,默认 0
kernel.sched_child_runs_first = 0 # 子进程不优先运行,避免 fork 爆炸
应用更改:
sudo sysctl -p
实战例子:对于 Web 服务器,高并发下上下文切换过多(> 100k/s),调整后可降低 20%。监控命令:vmstat 1 观察 cs 列。
2.2 内存管理优化
AlmaLinux 默认启用透明大页(THP),但在某些工作负载(如数据库)中会导致碎片化。禁用 THP 可提升性能。
# 禁用 THP
vm.transparent_hugepage = never
# 调整 swappiness(交换分区使用倾向,0-100,默认 60)。对于内存充足的服务器,设为 10 以减少交换。
vm.swappiness = 10
# 优化虚拟内存参数,减少 OOM(Out of Memory)风险
vm.overcommit_memory = 1 # 总是允许 overcommit,适合内存密集型应用
vm.overcommit_ratio = 80 # overcommit 限制在物理内存的 80%
vm.min_free_kbytes = 262144 # 保留至少 256MB 空闲内存,避免低内存压力
示例:对于 Redis 服务器,禁用 THP 后,内存分配延迟降低。验证:cat /sys/kernel/mm/transparent_hugepage/enabled 应为 [never]。
2.3 网络优化
高并发网络服务需调整 TCP 栈参数。
# 增大 TCP 缓冲区大小
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 启用 TCP 快速打开和重用
net.ipv4.tcp_fastopen = 3
net.ipv4.tcp_tw_reuse = 1
# 减少 TIME_WAIT 连接
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_fin_timeout = 15
应用后,使用 ss -s 检查连接状态。实战:Nginx 服务器在 10k 并发下,TIME_WAIT 从 50k 降到 10k,提升连接复用率。
2.4 I/O 调度器优化
对于 SSD,使用 kyber 或 none 调度器;HDD 使用 mq-deadline。
查看当前调度器:
cat /sys/block/sda/queue/scheduler
# 输出:[mq-deadline] kyber bfq none
临时切换:
echo kyber > /sys/block/sda/queue/scheduler
持久化:创建 udev 规则 /etc/udev/rules.d/60-ioscheduler.rules:
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="kyber"
重启 udev:sudo udevadm control --reload-rules && sudo udevadm trigger。
3. 文件系统优化:提升 I/O 效率
文件系统选择直接影响读写性能。AlmaLinux 默认 ext4,适合大多数场景,但 XFS 更适合大文件和高并发。
3.1 挂载选项调整
编辑 /etc/fstab,添加选项:
- noatime:不更新访问时间,减少写操作。
- data=writeback:ext4 日志模式,提高写性能(但有数据丢失风险)。
- barrier=0:禁用写屏障(仅电池备份 RAID 适用)。
示例 /etc/fstab 条目:
/dev/sda1 / ext4 defaults,noatime,data=writeback 0 1
重新挂载:
sudo mount -o remount /
3.2 从 ext4 迁移到 XFS
如果 I/O 是瓶颈,考虑 XFS(支持在线调整)。
创建 XFS 分区(假设 /dev/sdb1 为空):
sudo mkfs.xfs /dev/sdb1
sudo mkdir /data
sudo mount /dev/sdb1 /data
添加到 /etc/fstab:
/dev/sdb1 /data xfs defaults,noatime 0 2
XFS 优势:大文件处理更快。使用 xfs_info 检查文件系统信息。
3.3 调整 I/O 优先级
使用 ionice 为进程设置 I/O 类别:
# 为数据库进程设置最高 I/O 优先级(实时类)
sudo ionice -c 1 -n 0 -p $(pgrep mysqld)
4. 服务与进程管理:高效资源分配
AlmaLinux 使用 systemd 管理服务,优化服务启动和资源限制可显著提升性能。
4.1 systemd 资源控制
使用 cgroups 限制 CPU、内存使用。创建服务覆盖文件。
例如,限制 Nginx 使用不超过 50% CPU 和 2GB 内存: 创建 /etc/systemd/system/nginx.service.d/override.conf:
[Service]
CPUQuota=50%
MemoryLimit=2G
重载 systemd:
sudo systemctl daemon-reload
sudo systemctl restart nginx
验证:systemctl status nginx 查看资源使用。
4.2 禁用不必要服务
列出运行服务:
systemctl list-unit-files --type=service --state=enabled
禁用示例(如果不需要蓝牙):
sudo systemctl disable bluetooth
sudo systemctl stop bluetooth
实战:对于无图形界面的服务器,禁用 gdm(显示管理器)可节省 100MB 内存。
4.3 进程优先级调整
使用 nice 和 renice:
# 启动高优先级进程
nice -n -10 /usr/bin/myapp
# 调整现有进程
renice -n -10 -p $(pgrep myapp)
nice 值越低,优先级越高(-20 最高)。
5. 高级优化:针对特定工作负载
5.1 数据库服务器(如 MySQL/MariaDB)
- 内核参数:增加
fs.file-max = 1000000(最大文件描述符)。 - MariaDB 配置:my.cnf 中添加:
innodb_buffer_pool_size = 4G # 根据 RAM 调整,通常 70% RAM innodb_log_file_size = 512M query_cache_type = 0 # 禁用查询缓存(MySQL 8+ 默认) - 监控:使用
mysqladmin extended-status查看 InnoDB 缓冲池命中率(> 99% 为佳)。
5.2 Web 服务器(Nginx/Apache)
- Nginx 配置:/etc/nginx/nginx.conf 中:
worker_processes auto; # 匹配 CPU 核数 worker_connections 10240; # 每个 worker 最大连接 multi_accept on; - Apache:启用 MPM event 模块,调整
MaxRequestWorkers为 CPU 核数 * 200。
5.3 虚拟化环境(KVM)
- 启用 hugepages:
sysctl vm.nr_hugepages=1024。 - CPU 拓扑:使用
virsh vcpuinfo检查,确保 vCPU 与物理核对齐。
6. 持续监控与回滚策略
优化后,使用 Prometheus + Grafana 或 Nagios 持续监控。设置警报阈值,如 CPU > 80% 或内存 > 90%。
回滚:始终保留备份。如果参数导致问题,重启或 sysctl -w key=value 恢复默认。
结论
AlmaLinux 性能优化是一个迭代过程,从监控开始,逐步调整内核、文件系统和服务。通过上述策略,你可以在生产环境中实现 20-50% 的性能提升。记住,优化需基于实际负载测试,避免过度调整导致不稳定。建议在测试环境验证后再上线。如果你有特定工作负载,可进一步细化配置。
