引言
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_ratio和vm.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性能优化是一个持续的过程,需要根据具体工作负载和硬件环境进行调整。本文提供的指南涵盖了从内核调优到应用层加速的各个方面,但请记住:
- 测试先行:在生产环境应用任何优化前,务必在测试环境中验证。
- 监控持续:建立完善的监控体系,持续跟踪性能变化。
- 文档记录:记录所有优化配置和变更,便于回滚和审计。
- 安全平衡:性能优化不应牺牲系统安全性。
通过系统性的方法和工具,您可以显著提升AlmaLinux系统的性能,满足各种企业级应用的需求。
