在当今的云计算和企业级环境中,AlmaLinux 作为 CentOS 的继任者,以其稳定性和兼容性赢得了广泛青睐。然而,仅仅安装系统是不够的,要充分发挥其潜力,性能优化是必不可少的环节。本文将深入探讨从系统内核调优到应用层加速的全方位策略,帮助您构建高性能的 AlmaLinux 环境。

一、性能优化概述与准备工作

1.1 为什么需要性能优化?

AlmaLinux 默认配置注重稳定性和通用性,但在特定工作负载下(如高并发 Web 服务、数据库、大数据处理等),默认设置可能无法满足性能需求。性能优化旨在:

  • 提高资源利用率:充分利用 CPU、内存、磁盘和网络资源
  • 降低延迟:减少系统调用和上下文切换开销
  • 提升吞吐量:处理更多并发请求
  • 确保稳定性:在优化的同时保持系统可靠

1.2 优化前的准备工作

在开始优化之前,必须做好以下准备:

1.2.1 建立性能基线

使用工具收集系统当前性能数据,作为优化前的基准:

# 安装性能监控工具
sudo dnf install -y sysstat htop iotop

# 收集系统基础信息
cat /proc/cpuinfo | grep "model name" | head -1
free -h
df -h

# 启动 sysstat 收集历史数据
sudo systemctl enable --now sysstat

1.2.2 确定优化目标

明确您的工作负载类型:

  • CPU密集型:编译、科学计算、视频处理
  • 内存密集型:数据库、缓存服务
  • I/O密集型:文件服务器、日志处理
  • 网络密集型:Web 服务器、代理服务

1.2.3 创建系统快照

在进行重大变更前,创建系统快照或备份:

# 使用 rsync 备份关键配置
sudo rsync -av /etc/ /backup/etc/ --exclude="*.tmp"

# 创建 LVM 快照(如果使用 LVM)
sudo lvcreate -L 10G -s -n snap /dev/vg0/root

二、系统内核调优

2.1 内核参数调整

AlmaLinux 使用 Linux 内核,通过 /etc/sysctl.conf/etc/sysctl.d/ 目录下的文件调整内核参数。

2.1.1 网络性能优化

对于高并发网络服务,调整 TCP 栈参数:

# 创建自定义配置文件
sudo tee /etc/sysctl.d/99-network-tuning.conf << 'EOF'
# 增加 TCP 连接队列大小
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535

# 优化 TCP 连接复用
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0  # 在 NAT 环境下可能需要关闭

# 增加端口范围
net.ipv4.ip_local_port_range = 1024 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 BBR 拥塞控制(需要内核支持)
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr

# 减少 TIME_WAIT 状态连接
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15

# 增加文件描述符限制
fs.file-max = 2097152
fs.nr_open = 2097152
EOF

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

参数详解

  • somaxconn:定义了系统中每一个端口最大的 TCP 连接队列长度
  • tcp_tw_reuse:允许将 TIME_WAIT 状态的 socket 重新用于新的 TCP 连接
  • tcp_fin_timeout:控制 FIN_WAIT_2 状态的超时时间
  • BBR:Google 开发的拥塞控制算法,相比传统算法能更好地利用带宽

2.1.2 内存管理优化

针对内存密集型应用,调整内存管理参数:

sudo tee /etc/sysctl.d/99-memory-tuning.conf << 'EOF'
# 调整虚拟内存参数
vm.swappiness = 10  # 减少交换倾向,优先使用物理内存
vm.dirty_ratio = 15  # 系统内存中脏页比例达到15%时,开始同步写回磁盘
vm.dirty_background_ratio = 5  # 后台进程开始写回脏页的比例
vm.dirty_expire_centisecs = 3000  # 脏页过期时间(30秒)
vm.dirty_writeback_centisecs = 500  # 后台写回周期(5秒)

# 调整内存回收策略
vm.vfs_cache_pressure = 50  # 控制内核回收 inode 和 dentry 缓存的倾向
vm.min_free_kbytes = 65536  # 系统保留的最小空闲内存(64MB)

