引言

AlmaLinux作为CentOS的替代者,继承了RHEL的稳定性和企业级特性,广泛应用于服务器环境。性能优化是系统管理员和开发者的核心技能之一,涉及从底层内核参数到上层应用配置的全方位调整。本文将提供一份全面的实战指南,涵盖系统内核调优、资源管理、应用层加速等关键领域,并通过具体示例和代码演示如何实施优化。

1. 系统监控与基准测试

在进行任何优化之前,必须建立性能基准。没有测量,就无法优化。

1.1 常用监控工具

  • top/htop:实时查看进程和系统资源使用情况。
  • vmstat:报告虚拟内存统计信息。
  • iostat:监控磁盘I/O统计。
  • netstat/ss:网络连接和套接字统计。
  • sar:系统活动报告工具(需安装sysstat包)。

示例:安装并使用sysstat

# 安装sysstat
sudo dnf install -y sysstat

# 启用sar服务
sudo systemctl enable --now sysstat

# 查看CPU使用率(每10秒采样一次,共3次)
sar -u 10 3

# 查看磁盘I/O(每5秒采样一次,共5次)
sar -d 5 5

1.2 基准测试工具

  • fio:灵活的I/O测试工具,可模拟各种I/O模式。
  • sysbench:综合性能测试工具,支持CPU、内存、数据库等测试。
  • iperf3:网络带宽测试。

示例:使用sysbench进行CPU基准测试

# 安装sysbench
sudo dnf install -y sysbench

# CPU基准测试(计算素数到20000)
sysbench cpu --cpu-max-prime=20000 run

# 内存基准测试(分配1GB内存,顺序读写)
sysbench memory --memory-block-size=1M --memory-total-size=1G run

2. 内核参数调优

内核参数直接影响系统性能,尤其是高并发、高负载场景。

2.1 调整虚拟内存参数

关键参数:

  • vm.swappiness:控制内核使用交换空间的倾向(0-100,默认60)。
  • vm.vfs_cache_pressure:控制内核回收目录项和inode缓存的倾向(默认100)。
  • vm.dirty_ratiovm.dirty_background_ratio:控制脏页写入磁盘的阈值。

示例:临时调整(重启后失效)

# 降低swappiness,减少交换使用(适合内存充足的服务器)
echo 10 > /proc/sys/vm/swappiness

# 增加vfs_cache_pressure,加快目录缓存回收(适合文件密集型应用)
echo 50 > /proc/sys/vm/vfs_cache_pressure

# 调整脏页参数,减少I/O突发
echo 10 > /proc/sys/vm/dirty_background_ratio
echo 20 > /proc/sys/vm/dirty_ratio

永久生效: 创建 /etc/sysctl.d/99-performance.conf 文件:

# 编辑文件
sudo nano /etc/sysctl.d/99-performance.conf

# 添加以下内容
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_background_ratio = 10
vm.dirty_ratio = 20

# 应用配置
sudo sysctl -p /etc/sysctl.d/99-performance.conf

2.2 网络参数调优

关键参数:

  • net.core.somaxconn:TCP连接队列大小(默认128)。
  • net.ipv4.tcp_max_syn_backlog:SYN队列大小(默认128)。
  • net.ipv4.tcp_tw_reuse:允许TIME_WAIT套接字重用(默认0)。
  • net.ipv4.tcp_fin_timeout:FIN超时时间(默认60秒)。

示例:高并发Web服务器优化

# 临时调整
echo 4096 > /proc/sys/net/core/somaxconn
echo 4096 > /proc/sys/net/ipv4/tcp_max_syn_backlog
echo 1 > /proc/sys/net/ipv4/tcp_tw_reuse
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout

# 永久配置(/etc/sysctl.d/99-network.conf)
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
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 = 10

2.3 文件系统参数调优

ext4文件系统优化:

  • noatime:禁止记录文件访问时间,减少写操作。
  • barrier=0:禁用写屏障(需确保UPS支持)。
  • data=writeback:写回模式(默认是ordered)。

示例:修改/etc/fstab

# 查看当前挂载选项
mount | grep ext4

# 编辑/etc/fstab,添加noatime选项
UUID=xxxx-xxxx-xxxx / ext4 defaults,noatime 0 1

# 重新挂载(无需重启)
sudo mount -o remount /

3. 资源管理与隔离

3.1 CPU资源管理(cgroups)

使用systemd-cgtop监控cgroup资源使用:

# 安装systemd-cgtop
sudo dnf install -y systemd-cgtop

# 运行监控
systemd-cgtop

