引言

AlmaLinux 作为 CentOS 的继任者,继承了 RHEL 的稳定性和企业级特性,广泛应用于生产环境。然而,默认配置往往无法满足高性能需求,尤其是在高并发、大数据量或资源密集型场景下。本文将从内核调优、系统资源管理、网络优化、存储优化、应用层优化等多个维度,提供一套完整的性能优化实战指南。所有技巧均基于 AlmaLinux 89 版本,并附有详细的配置示例和验证方法。


一、内核调优:释放系统底层潜力

内核是操作系统的核心,其参数直接影响系统性能。AlmaLinux 提供了多种工具(如 sysctltuned)来动态调整内核参数。

1.1 使用 tuned 进行一键优化

tuned 是 Red Hat 推荐的性能调优工具,提供多种预设配置文件(如 latency-performancethroughput-performancevirtual-guest 等)。

步骤:

  1. 安装并启用 tuned

    sudo dnf install tuned -y
    sudo systemctl enable --now tuned
    
  2. 查看可用配置文件:

    tuned-adm list
    
  3. 选择适合的配置文件(例如,对于数据库服务器,推荐 latency-performance):

    sudo tuned-adm profile latency-performance
    
  4. 验证当前配置:

    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 磁盘,使用 nonemq-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 监控内存使用

使用 freevmstatsar 监控:

# 实时监控
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 性能优化是一个系统工程,需要从内核、系统、网络、存储到应用层全面考虑。本文提供的技巧涵盖了大多数常见场景,但优化前务必:

  1. 备份配置:修改前备份原文件。
  2. 逐步调整:每次只调整一个参数,观察效果。
  3. 监控验证:使用 sarperf 等工具验证优化效果。
  4. 场景适配:根据实际负载(如 Web、数据库、容器)选择合适策略。

通过持续监控和迭代优化,你可以将 AlmaLinux 的性能提升到一个新的水平,满足企业级应用的高要求。