AlmaLinux 是一个由社区驱动的、开源的、与 RHEL 二进制兼容的操作系统。它继承了 RHEL 的稳定性和安全性,同时提供了长期的支持。对于服务器管理员和开发者来说,优化 AlmaLinux 的性能是确保应用高效运行、资源合理利用的关键。本文将从基础配置到高级调优,提供一份详细的实战指南,帮助您系统地提升 AlmaLinux 的性能。

1. 基础系统配置优化

在深入高级调优之前,确保系统的基础配置是优化的。这包括内核参数、文件系统和基本服务配置。

1.1 内核参数调优

内核参数直接影响系统的资源管理和调度。通过调整 /etc/sysctl.conf 文件,可以优化网络、内存和进程管理。

示例:优化网络和内存参数

编辑 /etc/sysctl.conf 文件,添加或修改以下参数:

# 网络优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15

# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 50

解释

  • net.core.somaxconn:定义了系统中每个端口的最大连接队列长度,提高并发连接能力。
  • net.ipv4.tcp_tw_reuse:允许重用 TIME_WAIT 状态的套接字,减少连接建立的开销。
  • vm.swappiness:控制内核使用交换分区的倾向,值越低越倾向于使用物理内存,建议设置为 10(默认为 60)。
  • vm.dirty_ratiovm.dirty_background_ratio:控制脏页比例,避免系统因大量写入而卡顿。

应用配置:

sudo sysctl -p

1.2 文件系统优化

文件系统的选择和挂载选项对 I/O 性能有显著影响。对于大多数服务器,推荐使用 XFS 或 ext4。

示例:优化 ext4 文件系统

/etc/fstab 中为挂载点添加优化选项:

/dev/sda1 / ext4 defaults,noatime,nodiratime,commit=60 0 1

解释

  • noatime:禁止更新文件访问时间,减少磁盘写入。
  • nodiratime:禁止更新目录访问时间。
  • commit=60:将数据提交到磁盘的间隔时间从默认的 5 秒延长到 60 秒,减少 I/O 次数。

对于 XFS 文件系统,可以使用以下挂载选项:

/dev/sdb1 /data xfs defaults,noatime,nodiratime,allocsize=64k 0 2

1.3 禁用不必要的服务

减少运行的服务可以释放系统资源。使用 systemctl 管理服务。

示例:禁用不需要的服务

# 查看当前运行的服务
systemctl list-unit-files --type=service | grep enabled

# 禁用不需要的服务,例如蓝牙、cups(打印服务)
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable firewalld  # 如果使用其他防火墙

注意:禁用服务前请确保不影响系统功能。

2. 系统资源监控与诊断

在优化之前,需要了解系统的当前状态。使用工具监控 CPU、内存、磁盘和网络。

2.1 使用 tophtop

top 是内置的实时监控工具,htop 是更友好的版本(需安装)。

# 安装 htop
sudo dnf install htop -y

# 运行 htop
htop

htop 中,可以查看进程列表、CPU 和内存使用情况,并可以按 F9 杀死进程。

2.2 使用 vmstatiostat

vmstat 报告虚拟内存统计,iostat 报告磁盘 I/O 统计。

# 安装 sysstat 包
sudo dnf install sysstat -y

# 每 2 秒报告一次,共 5 次
vmstat 2 5

# 每 2 秒报告一次磁盘 I/O,共 5 次
iostat -x 2 5

示例输出分析

  • vmstat 中的 siso 列显示交换分区的读写,如果持续较高,说明内存不足。
  • iostat 中的 %util 列显示磁盘利用率,如果接近 100%,说明磁盘是瓶颈。

2.3 使用 sar 进行长期监控

sar 可以收集并报告系统活动信息,用于长期分析。

# 安装 sysstat 并启用 sar
sudo dnf install sysstat -y
sudo systemctl enable sysstat
sudo systemctl start sysstat

# 查看 CPU 使用情况
sar -u

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