示例:为特定服务限制CPU使用

# 创建服务文件(例如nginx)
sudo nano /etc/systemd/system/nginx.service.d/limits.conf

# 添加以下内容
[Service]
CPUQuota=50%  # 限制使用50%的CPU核心
MemoryLimit=2G  # 限制内存使用2GB

3.2 内存管理

使用zram作为交换空间(适合内存充足的服务器):

# 安装zram-generator
sudo dnf install -y zram-generator

# 配置zram(/etc/systemd/zram-generator.conf)
[zram0]
zram-size = min(ram * 0.5, 4096)  # 使用50%内存或4GB,取较小值
compression-algorithm = zstd

# 启用并启动
sudo systemctl enable --now zram-generator.service

使用透明大页(THP):

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

# 临时禁用(某些数据库场景需要禁用)
echo never > /sys/kernel/mm/transparent_hugepage/enabled

# 永久禁用(/etc/rc.local或systemd服务)
# 创建systemd服务
sudo nano /etc/systemd/system/disable-thp.service

# 内容如下
[Unit]
Description=Disable Transparent Huge Pages
After=local-fs.target

[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

# 启用服务
sudo systemctl enable --now disable-thp.service

4. 应用层加速

4.1 Web服务器优化(Nginx)

Nginx配置优化示例:

# /etc/nginx/nginx.conf
worker_processes auto;  # 自动设置为CPU核心数
worker_rlimit_nofile 65535;  # 每个worker进程的最大文件描述符

events {
    worker_connections 4096;  # 每个worker的最大连接数
    use epoll;  # 使用epoll事件模型(Linux)
    multi_accept on;  # 一次接受多个连接
}

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
        text/xml
        text/javascript
        application/javascript
        application/xml+rss
        application/json;
    
    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # 启用HTTP/2
    listen 443 ssl http2;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
}

4.2 数据库优化(MySQL/MariaDB)

MySQL配置优化示例(my.cnf):

[mysqld]
# 内存相关
innodb_buffer_pool_size = 70% of total RAM  # 例如16GB内存设置为11G
innodb_log_file_size = 2G
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2  # 平衡性能和数据安全

# 连接相关
max_connections = 200
thread_cache_size = 50
table_open_cache = 2000

# 查询缓存(MySQL 8.0已移除,适用于5.7及以下)
query_cache_type = 1
query_cache_size = 64M

# InnoDB优化
innodb_flush_method = O_DIRECT  # 避免双缓冲
innodb_file_per_table = ON
innodb_io_capacity = 2000  # SSD设置更高值

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

4.3 应用服务器优化(Java)

JVM参数优化示例:

# Tomcat启动脚本(catalina.sh)
export JAVA_OPTS="
-Xms4G -Xmx4G  # 堆内存初始和最大值
-XX:+UseG1GC  # 使用G1垃圾回收器
-XX:MaxGCPauseMillis=200  # 目标最大GC暂停时间
-XX:+UnlockExperimentalVMOptions
-XX:+UseCGroupMemoryLimitForHeap  # 使用cgroup内存限制
-XX:+AlwaysPreTouch  # 预触碰内存页
-XX:MaxMetaspaceSize=512M  # 元空间大小
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/tomcat/heapdump.hprof
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:/var/log/tomcat/gc.log
"

5. 存储性能优化

5.1 磁盘I/O调度器

查看和修改I/O调度器:

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

# 临时修改(SSD推荐none或noop,HDD推荐deadline或mq-deadline)
echo noop > /sys/block/sda/queue/scheduler

# 永久修改(创建udev规则)
sudo nano /etc/udev/rules.d/60-scheduler.rules

# 添加以下内容
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="noop"

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

5.2 RAID配置优化

mdadm RAID优化示例:

# 创建RAID 10(4块磁盘)
sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde

# 优化RAID参数(/etc/mdadm.conf)
ARRAY /dev/md0 metadata=1.2 name=server:0 UUID=xxxx:xxxx:xxxx:xxxx
# 添加以下优化参数
options /dev/md0 chunk-size=512  # 块大小(适合大文件)
options /dev/md0 min-sync-rate=1000  # 最小同步速率(MB/s)
options /dev/md0 sync-min=1000  # 最小同步速率(MB/s)
options /dev/md0 sync-max=2000  # 最大同步速率(MB/s)

6. 网络性能优化

6.1 网络接口优化

ethtool优化示例:

# 查看网卡信息
ethtool eth0

