在当今的云计算和企业级环境中,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 进程调度优化
使用 cgroups 和 systemd 控制进程资源。
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 优化原则
- 循序渐进:每次只调整一个参数,观察效果后再继续
- 备份配置:修改前备份原始配置
- 测试验证:在测试环境验证后再应用到生产环境
- 监控先行:优化前建立性能基线,优化后对比效果
- 文档记录:记录所有优化决策和效果
9.2 常见陷阱
- 过度优化:不要为了优化而优化,确保优化带来实际收益
- 忽略硬件限制:软件优化无法突破硬件瓶颈
- 忽视安全:某些优化可能降低系统安全性(如禁用防火墙)
- 不考虑兼容性:确保优化不影响现有应用兼容性
- 缺乏监控:优化后不监控,无法及时发现问题
9.3 持续优化策略
- 定期审查:每季度审查一次系统性能
- 技术更新:关注 AlmaLinux 和相关软件的更新,及时应用性能改进
- 负载变化适应:随着业务增长,重新评估和调整优化策略
- 知识共享:建立团队知识库,记录优化经验
十、总结
AlmaLinux 性能优化是一个系统工程,需要从内核到应用层的全方位考虑。通过本文介绍的策略,您可以:
- 系统内核调优:调整网络、内存、I/O 等核心参数
- 服务与进程优化:优化 systemd 服务和进程调度
- 存储优化:针对不同存储介质和文件系统进行调优
- 网络优化:优化协议栈和网络接口
- 应用层优化:针对数据库、Web 应用等进行专项优化
- 监控与调优:使用专业工具持续监控和优化
记住,性能优化是一个持续的过程,需要根据实际负载和业务需求不断调整。建议建立完整的监控体系,定期评估优化效果,确保系统始终保持在最佳性能状态。
通过本文的指导,您应该能够系统地优化 AlmaLinux 系统,显著提升系统性能,满足各种业务场景的需求。在实际操作中,请务必先在测试环境验证,再逐步应用到生产环境,确保系统稳定性和数据安全。
