在当今的云计算和企业级环境中,AlmaLinux 作为 RHEL 的一个开源替代品,因其稳定性和兼容性而备受青睐。然而,仅仅安装系统是不够的,为了充分发挥硬件潜力并满足高负载应用的需求,性能优化是必不可少的。本文将深入探讨从内核参数调整到应用层调优的完整策略,提供详细的步骤、代码示例和实际案例,帮助您系统地提升 AlmaLinux 的性能。

1. 性能优化概述与准备工作

在开始优化之前,必须明确优化目标:是提高吞吐量、降低延迟,还是提升资源利用率?同时,准备工作至关重要,包括监控工具的安装和基线性能的建立。

1.1 安装监控工具

监控是优化的基础。AlmaLinux 提供了丰富的工具,如 sysstatperfhtop

# 安装 sysstat(包含 sar、iostat 等)
sudo dnf install -y sysstat

# 启用 sysstat 服务(每10分钟收集一次数据)
sudo systemctl enable --now sysstat

# 安装 perf(性能分析工具)
sudo dnf install -y perf

# 安装 htop(交互式进程查看器)
sudo dnf install -y htop

1.2 建立性能基线

在调整任何参数前,记录当前性能指标。例如,使用 sar 收集 CPU、内存和 I/O 数据。

# 查看 CPU 使用率(每秒一次,共5次)
sar -u 1 5

# 查看内存使用情况
sar -r 1 5

# 查看磁盘 I/O
sar -d 1 5

案例:假设您正在运行一个 Web 服务器,基线显示 CPU 使用率在 70% 左右,内存使用率 80%。优化后,目标是将 CPU 使用率降至 50% 以下,内存使用率降至 60% 以下。

2. 内核参数调优

内核参数直接影响系统底层行为。AlmaLinux 使用 sysctl 来管理这些参数。优化前,请备份当前设置:sysctl -a > /etc/sysctl.conf.bak

2.1 网络性能优化

对于高并发网络服务(如 Nginx、Apache),调整 TCP 栈参数是关键。

  • 增加 TCP 连接队列:默认的 net.core.somaxconn 可能太小,导致连接被丢弃。 “`bash

    临时设置(重启后失效)

    sysctl -w net.core.somaxconn=4096

# 永久设置(编辑 /etc/sysctl.conf) echo “net.core.somaxconn = 4096” >> /etc/sysctl.conf sysctl -p # 应用更改


- **优化 TCP 拥塞控制**:对于高带宽延迟积(BDP)网络,使用 BBR 算法。
  ```bash
  # 检查当前拥塞控制算法
  sysctl net.ipv4.tcp_congestion_control

  # 设置为 BBR(需要内核支持,AlmaLinux 8/9 默认支持)
  echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
  sysctl -p
  • 调整 TCP 缓冲区大小:提高吞吐量。
    
    echo "net.core.rmem_max = 16777216" >> /etc/sysctl.conf
    echo "net.core.wmem_max = 16777216" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_rmem = 4096 87380 16777216" >> /etc/sysctl.conf
    echo "net.ipv4.tcp_wmem = 4096 65536 16777216" >> /etc/sysctl.conf
    sysctl -p
    

案例:一个电商网站在促销期间遇到连接超时。通过将 somaxconn 从 128 增加到 4096,并启用 BBR,连接成功率从 85% 提升到 99.5%。

2.2 内存管理优化

内存优化涉及虚拟内存、缓存和透明大页(THP)。

  • 调整虚拟内存参数:减少交换(swap)使用,提高响应速度。 “`bash

    降低 swappiness(默认值 60,建议数据库服务器设为 1-10)

    echo “vm.swappiness = 10” >> /etc/sysctl.conf

# 调整脏页比例和刷新间隔 echo “vm.dirty_ratio = 10” >> /etc/sysctl.conf echo “vm.dirty_background_ratio = 5” >> /etc/sysctl.conf echo “vm.dirty_expire_centisecs = 3000” >> /etc/sysctl.conf sysctl -p


- **透明大页(THP)**:对于数据库(如 MySQL),THP 可能导致性能下降。建议禁用。
  ```bash
  # 临时禁用
  echo never > /sys/kernel/mm/transparent_hugepage/enabled

  # 永久禁用(编辑 /etc/default/grub)
  # 在 GRUB_CMDLINE_LINUX 中添加 "transparent_hugepage=never"
  sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  sudo reboot

案例:一个 PostgreSQL 数据库服务器在高负载时出现延迟峰值。禁用 THP 后,查询延迟降低了 30%。

2.3 I/O 调度器优化

根据存储类型选择 I/O 调度器:SSD 使用 nonemq-deadline,HDD 使用 deadlinecfq

# 查看当前调度器
cat /sys/block/sda/queue/scheduler

# 临时设置(例如,为 SSD 设置 none)
echo none > /sys/block/sda/queue/scheduler

# 永久设置(使用 udev 规则)
sudo tee /etc/udev/rules.d/60-ioscheduler.rules <<EOF
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="none"
EOF

# 重新加载 udev 规则
sudo udevadm control --reload-rules

案例:在 NVMe SSD 上,将调度器从 mq-deadline 改为 none,随机读写 IOPS 提升了 15%。

3. 文件系统优化

文件系统选择和挂载选项对 I/O 性能有显著影响。AlmaLinux 默认使用 XFS,适合大文件和高并发。

3.1 XFS 优化

XFS 是 AlmaLinux 的推荐文件系统。优化挂载选项:

# 编辑 /etc/fstab,为 XFS 分区添加选项
# 示例:/dev/sdb1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0