# 调整透明大页(THP)设置
# 对于数据库应用,通常建议禁用 THP
vm.transparent_hugepage = never

# 调整内存过量使用策略
vm.overcommit_memory = 1  # 总是允许过量使用内存
vm.overcommit_ratio = 80  # 过量使用比例
EOF

sudo sysctl -p /etc/sysctl.d/99-memory-tuning.conf

注意:对于数据库应用(如 MySQL、PostgreSQL),通常建议禁用透明大页(THP),因为 THP 可能导致性能波动。

2.1.3 I/O 调度器优化

根据存储类型选择合适的 I/O 调度器:

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

# 对于 SSD,使用 none 或 noop 调度器
echo noop > /sys/block/sda/queue/scheduler

# 对于 HDD,使用 deadline 或 mq-deadline 调度器
echo deadline > /sys/block/sda/queue/scheduler

# 永久化配置(需要安装 tuned)
sudo dnf install -y tuned
sudo tuned-adm profile throughput-performance

2.2 内核模块优化

加载和配置内核模块以提升特定功能的性能。

2.2.1 网络加速模块

# 启用多队列网卡支持(如果硬件支持)
sudo modprobe ixgbe  # Intel 10G 网卡驱动
sudo modprobe i40e   # Intel 40G 网卡驱动

# 配置 RSS(Receive Side Scaling)
echo 8 > /sys/class/net/eth0/queues/rx-0/rps_cpus
echo 32768 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt

# 配置 XPS(Transmit Packet Steering)
echo 8 > /sys/class/net/eth0/queues/tx-0/xps_cpus

2.2.2 文件系统优化

针对不同文件系统进行优化:

ext4 文件系统优化

# 创建文件系统时指定优化参数
sudo mkfs.ext4 -E lazy_itable_init=0,lazy_journal_init=0 -O extent,uninit_bg,dir_index,filetype /dev/sdb1

# 挂载选项优化
sudo mount -o noatime,nodiratime,barrier=0,data=writeback /dev/sdb1 /data

XFS 文件系统优化

# 创建 XFS 文件系统
sudo mkfs.xfs -f -i size=512 -l size=128m,lazy-count=1 /dev/sdb1

# 挂载选项优化
sudo mount -o noatime,nodiratime,allocsize=64m,logbufs=8 /dev/sdb1 /data

Btrfs 文件系统优化

# 创建 Btrfs 文件系统
sudo mkfs.btrfs -f -d single -m single /dev/sdb1

# 挂载选项优化
sudo mount -o noatime,nodiratime,compress=zstd:3,ssd,discard=async /dev/sdb1 /data

2.3 系统资源限制调整

通过 ulimit/etc/security/limits.conf 调整用户资源限制。

# 临时调整当前会话限制
ulimit -n 65535  # 文件描述符
ulimit -u 65535  # 进程数

# 永久调整系统限制
sudo tee /etc/security/limits.d/99-limits.conf << 'EOF'
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
* soft memlock unlimited
* hard memlock unlimited
EOF

# 对于 systemd 服务,还需要在服务文件中设置
sudo systemctl edit nginx.service
# 添加:
# [Service]
# LimitNOFILE=65535
# LimitNPROC=65535

三、系统服务与进程优化

3.1 服务管理优化

使用 systemd 的优化功能管理服务。

3.1.1 服务启动顺序优化

对于依赖关系复杂的服务,优化启动顺序:

# 查看服务依赖关系
systemctl list-dependencies nginx.service

# 创建服务覆盖文件优化启动顺序
sudo mkdir -p /etc/systemd/system/nginx.service.d
sudo tee /etc/systemd/system/nginx.service.d/override.conf << 'EOF'
[Unit]
After=network.target
After=postgresql.service  # 确保数据库先启动

[Service]
# 优化进程优先级
Nice=-10
IOSchedulingClass=realtime
IOSchedulingPriority=0
OOMScoreAdjust=-500
EOF

sudo systemctl daemon-reload
sudo systemctl restart nginx

3.1.2 服务资源限制

为关键服务分配更多资源:

# 为 MySQL 服务设置资源限制
sudo systemctl edit mysql.service
# 添加:
# [Service]
# MemoryLimit=4G
# CPUQuota=80%
# Nice=-5
# IOSchedulingClass=best-effort
# IOSchedulingPriority=7

3.2 进程调度优化

使用 cgroupssystemd 控制进程资源。

3.2.1 使用 systemd-cgtop 监控

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

# 监控 cgroup 资源使用
systemd-cgtop

3.2.2 创建自定义 cgroup

# 创建自定义 cgroup
sudo mkdir -p /sys/fs/cgroup/cpu/myapp
sudo mkdir -p /sys/fs/cgroup/memory/myapp

# 设置 CPU 限制
echo 50000 > /sys/fs/cgroup/cpu/myapp/cpu.cfs_quota_us  # 50% CPU
echo 100000 > /sys/fs/cgroup/cpu/myapp/cpu.cfs_period_us

# 设置内存限制
echo 2G > /sys/fs/cgroup/memory/myapp/memory.limit_in_bytes
echo 1G > /sys/fs/cgroup/memory/myapp/memory.soft_limit_in_bytes

# 将进程加入 cgroup
echo <PID> > /sys/fs/cgroup/cpu/myapp/tasks

3.3 定时任务优化

优化 cron 和 systemd timers 的执行策略。

# 优化 cron 服务
sudo systemctl edit cron.service
# 添加:
# [Service]
# Nice=10  # 降低优先级
# IOSchedulingClass=idle

# 使用 systemd timer 替代 cron(更精确的调度)
sudo tee /etc/systemd/system/mybackup.timer << 'EOF'
[Unit]
Description=Daily backup

[Timer]
OnCalendar=daily
Persistent=true
RandomizedDelaySec=300  # 随机延迟5分钟,避免峰值

[Install]
WantedBy=timers.target
EOF

sudo systemctl enable --now mybackup.timer

四、存储系统优化

4.1 磁盘 I/O 优化

针对不同存储介质优化 I/O 性能。

4.1.1 SSD 优化

# 启用 TRIM 支持(确保 SSD 寿命)
sudo systemctl enable fstrim.timer
sudo systemctl start fstrim.timer

# 调整 SSD 相关参数
sudo tee /etc/udev/rules.d/60-ssd.rules << 'EOF'
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", \
  ATTR{queue/scheduler}="noop", \
  ATTR{queue/read_ahead_kb}="16", \
  ATTR{queue/nr_requests}="128", \
  ATTR{queue/rq_affinity}="2"
EOF

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

4.1.2 RAID 优化

对于硬件 RAID 或软件 RAID:

# 软件 RAID 优化(mdadm)
sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]
sudo mdadm --detail /dev/md0

# 调整 RAID 读写策略
echo 1024 > /sys/block/md0/md/stripe_cache_size
echo 16 > /sys/block/md0/md/raid_disks

# 监控 RAID 状态
cat /proc/mdstat

4.2 文件系统调优

深入调整文件系统参数。

4.2.1 ext4 高级优化

# 调整日志参数
sudo tune2fs -o journal_data_writeback /dev/sdb1

# 调整保留空间
sudo tune2fs -r 0 /dev/sdb1  # 对于数据盘,可以减少保留空间

# 调整 inode 大小
sudo tune2fs -I 256 /dev/sdb1

# 调整文件系统检查参数
sudo tune2fs -c 0 -i 0 /dev/sdb1  # 禁用自动检查

4.2.2 XFS 高级优化

# 调整日志大小
sudo xfs_admin -l /dev/sdb1
sudo xfs_admin -L 128m /dev/sdb1  # 增加日志大小

# 调整分配策略
sudo xfs_io -c "falloc 0 1G" /data/testfile  # 预分配空间

# 调整块大小
sudo mkfs.xfs -b size=4k /dev/sdb1  # 对于小文件,使用4K块

4.3 缓存优化

使用内存缓存提升 I/O 性能。

4.3.1 使用 tmpfs

