引言
AlmaLinux 作为 CentOS 的继任者,继承了 RHEL 的稳定性和企业级特性,广泛应用于生产环境。然而,默认配置往往无法满足高性能需求,尤其是在高并发、大数据量或资源密集型场景下。本文将从内核调优、系统资源管理、网络优化、存储优化、应用层优化等多个维度,提供一套完整的性能优化实战指南。所有技巧均基于 AlmaLinux 8⁄9 版本,并附有详细的配置示例和验证方法。
一、内核调优:释放系统底层潜力
内核是操作系统的核心,其参数直接影响系统性能。AlmaLinux 提供了多种工具(如 sysctl、tuned)来动态调整内核参数。
1.1 使用 tuned 进行一键优化
tuned 是 Red Hat 推荐的性能调优工具,提供多种预设配置文件(如 latency-performance、throughput-performance、virtual-guest 等)。
步骤:
安装并启用
tuned:sudo dnf install tuned -y sudo systemctl enable --now tuned查看可用配置文件:
tuned-adm list选择适合的配置文件(例如,对于数据库服务器,推荐
latency-performance):sudo tuned-adm profile latency-performance验证当前配置:
tuned-adm active
示例: 对于虚拟机中的 Web 服务器,使用 virtual-guest 配置可以优化内存和 I/O 调度:
sudo tuned-adm profile virtual-guest
1.2 手动调整关键内核参数
如果 tuned 无法满足需求,可以手动调整 sysctl 参数。以下是一些常见场景的优化参数:
1.2.1 网络性能优化
编辑 /etc/sysctl.conf 或创建 /etc/sysctl.d/99-custom.conf:
# 增加 TCP 连接队列大小
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
# 优化 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 Fast Open
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-custom.conf
1.2.2 内存管理优化
对于内存密集型应用(如 Java 应用),调整虚拟内存参数:
# 降低 swappiness,减少交换分区使用
vm.swappiness = 10
# 增加内存过量提交限制(适用于容器环境)
vm.overcommit_memory = 1
vm.overcommit_ratio = 80
# 优化透明大页(THP),对于数据库可能需禁用
echo never > /sys/kernel/mm/transparent_hugepage/enabled
1.2.3 I/O 调度器优化
对于 SSD 磁盘,使用 none 或 mq-deadline 调度器:
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 临时修改(重启失效)
echo none > /sys/block/sda/queue/scheduler
# 永久修改(通过 udev 规则)
sudo tee /etc/udev/rules.d/60-ssd-scheduler.rules <<EOF
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
EOF
sudo udevadm control --reload-rules
二、系统资源管理:CPU、内存与进程
2.1 CPU 调度与隔离
2.1.1 使用 taskset 绑定进程到特定 CPU 核心
对于关键进程(如数据库),绑定到专用核心可以减少上下文切换:
# 查看 CPU 核心
lscpu | grep -i "cpu(s):"
# 绑定进程 PID 到 CPU 0 和 1
taskset -cp 0,1 <PID>
# 启动新进程并绑定
taskset -c 0,1 /usr/bin/myapp
2.1.2 使用 cgroups 限制资源
创建 cgroup 限制 CPU 使用:
# 安装 cgroup-tools
sudo dnf install cgroup-tools -y
# 创建 CPU 限制组
sudo cgcreate -g cpu:/myapp
sudo cgset -r cpu.cfs_quota_us=50000 myapp # 限制为 50% CPU
sudo cgset -r cpu.cfs_period_us=100000 myapp
# 将进程加入组
sudo cgexec -g cpu:myapp /usr/bin/myapp
2.2 内存管理
2.2.1 使用 numactl 优化 NUMA 架构
对于多路服务器,NUMA 优化至关重要:
# 查看 NUMA 拓扑
numactl --hardware
# 绑定进程到特定 NUMA 节点
numactl --cpunodebind=0 --membind=0 /usr/bin/myapp
2.2.2 监控内存使用
使用 free、vmstat 和 sar 监控:
# 实时监控
vmstat 1
# 使用 sar 记录历史数据(需安装 sysstat)
sudo dnf install sysstat -y
sudo systemctl enable --now sysstat
sar -r 1 10 # 每秒采样,共10次
三、网络优化:提升吞吐量与降低延迟
3.1 网络接口优化
3.1.1 启用多队列(RSS)与中断均衡
对于 10G+ 网卡,启用多队列:
# 查看网卡队列
ethtool -l eth0
# 设置队列数(例如,设置为 8)
ethtool -L eth0 combined 8
# 启用中断均衡(安装 irqbalance)
sudo dnf install irqbalance -y
sudo systemctl enable --now irqbalance
3.1.2 调整 MTU
对于数据中心网络,增大 MTU 可提升吞吐量:
# 临时修改
sudo ip link set eth0 mtu 9000
# 永久修改(编辑 ifcfg 文件)
sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
# 添加或修改:MTU=9000
sudo systemctl restart NetworkManager
3.2 TCP/IP 协议栈优化
3.2.1 启用 BBR 拥塞控制算法
BBR(Bottleneck Bandwidth and RTT)能显著提升高延迟网络下的吞吐量:
# 检查当前算法
sysctl net.ipv4.tcp_congestion_control
# 启用 BBR
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
# 永久生效
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.d/99-bbr.conf
3.2.2 优化连接复用
对于 Web 服务器,启用 HTTP Keep-Alive 和 TCP Keep-Alive:
# Nginx 配置示例
keepalive_timeout 65;
keepalive_requests 100;
四、存储优化:I/O 性能提升
4.1 文件系统优化
4.1.1 选择合适的文件系统
- XFS:适合大文件和高并发,AlmaLinux 默认。
- ext4:通用性强,适合小文件。
格式化时优化参数:
# XFS 优化(启用日志和延迟分配)
mkfs.xfs -f -L data -i size=512 -d su=128k,sw=10 /dev/sdb1
# ext4 优化(启用 noatime 和 journaling)
mkfs.ext4 -O ^has_journal -E lazy_itable_init=0,lazy_journal_init=0 /dev/sdb1
4.1.2 挂载选项优化
编辑 /etc/fstab:
# XFS 示例
/dev/sdb1 /data xfs defaults,noatime,nodiratime,allocsize=64m 0 0
# ext4 示例
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,data=writeback 0 0
4.2 I/O 调度器与队列深度
4.2.1 调整队列深度
对于 NVMe SSD,增加队列深度:
# 查看当前队列深度
cat /sys/block/nvme0n1/queue/nr_requests
# 设置为 1024
echo 1024 > /sys/block/nvme0n1/queue/nr_requests
4.2.2 使用 fio 测试 I/O 性能
安装并运行基准测试:
sudo dnf install fio -y
# 随机读写测试
fio --name=randread --ioengine=libaio --iodepth=64 --rw=randread --bs=4k --size=1G --numjobs=4 --runtime=60 --group_reporting
五、应用层优化:实战技巧
5.1 Web 服务器优化(Nginx)
5.1.1 配置优化
# /etc/nginx/nginx.conf
worker_processes auto; # 自动设置为 CPU 核心数
worker_connections 1024; # 每个 worker 的最大连接数
# 事件模块优化
events {
use epoll; # Linux 2.6+ 默认使用 epoll
worker_connections 1024;
multi_accept on;
}
# HTTP 模块优化
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 100;
types_hash_max_size 2048;
# Gzip 压缩
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}
5.1.2 使用 ab 测试性能
sudo dnf install httpd-tools -y
ab -n 10000 -c 100 http://localhost/
5.2 数据库优化(MySQL/MariaDB)
5.2.1 配置优化(my.cnf)
[mysqld]
# 内存配置
innodb_buffer_pool_size = 70% of total RAM # 例如,16GB 服务器设为 12G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 2 # 平衡性能与数据安全
# 连接配置
max_connections = 200
thread_cache_size = 50
# 查询缓存(MySQL 8.0+ 已移除,MariaDB 仍可用)
query_cache_type = 1
query_cache_size = 64M
# I/O 优化
innodb_flush_method = O_DIRECT
innodb_io_capacity = 2000 # 对于 SSD
5.2.2 使用 mysqltuner 诊断
sudo dnf install mysqltuner -y
mysqltuner --user root --pass <password>
5.3 应用性能监控
5.3.1 使用 perf 分析性能瓶颈
sudo dnf install perf -y
# 分析 CPU 使用率
sudo perf top
# 记录进程性能数据
sudo perf record -g -p <PID> sleep 30
sudo perf report
5.3.2 使用 strace 调试系统调用
# 跟踪进程的系统调用
strace -p <PID> -c # 统计模式
strace -p <PID> -T # 显示调用时间
六、监控与持续优化
6.1 部署监控系统
6.1.1 使用 Prometheus + Grafana
# 安装 Prometheus
sudo dnf install prometheus -y
sudo systemctl enable --now prometheus
# 安装 Grafana
sudo dnf install grafana -y
sudo systemctl enable --now grafana-server
6.1.2 配置 Node Exporter
sudo dnf install node_exporter -y
sudo systemctl enable --now node_exporter
6.2 自动化优化脚本
创建一个简单的优化脚本 /usr/local/bin/optimize-alma.sh:
#!/bin/bash
# AlmaLinux 性能优化脚本
# 1. 设置 tuned 配置
tuned-adm profile latency-performance
# 2. 调整内核参数
sysctl -w net.core.somaxconn=65535
sysctl -w net.ipv4.tcp_max_syn_backlog=65535
sysctl -w vm.swappiness=10
# 3. 优化 I/O 调度器
for disk in /sys/block/sd*/queue/scheduler; do
echo none > $disk
done
# 4. 记录优化日志
echo "$(date): Optimization applied" >> /var/log/optimization.log
七、总结
AlmaLinux 性能优化是一个系统工程,需要从内核、系统、网络、存储到应用层全面考虑。本文提供的技巧涵盖了大多数常见场景,但优化前务必:
- 备份配置:修改前备份原文件。
- 逐步调整:每次只调整一个参数,观察效果。
- 监控验证:使用
sar、perf等工具验证优化效果。 - 场景适配:根据实际负载(如 Web、数据库、容器)选择合适策略。
通过持续监控和迭代优化,你可以将 AlmaLinux 的性能提升到一个新的水平,满足企业级应用的高要求。
