引言:为什么需要优化AlmaLinux性能?
AlmaLinux作为CentOS的完美替代品,继承了企业级Linux的稳定性和安全性,但在默认配置下,它往往无法充分发挥硬件的全部潜力。无论是运行高并发Web服务、数据库集群,还是处理大数据分析任务,系统性能的微小提升都可能带来显著的业务价值。
本文将深入探讨AlmaLinux性能优化的完整路径,从底层内核参数调整到上层资源分配策略,提供可落地的实战指南。我们将重点关注以下核心领域:
- 内核参数调优:通过调整sysctl参数优化网络、内存和I/O性能
- CPU资源管理:利用cgroups和调度器策略实现精细化控制
- 内存优化:调整交换策略和透明大页配置
- I/O性能提升:优化存储栈和文件系统参数
- 网络栈调优:提升网络吞吐量和降低延迟
- 监控与持续优化:建立性能基线并实施动态调整
所有示例均基于AlmaLinux 9.x版本,并提供完整的代码实现和验证方法。
一、内核参数调整:sysctl.conf深度优化
1.1 网络性能优化参数
网络性能是大多数服务器的核心指标。通过调整TCP/IP栈参数,可以显著提升高并发场景下的连接处理能力。
# 编辑sysctl配置文件
sudo vi /etc/sysctl.conf
# 在文件末尾添加以下优化参数
# 网络核心优化
net.core.somaxconn = 65535 # 最大连接队列长度
net.core.netdev_max_backlog = 5000 # 网卡接收队列长度
net.core.rmem_default = 262144 # 默认接收缓冲区
net.core.rmem_max = 16777216 # 最大接收缓冲区
net.core.wmem_default = 262144 # 默认发送缓冲区
net.core.wmem_max = 16777216 # 最大发送缓冲区
# TCP协议优化
net.ipv4.tcp_syncookies = 1 # 防御SYN洪水攻击
net.ipv4.tcp_max_syn_backlog = 8192 # SYN队列长度
net.ipv4.tcp_synack_retries = 2 # SYN+ACK重试次数
net.ipv4.tcp_keepalive_time = 600 # Keepalive时间间隔
net.ipv4.tcp_keepalive_intvl = 30 # Keepalive探测间隔
net.ipv4.tcp_keepalive_probes = 10 # Keepalive探测次数
net.ipv4.tcp_fin_timeout = 30 # FIN超时时间
net.ipv4.tcp_tw_reuse = 1 # TIME_WAIT socket重用
net.ipv4.tcp_max_tw_buckets = 2000000 # 最大TIME_WAIT数量
# 端口范围优化
net.ipv4.ip_local_port_range = 1024 65535 # 本地端口范围
# 内存压力优化
vm.swappiness = 10 # 减少交换倾向
vm.dirty_ratio = 15 # 系统脏页比例
vm.dirty_background_ratio = 5 # 后台刷脏页比例
vm.dirty_expire_centisecs = 3000 # 脏页过期时间(100ms单位)
vm.vfs_cache_pressure = 100 # 目录项和inode缓存压力
参数详解与验证:
net.core.somaxconn:当服务器处理大量并发连接时,如果该值过小,会导致连接被丢弃。通过ss -lnt命令可以查看当前监听队列的使用情况。tcp_tw_reuse:允许重用TIME_WAIT状态的socket,对于高并发短连接场景非常有效,但需要确保内核版本支持。
应用配置并验证:
# 应用配置
sudo sysctl -p
# 验证网络参数
ss -lnt | grep LISTEN
# 查看当前连接状态
ss -s
# 查看丢包统计
netstat -s | grep -i listen
1.2 内存与I/O参数优化
对于数据库和文件服务器,内存和I/O参数的调整至关重要。
# 在/etc/sysctl.conf中添加
# 内存管理优化
vm.overcommit_memory = 2 # 严格内存分配策略
vm.overcommit_ratio = 80 # 可分配内存比例
vm.min_free_kbytes = 65536 # 系统保留最小空闲内存
vm.zone_reclaim_mode = 0 # 禁用NUMA区域回收
# I/O调度器优化(针对SSD)
# 注意:此参数需要在/etc/udev/rules.d/中配置
# 或者通过grubby命令修改内核启动参数
# 文件系统缓存优化
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.dirty_writeback_centisecs = 500 # 回写周期(100ms单位)
# 大页内存优化(针对数据库)
vm.nr_hugepages = 1024 # 配置大页数量
vm.hugetlb_shm_group = 0 # 允许使用大页的组ID
验证与监控:
# 查看当前大页配置
grep Huge /proc/meminfo
# 查看当前脏页统计
cat /proc/vmstat | grep dirty
# 监控内存使用情况
vmstat 1 5
二、CPU资源管理与调度优化
2.1 使用cgroups进行资源隔离
cgroups v2是现代Linux资源管理的核心,AlmaLinux 9默认支持cgroups v2。
# 创建cgroup目录结构
sudo mkdir -p /sys/fs/cgroup/system.slice/high-priority.service
# 配置CPU资源限制
# 创建cgroup配置文件
sudo tee /etc/systemd/system/high-priority.service.d/10-cpu.conf > /dev/null <<EOF
[Service]
CPUQuota=80%
CPUWeight=200
MemoryMax=4G
EOF
# 重启服务生效
sudo systemctl daemon-reload
sudo systemctl restart high-priority.service
# 手动创建cgroup进行测试
sudo mkdir /sys/fs/cgroup/test.slice
echo "200000" > /sys/fs/cgroup/test.slice/cpu.max # 限制为20% CPU
echo "1G" > /sys/fs/cgroup/test.slice/memory.max # 限制内存1G
# 将进程加入cgroup
echo $$ > /sys/fs/cgroup/test.slice/cgroup.procs
2.2 CPU调度器优化
对于不同工作负载,选择合适的CPU调度器可以显著提升性能。
# 查看当前调度器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# 临时修改调度器(性能模式)
echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 永久修改:创建udev规则
sudo tee /etc/udev/rules.d/99-cpu-performance.rules > /dev/null <<EOF
SUBSYSTEM=="cpufreq", ACTION=="change", ATTR{scaling_governor}="performance"
EOF
# 重启udev服务
sudo systemctl restart systemd-udevd
# 对于NUMA系统,优化内存分配策略
# 安装numactl
sudo dnf install -y numactl
# 查看NUMA拓扑
numactl --hardware
# 绑定进程到特定NUMA节点
numactl --cpunodebind=0 --membind=0 your_application
2.3 中断亲和性优化
对于高网络I/O场景,将中断绑定到特定CPU核心可以减少上下文切换。
# 查看当前中断分布
cat /proc/interrupts | grep eth0
# 安装irqbalance服务(自动优化)
sudo dnf install -y irqbalance
sudo systemctl enable --now irqbalance
# 手动优化(禁用irqbalance后)
# 查看网卡中断队列
ethtool -l eth0
# 设置中断亲和性
# 将中断绑定到CPU2-5
sudo bash -c 'for i in $(grep eth0 /proc/interrupts | cut -d: -f1 | tr -d " "); do echo 3c > /proc/irq/$i/smp_affinity; done'
# 验证设置
cat /proc/interrupts | grep eth0
三、内存优化策略
3.1 透明大页(THP)配置
对于内存密集型应用(如Redis、PostgreSQL),透明大页可以减少TLB miss,提升性能。
# 查看当前THP状态
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
# 临时禁用THP(推荐数据库服务器)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久禁用:修改grub
sudo grubby --update-kernel=ALL --args="transparent_hugepage=never"
# 验证
sudo grubby --info=ALL | grep transparent_hugepage
# 对于需要使用大页的应用,手动配置
# 例如PostgreSQL配置
# postgresql.conf
# huge_pages = on
# shared_buffers = 8GB # 需要相应的大页支持
3.2 内存压缩与交换策略
# 配置zswap(内存压缩交换)
# 编辑grub配置
sudo vi /etc/default/grub
# 在GRUB_CMDLINE_LINUX中添加
GRUB_CMDLINE_LINUX="... zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=25"
# 更新grub并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
# 配置交换策略
# 创建自定义交换配置
sudo tee /etc/sysctl.d/99-swappiness.conf > /dev/null <<EOF
vm.swappiness = 5
vm.vfs_cache_pressure = 50
EOF
# 应用配置
sudo sysctl -p /etc/sysctl.d/99-swappiness.conf
四、I/O性能优化
4.1 I/O调度器选择
对于SSD/NVMe设备,应使用none或mq-deadline调度器。
# 查看当前I/O调度器
cat /sys/block/sda/queue/scheduler
# 临时修改
echo none > /sys/block/nvme0n1/queue/scheduler
# 永久修改:创建udev规则
sudo tee /etc/udev/rules.d/60-ioscheduler.rules > /dev/null <<EOF
# 设置SSD调度器为none
ACTION=="add|change", KERNEL=="nvme*[0-9]n[0-9]", ATTR{queue/scheduler}="none"
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
# 设置HDD调度器为mq-deadline
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="mq-deadline"
EOF
# 重新加载规则
sudo udevadm control --reload-rules
sudo udevadm trigger
4.2 文件系统优化
针对XFS/EXT4文件系统的优化参数:
# XFS优化(推荐用于数据库)
# 在/etc/fstab中添加挂载选项
UUID=xxx /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k,largeio,inode64,swalloc 0 0
# EXT4优化
UUID=xxx /data ext4 defaults,noatime,nodiratime,data=writeback,barrier=0,nobh,errors=remount-ro 0 0
# 重新挂载
sudo mount -o remount /data
# 调整I/O队列深度
# 对于NVMe设备
echo 1024 > /sys/block/nvme0n1/queue/nr_requests
# 调整预读大小
echo 16 > /sys/block/nvme0n1/queue/read_ahead_kb
4.3 数据库专用I/O优化
# 为MySQL/PostgreSQL创建专用文件系统
# 使用XFS并配置日志缓冲区
sudo mkfs.xfs -f -l size=128m,version=2 /dev/nvme0n1p1
# 挂载时使用优化参数
mount -o logbufs=8,logbsize=256k /dev/nvme0n1p1 /var/lib/mysql
# 配置内核参数针对数据库
# 在/etc/sysctl.conf中添加
vm.dirty_ratio = 10
vm.dirty_background_ratio = 3
vm.dirty_expire_centisecs = 1500
vm.swappiness = 1
五、网络栈深度调优
5.1 高性能网络参数
# 在/etc/sysctl.conf中添加
# 高性能网络核心参数
net.core.optmem_max = 4194304 # 每个socket的缓冲区上限
net.core.rmem_max = 134217728 # 最大接收缓冲区
net.core.wmem_max = 134217728 # 最大发送缓冲区
net.core.netdev_max_backlog = 30000 # 网卡队列
# TCP BBR拥塞控制(需要内核支持)
net.ipv4.tcp_congestion_control = bbr
# 快速打开
net.ipv4.tcp_fastopen = 3 # 客户端+服务端支持
# TIME_WAIT优化
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# SYN洪水保护
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
# 应用配置
sudo sysctl -p
# 验证BBR是否启用
sysctl net.ipv4.tcp_congestion_control
# 输出应为: net.ipv4.tcp_congestion_control = bbr
5.2 网卡多队列与RSS
# 查看网卡队列
ethtool -l eth0
# 启用多队列(如果支持)
ethtool -L eth0 combined 8
# 配置RSS(接收端缩放)
ethtool -X eth0 equal 8
# 绑定中断到CPU
# 安装tuned工具
sudo dnf install -y tuned
# 使用网络优化profile
sudo tuned-adm profile network-latency
# 或者手动配置
# 查看当前中断分布
cat /proc/interrupts | grep eth0
# 优化脚本示例
#!/bin/bash
# network_irq_affinity.sh
INTERFACE="eth0"
CPUS="2 3 4 5 6 7 8 9"
# 获取中断号
IRQS=$(grep $INTERFACE /proc/interrupts | awk '{print $1}' | sed 's/://')
# 分配中断
for IRQ in $IRQS; do
CPU=$(echo $CPUS | awk '{print $1}')
echo $CPU > /proc/irq/$IRQ/smp_affinity
# 循环移位CPU列表
CPUS=$(echo $CPUS | awk '{for(i=2;i<=NF;i++) printf $i " "; print ""}')
done
# 使脚本可执行并运行
chmod +x network_irq_affinity.sh
sudo ./network_irq_affinity.sh
六、监控与持续优化
6.1 性能监控工具栈
# 安装核心监控工具
sudo dnf install -y sysstat htop iotop perf bpftool
# 启用sysstat收集
sudo systemctl enable --now sysstat
# 查看实时性能指标
# CPU使用率
mpstat -P ALL 1
# 内存使用情况
vmstat 1 5
# I/O统计
iostat -x 1 5
# 网络统计
sar -n DEV 1 5
# 高级性能分析
# 使用perf进行CPU性能分析
sudo perf top -p $(pgrep your_process)
# 使用perf跟踪系统调用
sudo perf trace -p $(pgrep your_process) -e syscalls:sys_enter_*
# 使用bpftrace进行动态追踪
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm, str(args->filename)); }'
6.2 建立性能基线
#!/bin/bash
# performance_baseline.sh
# 创建基准测试目录
BASELINE_DIR="/var/log/performance_baseline/$(date +%Y%m%d_%H%M%S)"
mkdir -p $BASELINE_DIR
# 收集系统信息
echo "=== 系统信息 ===" > $BASELINE_DIR/system_info.txt
uname -a >> $BASELINE_DIR/system_info.txt
lscpu >> $BASELINE_DIR/system_info.txt
free -h >> $BASELINE_DIR/system_info.txt
df -h >> $BASELINE_DIR/system_info.txt
# 收集当前sysctl参数
echo "=== Sysctl参数 ===" > $BASELINE_DIR/sysctl_params.txt
sysctl -a | grep -E "(net|vm)" >> $BASELINE_DIR/sysctl_params.txt
# 性能快照
echo "=== 性能快照 ===" > $BASELINE_DIR/performance_snapshot.txt
mpstat -P ALL 1 1 >> $BASELINE_DIR/performance_snapshot.txt
vmstat 1 1 >> $BASELINE_DIR/performance_snapshot.txt
iostat -x 1 1 >> $BASELINE_DIR/performance_snapshot.txt
# 网络连接统计
echo "=== 网络统计 ===" > $BASELINE_DIR/network_stats.txt
ss -s >> $BASELINE_DIR/network_stats.txt
netstat -s >> $BASELINE_DIR/network_stats.txt
echo "基准数据已保存到: $BASELINE_DIR"
6.3 自动化优化脚本
#!/bin/bash
# alma_optimize.sh - AlmaLinux性能优化脚本
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
log() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}"
}
warn() {
echo -e "${YELLOW}[警告] $1${NC}"
}
error() {
echo -e "${RED}[错误] $1${NC}"
exit 1
}
# 检查是否为root
check_root() {
if [[ $EUID -ne 0 ]]; then
error "此脚本需要root权限运行"
fi
}
# 备份原始配置
backup_config() {
log "备份原始配置..."
BACKUP_DIR="/root/alma_optimize_backup_$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
cp /etc/sysctl.conf $BACKUP_DIR/
cp /etc/default/grub $BACKUP_DIR/
log "备份完成: $BACKUP_DIR"
}
# 优化sysctl
optimize_sysctl() {
log "优化sysctl参数..."
# 网络优化
cat >> /etc/sysctl.conf <<'EOF'
# AlmaLinux性能优化 - 网络
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 5000
net.core.rmem_default = 262144
net.core.rmem_max = 16777216
net.core.wmem_default = 262144
net.core.wmem_max = 16777216
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 10
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_tw_buckets = 2000000
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_congestion_control = bbr
# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
vm.dirty_expire_centisecs = 3000
vm.vfs_cache_pressure = 100
vm.min_free_kbytes = 65536
EOF
# 应用配置
sysctl -p
log "sysctl优化完成"
}
# 优化CPU调度
optimize_cpu() {
log "优化CPU调度器..."
# 设置性能模式
for cpu in /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor; do
if [ -f $cpu ]; then
echo performance > $cpu
fi
done
# 创建udev规则
cat > /etc/udev/rules.d/99-cpu-performance.rules <<'EOF'
SUBSYSTEM=="cpufreq", ACTION=="change", ATTR{scaling_governor}="performance"
EOF
# 重启udev
systemctl restart systemd-udevd
log "CPU调度优化完成"
}
# 优化I/O调度器
optimize_io() {
log "优化I/O调度器..."
# 创建udev规则
cat > /etc/udev/rules.d/60-ioscheduler.rules <<'EOF'
ACTION=="add|change", KERNEL=="nvme*[0-9]n[0-9]", ATTR{queue/scheduler}="none"
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="mq-deadline"
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="mq-deadline"
EOF
# 重新加载规则
udevadm control --reload-rules
udevadm trigger
log "I/O调度器优化完成"
}
# 优化THP配置
optimize_thp() {
log "配置透明大页..."
# 禁用THP(推荐用于生产环境)
grubby --update-kernel=ALL --args="transparent_hugepage=never"
# 创建systemd服务确保重启后生效
cat > /etc/systemd/system/disable-thp.service <<'EOF'
[Unit]
Description=Disable Transparent Hugepages
After=local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
systemctl enable disable-thp.service
systemctl start disable-thp.service
log "THP配置完成"
}
# 安装监控工具
install_monitoring() {
log "安装监控工具..."
dnf install -y sysstat htop iotop perf bpftool
# 启用sysstat
systemctl enable --now sysstat
log "监控工具安装完成"
}
# 主函数
main() {
echo "========================================"
echo "AlmaLinux 性能优化脚本"
echo "========================================"
echo ""
check_root
read -p "是否继续执行优化? (y/N): " confirm
if [[ $confirm != "y" && $confirm != "Y" ]]; then
log "操作已取消"
exit 0
fi
backup_config
optimize_sysctl
optimize_cpu
optimize_io
optimize_thp
install_monitoring
echo ""
log "优化完成!建议重启系统以使所有更改生效。"
log "重启后运行: cat /proc/cmdline 检查THP状态"
}
main "$@"
七、特定场景优化方案
7.1 Web服务器优化(Nginx/Apache)
# Nginx优化配置示例
# /etc/nginx/nginx.conf
# 工作进程配置
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
http {
# 缓冲区优化
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
# 超时优化
client_header_timeout 30s;
client_body_timeout 30s;
send_timeout 30s;
# Gzip压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
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;
# TCP优化
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 100;
}
# 系统级优化配合
# 在/etc/sysctl.conf中添加
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_tw_reuse = 1
7.2 数据库服务器优化(PostgreSQL)
# PostgreSQL配置优化
# /var/lib/pgsql/data/postgresql.conf
# 内存分配
shared_buffers = 8GB # 通常为总内存的25%
effective_cache_size = 24GB # 通常为总内存的75%
work_mem = 64MB # 每个查询操作的内存
maintenance_work_mem = 2GB # 维护操作内存
# WAL配置
wal_buffers = 16MB
checkpoint_timeout = 15min
max_wal_size = 8GB
min_wal_size = 2GB
# 查询优化
random_page_cost = 1.1 # SSD优化
effective_io_concurrency = 200 # SSD优化
# 日志优化
log_min_duration_statement = 1000 # 记录慢查询
log_checkpoints = on
log_connections = on
log_disconnections = on
# 系统级配合
# 在/etc/sysctl.conf中添加
vm.swappiness = 1
vm.dirty_ratio = 10
vm.dirty_background_ratio = 3
vm.dirty_expire_centisecs = 1500
# 文件系统挂载选项
# /etc/fstab
UUID=xxx /var/lib/pgsql xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0
7.3 容器环境优化
# 容器运行时优化(CRI-O/Docker)
# /etc/containers/registries.conf
unqualified-search-registries = ["registry.access.redhat.com", "docker.io"]
# Docker优化
# /etc/docker/daemon.json
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65536,
"Soft": 65536
}
}
}
# 容器内核参数优化
# 创建systemd服务
sudo tee /etc/systemd/system/container-optimize.service > /dev/null <<'EOF'
[Unit]
Description=Container Kernel Optimization
After=network.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
ExecStart=/bin/bash -c 'echo 262144 > /proc/sys/net/core/somaxconn'
ExecStart=/bin/bash -c 'echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable container-optimize.service
sudo systemctl start container-optimize.service
八、验证与回滚策略
8.1 配置验证
#!/bin/bash
# validate_optimization.sh
echo "=== 验证优化配置 ==="
# 验证sysctl参数
echo "1. Sysctl参数验证:"
sysctl_values=(
"net.core.somaxconn=65535"
"net.ipv4.tcp_tw_reuse=1"
"vm.swappiness=10"
"vm.dirty_ratio=15"
)
for item in "${sysctl_values[@]}"; do
key=$(echo $item | cut -d= -f1)
expected=$(echo $item | cut -d= -f2)
actual=$(sysctl -n $key 2>/dev/null)
if [ "$actual" = "$expected" ]; then
echo " ✓ $key = $actual"
else
echo " ✗ $key = $actual (期望: $expected)"
fi
done
# 验证THP状态
echo ""
echo "2. 透明大页状态:"
THP_ENABLED=$(cat /sys/kernel/mm/transparent_hugepage/enabled | grep -o '\[.*\]')
if [[ $THP_ENABLED == "[never]" ]]; then
echo " ✓ THP已禁用"
else
echo " ✗ THP未禁用: $THP_ENABLED"
fi
# 验证CPU调度器
echo ""
echo "3. CPU调度器:"
GOVERNOR=$(cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor 2>/dev/null || echo "N/A")
if [ "$GOVERNOR" = "performance" ]; then
echo " ✓ CPU调度器为performance"
else
echo " ✗ CPU调度器为$GOVERNOR (期望: performance)"
fi
# 验证I/O调度器
echo ""
echo "4. I/O调度器:"
for disk in /sys/block/*/queue/scheduler; do
if [[ $disk == *"nvme"* ]]; then
current=$(cat $disk | grep -o '\[.*\]')
if [[ $current == "[none]" ]]; then
echo " ✓ $(basename $(dirname $disk)) 调度器为none"
else
echo " ✗ $(basename $(dirname $disk)) 调度器为$current"
fi
fi
done
# 验证监控工具
echo ""
echo "5. 监控工具安装:"
tools=("sysstat" "htop" "iotop")
for tool in "${tools[@]}"; do
if command -v $tool &> /dev/null; then
echo " ✓ $tool 已安装"
else
echo " ✗ $tool 未安装"
fi
done
echo ""
echo "验证完成!"
8.2 回滚脚本
#!/bin/bash
# rollback_optimization.sh
set -e
echo "=== 回滚优化配置 ==="
# 检查备份目录
BACKUP_DIR=$(ls -td /root/alma_optimize_backup_* 2>/dev/null | head -1)
if [ -z "$BACKUP_DIR" ]; then
echo "错误: 未找到备份目录"
exit 1
fi
echo "找到备份: $BACKUP_DIR"
read -p "确认回滚? (y/N): " confirm
if [[ $confirm != "y" && $confirm != "Y" ]]; then
echo "操作已取消"
exit 0
fi
# 恢复sysctl.conf
if [ -f "$BACKUP_DIR/sysctl.conf" ]; then
cp "$BACKUP_DIR/sysctl.conf" /etc/sysctl.conf
sysctl -p
echo "✓ 恢复sysctl.conf"
fi
# 恢复grub
if [ -f "$BACKUP_DIR/grub" ]; then
cp "$BACKUP_DIR/grub" /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
echo "✓ 恢复grub配置"
fi
# 移除自定义服务
services=("disable-thp.service" "container-optimize.service")
for service in "${services[@]}"; do
if systemctl is-enabled $service &>/dev/null; then
systemctl disable $service
systemctl stop $service
rm -f /etc/systemd/system/$service
echo "✓ 移除服务: $service"
fi
done
# 移除udev规则
rm -f /etc/udev/rules.d/99-cpu-performance.rules
rm -f /etc/udev/rules.d/60-ioscheduler.rules
udevadm control --reload-rules
udevadm trigger
echo "✓ 移除udev规则"
# 重启系统
echo ""
echo "回滚完成!建议重启系统以使所有更改生效。"
read -p "立即重启? (y/N): " reboot_confirm
if [[ $reboot_confirm == "y" || $reboot_confirm == "Y" ]]; then
reboot
fi
九、总结与最佳实践
9.1 优化检查清单
在完成所有优化后,请按以下清单验证:
- [ ] 内核参数:所有sysctl参数已应用并验证
- [ ] CPU优化:调度器设置为performance,cgroups配置完成
- [ ] 内存优化:THP已禁用,swappiness已调整
- [ ] I/O优化:SSD使用none调度器,文件系统挂载选项优化
- [ ] 网络优化:TCP参数优化,BBR启用,中断亲和性配置
- [ ] 监控工具:sysstat、htop、iotop、perf已安装
- [ ] 应用配置:具体应用(Nginx/PostgreSQL)配置已优化
- [ ] 验证脚本:运行validate_optimization.sh确认所有配置
- [ ] 备份策略:已创建回滚脚本并测试
9.2 持续优化建议
- 定期监控:每周检查性能指标,建立趋势分析
- 压力测试:定期使用stress、fio、iperf3进行压力测试
- 日志分析:关注系统日志中的性能警告
- 内核更新:保持内核更新,但先在测试环境验证
- 文档记录:记录所有优化决策和效果
9.3 性能优化哲学
性能优化不是一次性的工作,而是一个持续的过程。记住以下原则:
- 测量先于优化:没有数据支持的优化是盲目的
- 理解工作负载:不同的应用需要不同的优化策略
- 保持简单:复杂的优化往往难以维护
- 逐步实施:一次只做一个改变,便于回滚和验证
- 平衡稳定性和性能:稳定性永远是第一位的
通过本文提供的完整优化方案,你的AlmaLinux系统将能够充分发挥硬件潜力,为生产环境提供卓越的性能表现。记住,优化是一个迭代过程,持续监控和调整是保持最佳性能的关键。