# 创建 tmpfs 挂载点
sudo mkdir /tmpfs_cache
sudo mount -t tmpfs -o size=2G,nr_inodes=1M,mode=1777 tmpfs /tmpfs_cache

# 永久化配置
echo "tmpfs /tmpfs_cache tmpfs size=2G,nr_inodes=1M,mode=1777 0 0" >> /etc/fstab

4.3.2 使用 bcachefs(如果内核支持)

# 创建 bcachefs 文件系统(需要内核模块)
sudo modprobe bcachefs
sudo mkfs.bcachefs /dev/sdb1

# 挂载并配置缓存层
sudo mount -o noatime /dev/sdb1 /data
echo 1 > /sys/fs/bcachefs/bcache0/sequential_cutoff

五、网络优化

5.1 网络协议栈优化

深入优化 TCP/IP 协议栈。

5.1.1 TCP 优化

# 针对高延迟网络优化
sudo tee /etc/sysctl.d/99-tcp-latency.conf << 'EOF'
# 增加初始拥塞窗口
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_adv_win_scale = 1

# 优化 RTT(往返时间)测量
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_rto_min = 200  # 最小重传超时(ms)
net.ipv4.tcp_rto_max = 120000  # 最大重传超时(ms)

# 优化拥塞控制
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_notsent_lowat = 16384

# 优化快速重传和恢复
net.ipv4.tcp_fack = 1
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_sack = 1
EOF

sudo sysctl -p /etc/sysctl.d/99-tcp-latency.conf

5.1.2 UDP 优化

# UDP 优化参数
sudo tee /etc/sysctl.d/99-udp.conf << 'EOF'
# 增加 UDP 缓冲区
net.core.rmem_default = 262144
net.core.rmem_max = 2097152
net.core.wmem_default = 262144
net.core.wmem_max = 2097152

# 优化 UDP 接收队列
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192

# 优化 UDP 广播
net.ipv4.udp_broadcast = 1
EOF

sudo sysctl -p /etc/sysctl.d/99-udp.conf

5.2 网络接口优化

优化网络接口卡(NIC)设置。

5.2.1 多队列网卡优化

# 查看网卡队列
ethtool -l eth0

# 启用多队列(如果支持)
sudo ethtool -L eth0 combined 8

# 配置 RSS(Receive Side Scaling)
sudo ethtool -K eth0 rxhash on

# 配置 XPS(Transmit Packet Steering)
echo 8 > /sys/class/net/eth0/queues/tx-0/xps_cpus

# 配置 RPS(Receive Packet Steering)
echo 8 > /sys/class/net/eth0/queues/rx-0/rps_cpus
echo 32768 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt

5.2.2 网卡驱动参数调整

# Intel 网卡优化
sudo ethtool -C eth0 rx-usecs 100 tx-usecs 100
sudo ethtool -G eth0 rx 4096 tx 4096

# Mellanox 网卡优化
sudo ethtool -C eth0 adaptive-rx off adaptive-tx off
sudo ethtool -C eth0 rx-usecs 100 tx-usecs 100
sudo ethtool -G eth0 rx 8192 tx 8192

5.3 网络服务优化

优化网络服务配置。

5.3.1 Nginx 优化

# /etc/nginx/nginx.conf 优化配置
worker_processes auto;
worker_rlimit_nofile 65535;
worker_connections 65535;

events {
    use epoll;
    multi_accept on;
    worker_connections 65535;
}

http {
    # 连接优化
    keepalive_timeout 65;
    keepalive_requests 10000;
    
    # 缓冲区优化
    client_body_buffer_size 128k;
    client_max_body_size 10m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 8k;
    
    # 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;
    
    # 缓存优化
    open_file_cache max=10000 inactive=30s;
    open_file_cache_valid 60s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
    
    # 超时优化
    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    send_timeout 60s;
}

5.3.2 Apache 优化

# /etc/httpd/conf/httpd.conf 优化配置
ServerLimit 100
MaxRequestWorkers 1000
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxConnectionsPerChild 0

# 连接优化
KeepAlive On
KeepAliveTimeout 5
MaxKeepAliveRequests 100