# 查看磁盘 I/O
sar -d

3. 高级性能调优

3.1 CPU 调优

3.1.1 调整 CPU 频率策略

AlmaLinux 默认使用 ondemandperformance 调速器。对于服务器,推荐使用 performance 以获得稳定性能。

# 查看当前调速器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

# 安装 cpupower 工具
sudo dnf install cpupower-utils -y

# 设置所有 CPU 为 performance 模式
sudo cpupower frequency-set -g performance

# 永久设置:编辑 /etc/sysconfig/cpupower
echo 'GOVERNOR="performance"' | sudo tee -a /etc/sysconfig/cpupower
sudo systemctl enable cpupower
sudo systemctl start cpupower

3.1.2 调整进程优先级

使用 nicerenice 调整进程优先级。

# 启动一个进程并设置优先级(-20 到 19,值越小优先级越高)
nice -n -10 ./my_app

# 调整已运行进程的优先级
renice -n -10 -p <PID>

3.2 内存调优

3.2.1 调整透明大页(THP)

透明大页可以减少内存管理开销,但可能不适合所有工作负载。对于数据库等应用,建议禁用。

# 查看当前 THP 状态
cat /sys/kernel/mm/transparent_hugepage/enabled

# 临时禁用
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag

# 永久禁用:编辑 /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="transparent_hugepage=never"
sudo grub2-mkconfig -o /boot/grub2/grub.cfg

3.2.2 调整内存分配策略

对于特定应用,可以调整内存分配策略。例如,对于 Java 应用,可以调整 JVM 参数。

# 示例:调整 Java 应用的堆大小
java -Xms4g -Xmx4g -XX:+UseG1GC -jar myapp.jar

3.3 磁盘 I/O 调优

3.3.1 调整 I/O 调度器

I/O 调度器决定磁盘请求的处理顺序。对于 SSD,推荐使用 nonenoop;对于 HDD,推荐使用 deadlinecfq

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

# 临时设置为 deadline(适用于 HDD)
echo deadline | sudo tee /sys/block/sda/queue/scheduler

# 永久设置:创建 udev 规则
echo 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"' | sudo tee /etc/udev/rules.d/60-ioscheduler.rules
sudo udevadm control --reload-rules

3.3.2 调整 I/O 队列深度

对于高并发 I/O,可以增加队列深度。

# 查看当前队列深度
cat /sys/block/sda/queue/nr_requests

# 增加队列深度(例如,增加到 1024)
echo 1024 | sudo tee /sys/block/sda/queue/nr_requests

3.4 网络调优

3.4.1 调整网络缓冲区

网络缓冲区大小影响网络吞吐量和延迟。

# 查看当前缓冲区大小
sysctl net.core.rmem_max
sysctl net.core.wmem_max

# 增加缓冲区大小
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"

3.4.2 调整 TCP 参数

优化 TCP 参数可以提高网络性能,特别是在高延迟或高带宽网络中。

# 启用 TCP 快速打开
sudo sysctl -w net.ipv4.tcp_fastopen=3

# 调整 TCP 拥塞控制算法
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr

# 启用 TCP 时间戳
sudo sysctl -w net.ipv4.tcp_timestamps=1

4. 应用特定优化

4.1 数据库优化(以 MySQL 为例)

4.1.1 调整 MySQL 配置

编辑 /etc/my.cnf/etc/mysql/my.cnf,根据服务器资源调整参数。

[mysqld]
# 内存相关
innodb_buffer_pool_size = 4G  # 根据总内存调整,通常为总内存的 50-70%
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2  # 平衡性能和数据安全
innodb_flush_method = O_DIRECT

# 连接相关
max_connections = 200
thread_cache_size = 50

# 查询缓存(MySQL 8.0 已移除,适用于 5.7)
query_cache_type = 0

4.1.2 使用性能模式监控

启用 MySQL 性能模式(Performance Schema)以监控查询性能。