# 优化网卡参数(临时)
sudo ethtool -G eth0 rx 4096 tx 4096  # 设置环形缓冲区大小
sudo ethtool -C eth0 rx-usecs 100 tx-usecs 100  # 设置中断合并
sudo ethtool -K eth0 tso on gso on gro on  # 启用卸载功能

# 永久配置(创建systemd服务)
sudo nano /etc/systemd/system/ethtool-optimization.service

# 内容如下
[Unit]
Description=Network Interface Optimization
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -G eth0 rx 4096 tx 4096
ExecStart=/usr/sbin/ethtool -C eth0 rx-usecs 100 tx-usecs 100
ExecStart=/usr/sbin/ethtool -K eth0 tso on gso on gro on
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

# 启用服务
sudo systemctl enable --now ethtool-optimization.service

6.2 TCP拥塞控制算法

查看和修改TCP拥塞控制算法:

# 查看可用算法
cat /proc/sys/net/ipv4/tcp_available_congestion_control

# 查看当前算法
cat /proc/sys/net/ipv4/tcp_congestion_control

# 临时修改(BBR适合高带宽延迟积网络)
echo bbr > /proc/sys/net/ipv4/tcp_congestion_control

# 永久修改(/etc/sysctl.d/99-tcp.conf)
net.ipv4.tcp_congestion_control = bbr

7. 安全与性能平衡

7.1 SELinux优化

调整SELinux策略(避免过度限制):

# 查看SELinux状态
sestatus

# 临时设置为permissive模式(仅记录不阻止)
sudo setenforce 0

# 永久修改(/etc/selinux/config)
SELINUX=permissive

# 创建自定义策略模块(针对特定应用)
sudo ausearch -m avc -ts recent | audit2allow -M myapp
sudo semodule -i myapp.pp

7.2 防火墙优化

firewalld优化示例:

# 查看当前规则
sudo firewall-cmd --list-all

# 优化规则(减少不必要的规则)
sudo firewall-cmd --permanent --remove-service=ssh  # 如果不需要SSH
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --reload

# 优化连接跟踪(conntrack)
sudo sysctl -w net.netfilter.nf_conntrack_max=1000000
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7200

8. 监控与自动化

8.1 Prometheus + Grafana监控

安装Prometheus和Grafana:

# 安装Prometheus
sudo dnf install -y prometheus

# 配置Prometheus(/etc/prometheus/prometheus.yml)
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'alma-linux'
    static_configs:
      - targets: ['localhost:9100']  # node_exporter

# 安装node_exporter
sudo dnf install -y node_exporter
sudo systemctl enable --now node_exporter

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

# 访问Grafana(默认admin/admin)
# 导入AlmaLinux监控仪表板(ID:1860)

8.2 自动化优化脚本

示例:性能优化脚本

#!/bin/bash
# /usr/local/bin/performance-optimization.sh

set -e

echo "开始AlmaLinux性能优化..."

# 1. 内核参数优化
echo "优化内核参数..."
cat > /etc/sysctl.d/99-performance.conf << EOF
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_background_ratio = 10
vm.dirty_ratio = 20
net.core.somaxconn = 4096
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_congestion_control = bbr
EOF
sysctl -p /etc/sysctl.d/99-performance.conf

# 2. 文件系统优化
echo "优化文件系统..."
if grep -q "noatime" /etc/fstab; then
    echo "noatime already configured"
else
    # 备份fstab
    cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d)
    # 添加noatime到根分区
    sed -i '/UUID.*\/ ext4/s/defaults/defaults,noatime/' /etc/fstab
    mount -o remount /
fi

# 3. 安装监控工具
echo "安装监控工具..."
dnf install -y sysstat node_exporter

# 4. 启用服务
echo "启用监控服务..."
systemctl enable --now sysstat
systemctl enable --now node_exporter

# 5. 优化I/O调度器
echo "优化I/O调度器..."
for disk in /sys/block/sd*/queue/scheduler; do
    echo noop > $disk
done

echo "优化完成!请重启系统使所有更改生效。"

9. 总结

AlmaLinux性能优化是一个持续的过程,需要根据具体工作负载和硬件环境进行调整。本文提供的指南涵盖了从内核调优到应用层加速的各个方面,但请记住:

  1. 测试先行:在生产环境应用任何优化前,务必在测试环境中验证。
  2. 监控持续:建立完善的监控体系,持续跟踪性能变化。
  3. 文档记录:记录所有优化配置和变更,便于回滚和审计。
  4. 安全平衡:性能优化不应牺牲系统安全性。

通过系统性的方法和工具,您可以显著提升AlmaLinux系统的性能,满足各种企业级应用的需求。