# 模块优化
LoadModule mpm_event_module modules/mod_mpm_event.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule expires_module modules/mod_expires.so

# 缓存优化
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 1 year"
    ExpiresByType application/javascript "access plus 1 year"
    ExpiresByType image/* "access plus 1 year"
</IfModule>

六、应用层优化

6.1 数据库优化

以 MySQL 和 PostgreSQL 为例。

6.1.1 MySQL 优化

# /etc/my.cnf.d/server.cnf 优化配置
[mysqld]
# 内存优化
innodb_buffer_pool_size = 4G  # 通常设置为总内存的 50-70%
innodb_buffer_pool_instances = 8
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M

# I/O 优化
innodb_flush_method = O_DIRECT
innodb_flush_log_at_trx_commit = 2  # 平衡性能和数据安全
innodb_file_per_table = ON
innodb_io_capacity = 2000  # SSD 需要更高值

# 连接优化
max_connections = 500
thread_cache_size = 50
table_open_cache = 2000

# 查询缓存(MySQL 8.0+ 已移除)
# query_cache_type = 0  # 建议禁用

# 日志优化
slow_query_log = ON
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

# 其他优化
innodb_read_io_threads = 8
innodb_write_io_threads = 8
innodb_thread_concurrency = 0

6.1.2 PostgreSQL 优化

# /var/lib/pgsql/data/postgresql.conf 优化配置
# 内存优化
shared_buffers = 4GB  # 通常设置为总内存的 25%
work_mem = 64MB  # 每个查询的排序内存
maintenance_work_mem = 1GB  # 维护操作内存
effective_cache_size = 12GB  # 优化器假设的缓存大小

# I/O 优化
wal_level = minimal
fsync = off  # 性能优先,数据安全次之
synchronous_commit = off
full_page_writes = off
wal_buffers = 16MB
checkpoint_completion_target = 0.9
max_wal_size = 4GB
min_wal_size = 1GB

# 连接优化
max_connections = 200
shared_preload_libraries = 'pg_stat_statements'

# 查询优化
random_page_cost = 1.1  # SSD 优化
effective_io_concurrency = 200  # SSD 优化

6.2 Web 应用优化

6.2.1 PHP-FPM 优化

# /etc/php-fpm.d/www.conf 优化配置
[www]
; 进程管理
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500

; 资源限制
php_admin_value[memory_limit] = 256M
php_admin_value[max_execution_time] = 60
php_admin_value[post_max_size] = 10M
php_admin_value[upload_max_filesize] = 10M

; 进程优先级
process.priority = -10

6.2.2 Node.js 应用优化

// cluster.js - 使用集群模式
const cluster = require('cluster');
const os = require('os');

if (cluster.isMaster) {
  const numCPUs = os.cpus().length;
  console.log(`Master ${process.pid} is running`);
  
  // Fork workers
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
  
  cluster.on('exit', (worker, code, signal) => {
    console.log(`worker ${worker.process.pid} died`);
    cluster.fork(); // 自动重启
  });
} else {
  // Worker 进程
  const express = require('express');
  const app = express();
  
  // 优化配置
  app.set('x-powered-by', false); // 隐藏服务器信息
  app.disable('etag'); // 禁用 ETag 减少计算
  
  // 路由处理
  app.get('/', (req, res) => {
    res.send('Hello World');
  });
  
  app.listen(3000, () => {
    console.log(`Worker ${process.pid} started`);
  });
}

6.3 缓存策略优化

6.3.1 Redis 优化

# /etc/redis.conf 优化配置
# 内存优化
maxmemory 4gb
maxmemory-policy allkeys-lru  # LRU 淘汰策略
maxmemory-samples 5

# 持久化优化
save 900 1
save 300 10
save 60 10000
appendonly yes
appendfsync everysec  # 平衡性能和数据安全

# 网络优化
tcp-keepalive 300
timeout 0
tcp-backlog 511

# 性能优化
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64

6.3.2 Memcached 优化

# /etc/sysconfig/memcached 优化配置
PORT="11211"
USER="memcached"
MAXCONN="4096"
CACHESIZE="4096"  # MB
OPTIONS="-t 8 -R 5 -B auto -m 4096 -c 4096 -I 1m"

七、监控与调优工具

7.1 系统监控工具

7.1.1 性能监控套件

# 安装综合监控工具
sudo dnf install -y sysstat htop iotop iftop nmon

# 配置 sysstat 收集详细数据
sudo tee /etc/sysconfig/sysstat << 'EOF'
# 收集间隔(秒)
INTERVAL=10
# 保留天数
HISTORY=7
EOF

# 启动 sysstat
sudo systemctl enable --now sysstat

7.1.2 实时监控脚本

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

while true; do
    clear
    echo "=== 系统性能监控 ==="
    echo "时间: $(date '+%Y-%m-%d %H:%M:%S')"
    echo ""
    
    # CPU 使用率
    echo "CPU 使用率:"
    mpstat 1 1 | tail -n 1 | awk '{print "  用户态: " $3 "%, 系统态: " $5 "%, 空闲: " $12 "%"}'
    
    # 内存使用
    echo -e "\n内存使用:"
    free -h | grep -E "Mem|Swap" | awk '{print "  " $1 ": " $2 " (已用: " $3 ", 可用: " $7 ")"}'
    
    # 磁盘 I/O
    echo -e "\n磁盘 I/O:"
    iostat -x 1 1 | tail -n +4 | head -n 1 | awk '{print "  设备: " $1 ", 读: " $4 " KB/s, 写: " $5 " KB/s, 利用率: " $14 "%"}'
    
    # 网络流量
    echo -e "\n网络流量:"
    ifstat -i eth0 1 1 | tail -n 1 | awk '{print "  接收: " $1 " KB/s, 发送: " $2 " KB/s"}'
    
    # 进程列表(按 CPU 排序)
    echo -e "\nTop 5 CPU 进程:"
    ps aux --sort=-%cpu | head -n 6 | tail -n 5 | awk '{printf "  %-10s %5.1f%% %s\n", $2, $3, $11}'
    
    sleep 5
done

7.2 专业调优工具

7.2.1 tuned 调优框架

# 安装和配置 tuned
sudo dnf install -y tuned
sudo systemctl enable --now tuned

# 查看可用配置文件
tuned-adm list

# 应用性能优化配置
sudo tuned-adm profile throughput-performance

# 创建自定义配置文件
sudo mkdir -p /etc/tuned/profiles/myprofile
sudo tee /etc/tuned/profiles/myprofile/tuned.conf << 'EOF'
[main]
summary=My custom performance profile

[cpu]
governor=performance
min_perf_pct=100

[vm]
swappiness=10
dirty_ratio=15
dirty_background_ratio=5

[sysctl]
net.core.somaxconn=65535
net.ipv4.tcp_max_syn_backlog=65535
EOF

sudo tuned-adm profile myprofile

7.2.2 perf 性能分析工具

# 安装 perf
sudo dnf install -y perf

# 分析 CPU 性能
sudo perf record -g -p <PID> -- sleep 10
sudo perf report

# 分析系统调用
sudo perf trace -p <PID> -- sleep 10

# 分析内存访问
sudo perf stat -e cache-misses,cache-references,instructions,cycles -p <PID>

# 生成火焰图(需要安装 FlameGraph)
git clone https://github.com/brendangregg/FlameGraph
sudo perf script | ./FlameGraph/stackcollapse-perf.pl | ./FlameGraph/flamegraph.pl > perf.svg

7.2.3 bcc 工具集

# 安装 bcc 工具
sudo dnf install -y bcc-tools

# 使用 bcc 工具分析
# 查看系统调用延迟
sudo /usr/share/bcc/tools/funclatency do_sys_open

# 查看磁盘 I/O
sudo /usr/share/bcc/tools/biosnoop

# 查看 TCP 连接
sudo /usr/share/bcc/tools/tcplife

# 查看进程内存使用
sudo /usr/share/bcc/tools/memleak -p <PID> 10

7.3 自动化调优脚本

7.3.1 性能诊断脚本

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

LOG_FILE="/var/log/perf-diagnose-$(date +%Y%m%d).log"

echo "=== AlmaLinux 性能诊断报告 ===" > $LOG_FILE
echo "生成时间: $(date)" >> $LOG_FILE
echo "" >> $LOG_FILE

# 系统信息
echo "=== 系统信息 ===" >> $LOG_FILE
echo "内核版本: $(uname -r)" >> $LOG_FILE
echo "CPU 信息: $(grep "model name" /proc/cpuinfo | head -1 | cut -d: -f2)" >> $LOG_FILE
echo "内存总量: $(free -h | grep Mem | awk '{print $2}')" >> $LOG_FILE
echo "磁盘空间:" >> $LOG_FILE
df -h | grep -v tmpfs | grep -v devtmpfs >> $LOG_FILE
echo "" >> $LOG_FILE

# 性能瓶颈检测
echo "=== 性能瓶颈检测 ===" >> $LOG_FILE

# CPU 瓶颈
echo "CPU 使用率 (最近5分钟):" >> $LOG_FILE
sar -u 1 5 | tail -n 1 >> $LOG_FILE

# 内存瓶颈
echo "内存使用情况:" >> $LOG_FILE
free -h >> $LOG_FILE
echo "交换分区使用:" >> $LOG_FILE
swapon --show >> $LOG_FILE

# I/O 瓶颈
echo "磁盘 I/O (最近5分钟):" >> $LOG_FILE
iostat -x 1 5 | tail -n 1 >> $LOG_FILE

# 网络瓶颈
echo "网络连接统计:" >> $LOG_FILE
ss -s >> $LOG_FILE
echo "活跃连接数:" >> $LOG_FILE
ss -tan | grep ESTAB | wc -l >> $LOG_FILE

# 进程分析
echo "Top 10 CPU 进程:" >> $LOG_FILE
ps aux --sort=-%cpu | head -n 11 >> $LOG_FILE
echo "" >> $LOG_FILE
echo "Top 10 内存进程:" >> $LOG_FILE
ps aux --sort=-%mem | head -n 11 >> $LOG_FILE

# 建议
echo "" >> $LOG_FILE
echo "=== 优化建议 ===" >> $LOG_FILE

# 根据检测结果给出建议
CPU_USAGE=$(sar -u 1 1 | tail -n 1 | awk '{print $100 - $NF}')
if [ $(echo "$CPU_USAGE > 80" | bc) -eq 1 ]; then
    echo "CPU 使用率较高,建议:" >> $LOG_FILE
    echo "  1. 检查是否有异常进程" >> $LOG_FILE
    echo "  2. 考虑增加 CPU 核心数" >> $LOG_FILE
    echo "  3. 优化应用程序代码" >> $LOG_FILE
fi

MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
if [ $(echo "$MEM_USAGE > 80" | bc) -eq 1 ]; then
    echo "内存使用率较高,建议:" >> $LOG_FILE
    echo "  1. 增加物理内存" >> $LOG_FILE
    echo "  2. 优化应用程序内存使用" >> $LOG_FILE
    echo "  3. 调整 swappiness 参数" >> $LOG_FILE
fi

echo "详细报告已保存到: $LOG_FILE"

八、优化效果验证与持续监控

8.1 性能测试方法

8.1.1 基准测试工具

# CPU 基准测试
sudo dnf install -y stress-ng
stress-ng --cpu 4 --cpu-method matrixprod --timeout 60s --metrics-brief

# 内存基准测试
stress-ng --vm 2 --vm-bytes 1G --timeout 60s --metrics-brief

# 磁盘 I/O 基准测试
sudo dnf install -y fio
fio --name=randread --ioengine=libaio --iodepth=64 --rw=randread --bs=4k --size=1G --numjobs=8 --runtime=60 --group_reporting

# 网络基准测试
sudo dnf install -y iperf3
# 服务端
iperf3 -s
# 客户端
iperf3 -c <server_ip> -t 60 -P 8

8.1.2 应用层基准测试

# Web 服务器基准测试
sudo dnf install -y ab
ab -n 10000 -c 100 http://localhost/

# 数据库基准测试
# MySQL
mysqlslap --auto-generate-sql --concurrency=50 --iterations=10 --number-of-queries=1000

# PostgreSQL
pgbench -i -s 10  # 初始化
pgbench -c 50 -j 4 -T 60  # 测试

8.2 优化效果对比

创建对比表格记录优化前后的性能指标:

指标 优化前 优化后 提升幅度
CPU 使用率 85% 65% 23.5%
内存使用率 90% 70% 22.2%
磁盘 I/O 延迟 15ms 5ms 66.7%
网络吞吐量 500Mbps 950Mbps 90%
Web 请求延迟 120ms 45ms 62.5%
数据库查询时间 50ms 15ms 70%

8.3 持续监控策略

8.3.1 监控系统部署

# 安装 Prometheus + Grafana
sudo dnf install -y prometheus grafana

# 配置 Prometheus 监控节点
sudo tee /etc/prometheus/prometheus.yml << 'EOF'
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'alma-linux'
    static_configs:
      - targets: ['localhost:9100']  # node_exporter
      - targets: ['localhost:9180']  # mysqld_exporter
      - targets: ['localhost:9187']  # postgres_exporter
EOF

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

8.3.2 告警规则配置

# /etc/prometheus/alerts.yml
groups:
  - name: system-alerts
    rules:
      - alert: HighCPUUsage
        expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High CPU usage on {{ $labels.instance }}"
          description: "CPU usage is above 80% for 5 minutes"
      
      - alert: HighMemoryUsage
        expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High memory usage on {{ $labels.instance }}"
          description: "Memory usage is above 85% for 5 minutes"
      
      - alert: HighDiskIO
        expr: rate(node_disk_io_time_seconds_total[5m]) * 100 > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High disk I/O on {{ $labels.instance }}"
          description: "Disk I/O utilization is above 80% for 5 minutes"

九、最佳实践与注意事项

9.1 优化原则

  1. 循序渐进:每次只调整一个参数,观察效果后再继续
  2. 备份配置:修改前备份原始配置
  3. 测试验证:在测试环境验证后再应用到生产环境
  4. 监控先行:优化前建立性能基线,优化后对比效果
  5. 文档记录:记录所有优化决策和效果

9.2 常见陷阱

  1. 过度优化:不要为了优化而优化,确保优化带来实际收益
  2. 忽略硬件限制:软件优化无法突破硬件瓶颈
  3. 忽视安全:某些优化可能降低系统安全性(如禁用防火墙)
  4. 不考虑兼容性:确保优化不影响现有应用兼容性
  5. 缺乏监控:优化后不监控,无法及时发现问题

9.3 持续优化策略

  1. 定期审查:每季度审查一次系统性能
  2. 技术更新:关注 AlmaLinux 和相关软件的更新,及时应用性能改进
  3. 负载变化适应:随着业务增长,重新评估和调整优化策略
  4. 知识共享:建立团队知识库,记录优化经验

十、总结

AlmaLinux 性能优化是一个系统工程,需要从内核到应用层的全方位考虑。通过本文介绍的策略,您可以:

  1. 系统内核调优:调整网络、内存、I/O 等核心参数
  2. 服务与进程优化:优化 systemd 服务和进程调度
  3. 存储优化:针对不同存储介质和文件系统进行调优
  4. 网络优化:优化协议栈和网络接口
  5. 应用层优化:针对数据库、Web 应用等进行专项优化
  6. 监控与调优:使用专业工具持续监控和优化

记住,性能优化是一个持续的过程,需要根据实际负载和业务需求不断调整。建议建立完整的监控体系,定期评估优化效果,确保系统始终保持在最佳性能状态。

通过本文的指导,您应该能够系统地优化 AlmaLinux 系统,显著提升系统性能,满足各种业务场景的需求。在实际操作中,请务必先在测试环境验证,再逐步应用到生产环境,确保系统稳定性和数据安全。