-- 启用性能模式
SET GLOBAL performance_schema = ON;

-- 查看慢查询
SELECT * FROM mysql.slow_log;

4.2 Web 服务器优化(以 Nginx 为例)

4.2.1 调整 Nginx 配置

编辑 /etc/nginx/nginx.conf,优化工作进程和连接数。

worker_processes auto;  # 自动设置为 CPU 核心数
worker_connections 1024;  # 每个 worker 的最大连接数
worker_rlimit_nofile 65535;  # 文件描述符限制

events {
    use epoll;  # 使用 epoll 事件模型
    worker_connections 1024;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    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;
}

4.2.2 调整内核参数以支持高并发

结合之前提到的网络内核参数,确保系统可以处理大量连接。

# 增加文件描述符限制
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf

# 增加系统级文件描述符限制
echo "fs.file-max = 1000000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

4.3 容器化应用优化(以 Docker 为例)

4.3.1 调整 Docker 守护进程配置

编辑 /etc/docker/daemon.json,优化存储驱动和资源限制。

{
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  },
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65535,
      "Soft": 65535
    }
  }
}

4.3.2 调整容器资源限制

使用 docker run 时指定资源限制,避免容器占用过多资源。

# 限制 CPU 和内存
docker run -d --name myapp \
  --cpus="1.5" \
  --memory="2g" \
  --memory-swap="2g" \
  myimage

5. 监控与自动化调优

5.1 使用 Prometheus 和 Grafana 监控

Prometheus 是一个开源的监控系统,Grafana 用于可视化。

安装 Prometheus 和 Grafana

# 安装 Prometheus
sudo dnf install prometheus -y
sudo systemctl enable prometheus
sudo systemctl start prometheus

# 安装 Grafana
sudo dnf install grafana -y
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

配置 Prometheus 监控 AlmaLinux 主机,使用 Node Exporter 收集系统指标。

# 安装 Node Exporter
sudo dnf install node_exporter -y
sudo systemctl enable node_exporter
sudo systemctl start node_exporter

# 在 Prometheus 配置文件中添加 Node Exporter 目标
# /etc/prometheus/prometheus.yml
scrape_configs:
  - job_name: 'node'
    static_configs:
      - targets: ['localhost:9100']

5.2 自动化调优脚本

编写脚本自动化常见调优任务。

示例:性能调优脚本

#!/bin/bash
# performance_tuning.sh

# 设置内核参数
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p

# 设置文件系统挂载选项
sed -i 's/defaults/defaults,noatime,nodiratime,commit=60/g' /etc/fstab

# 禁用不必要的服务
systemctl disable bluetooth
systemctl disable cups

# 设置 CPU 调速器为 performance
cpupower frequency-set -g performance

# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag

# 设置 I/O 调度器为 deadline(适用于 HDD)
for disk in /sys/block/sd*/queue/scheduler; do
    echo deadline > $disk
done

echo "性能调优完成!"

运行脚本:

chmod +x performance_tuning.sh
sudo ./performance_tuning.sh

6. 总结

AlmaLinux 的性能优化是一个持续的过程,需要根据具体的工作负载和硬件环境进行调整。本文从基础配置到高级调优,涵盖了内核参数、文件系统、资源监控、CPU、内存、磁盘、网络以及应用特定优化。通过系统地应用这些策略,您可以显著提升 AlmaLinux 的性能,确保应用高效稳定运行。

关键要点

  • 基础配置:优化内核参数和文件系统,禁用不必要的服务。
  • 监控诊断:使用工具监控系统状态,识别瓶颈。
  • 高级调优:针对 CPU、内存、磁盘和网络进行精细调整。
  • 应用优化:根据应用类型(如数据库、Web 服务器)进行特定优化。
  • 自动化:使用脚本和监控工具实现自动化调优和持续优化。

记住,优化前务必备份重要数据,并在测试环境中验证调整效果。性能调优没有银弹,需要结合实际场景不断迭代和优化。