# 应用更改
sudo mount -o remount /data
  • noatime/nodiratime:禁用访问时间更新,减少写操作。
  • logbufs 和 logbsize:增加日志缓冲区,提升写性能。

3.2 EXT4 优化(如果使用)

对于 EXT4,添加以下选项:

# /etc/fstab 示例
/dev/sdc1 /var/log ext4 defaults,noatime,data=writeback,barrier=0 0 0
  • data=writeback:提高写性能,但可能增加数据丢失风险(适合日志文件)。
  • barrier=0:禁用写屏障,提升性能(仅在 UPS 保护下使用)。

案例:一个日志服务器使用 EXT4,启用 data=writeback 后,日志写入速度从 500 MB/s 提升到 800 MB/s。

4. 应用层调优

应用层优化针对特定服务,如 Web 服务器、数据库和容器。

4.1 Web 服务器优化(Nginx 示例)

Nginx 是 AlmaLinux 上常见的 Web 服务器。优化配置文件 /etc/nginx/nginx.conf

# 全局配置
worker_processes auto;  # 自动设置为 CPU 核心数
worker_connections 1024; # 每个 worker 的最大连接数

# 事件模块
events {
    use epoll;  # 高效的事件模型
    worker_connections 4096; # 增加连接数
    multi_accept on; # 允许一次接受多个连接
}

# HTTP 模块
http {
    # 缓冲区优化
    client_body_buffer_size 128k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 8k;

    # 超时设置
    client_body_timeout 12;
    client_header_timeout 12;
    keepalive_timeout 15;
    send_timeout 10;

    # Gzip 压缩
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    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;

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 365d;
        add_header Cache-Control "public, immutable";
    }
}

案例:一个新闻网站通过增加 worker_connections 到 4096 并启用 Gzip,页面加载时间从 2.5 秒降至 1.2 秒。

4.2 数据库优化(MySQL 示例)

MySQL 是常见的数据库服务。优化配置文件 /etc/my.cnf

[mysqld]
# 内存配置
innodb_buffer_pool_size = 70% of total RAM  # 例如,16GB RAM 设置为 11G
innodb_log_file_size = 2G
innodb_flush_log_at_trx_commit = 2  # 平衡性能和持久性
innodb_flush_method = O_DIRECT  # 避免双缓冲

# 连接和线程
max_connections = 500
thread_cache_size = 50
table_open_cache = 2000

# 查询缓存(MySQL 8.0 已移除,但旧版本可用)
# query_cache_type = 1
# query_cache_size = 64M

# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

案例:一个电商数据库通过将 innodb_buffer_pool_size 从 1G 增加到 8G(在 16GB 服务器上),查询性能提升了 40%。

4.3 容器优化(Docker 示例)

在 AlmaLinux 上运行 Docker 时,优化容器资源限制和存储驱动。

  • 资源限制:使用 docker rundocker-compose 设置 CPU 和内存限制。

    # docker-compose.yml 示例
    version: '3'
    services:
    web:
      image: nginx
      deploy:
        resources:
          limits:
            cpus: '2'
            memory: 2G
          reservations:
            cpus: '0.5'
            memory: 512M
    
  • 存储驱动:AlmaLinux 推荐使用 overlay2。确保内核支持。 “`bash

    检查 Docker 存储驱动

    docker info | grep “Storage Driver”

# 配置 Docker 使用 overlay2(编辑 /etc/docker/daemon.json) {

"storage-driver": "overlay2"

} sudo systemctl restart docker


**案例**:一个微服务应用通过设置容器内存限制,避免了 OOM(内存溢出)错误,系统稳定性提高。

## 5. 监控与持续优化

优化不是一次性的,需要持续监控和调整。

### 5.1 使用 Prometheus 和 Grafana
安装 Prometheus 和 Grafana 进行可视化监控。

```bash
# 安装 Prometheus
sudo dnf install -y prometheus

# 安装 Grafana
sudo dnf install -y grafana

# 启动服务
sudo systemctl enable --now prometheus
sudo systemctl enable --now grafana-server

# 配置 Prometheus 监控节点(编辑 /etc/prometheus/prometheus.yml)
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']  # Node Exporter 端口

5.2 自动化调优脚本

编写脚本自动应用优化参数。

#!/bin/bash
# /usr/local/bin/perf-tune.sh

# 网络优化
sysctl -w net.core.somaxconn=4096
sysctl -w net.ipv4.tcp_congestion_control=bbr

# 内存优化
sysctl -w vm.swappiness=10

# 保存到 sysctl.conf
echo "net.core.somaxconn = 4096" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
echo "vm.swappiness = 10" >> /etc/sysctl.conf

echo "优化已应用并保存。"

案例:通过 Prometheus 监控,发现夜间备份时 I/O 瓶颈,调整了 vm.dirty_background_ratio,备份时间缩短了 20%。

6. 总结

AlmaLinux 性能优化是一个系统工程,从内核参数到应用层都需要细致调整。关键步骤包括:

  1. 准备:安装监控工具,建立基线。
  2. 内核调优:针对网络、内存和 I/O 调整参数。
  3. 文件系统优化:选择合适选项提升 I/O。
  4. 应用层调优:根据服务类型配置。
  5. 持续监控:使用工具跟踪性能,迭代优化。

记住,优化前务必测试,避免生产环境风险。通过本文的策略,您可以显著提升 AlmaLinux 系统的性能,满足高负载需求。如果遇到特定场景,建议参考官方文档或社区资源进行进一步调整。