引言
AlmaLinux 作为 CentOS 的替代品,继承了 RHEL 的稳定性和企业级特性,广泛应用于服务器环境。性能优化是系统管理员和开发人员必须掌握的技能,它直接影响应用的响应速度、资源利用率和系统稳定性。本文将从内核参数调优、文件系统优化、网络配置、应用层调优等多个维度,提供一套完整的实战指南,帮助您最大化 AlmaLinux 系统的性能。
一、内核参数调优
内核参数是系统性能的基础,通过调整 /etc/sysctl.conf 或使用 sysctl 命令可以动态修改。以下是一些关键参数及其优化建议。
1.1 内存管理优化
内存是系统性能的关键因素,合理配置可以避免频繁的磁盘交换(swap),提高响应速度。
参数说明:
vm.swappiness:控制系统使用 swap 的倾向。值越低,越倾向于使用物理内存。vm.vfs_cache_pressure:控制内核回收用于目录和 inode 缓存的内存倾向。值越高,内核越倾向于回收这些缓存。vm.dirty_ratio和vm.dirty_background_ratio:控制脏页(未写入磁盘的数据)的比例,影响 I/O 性能。
实战配置:
# 编辑 sysctl.conf 文件
sudo vi /etc/sysctl.conf
# 添加或修改以下参数
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
# 应用配置
sudo sysctl -p
解释:
vm.swappiness = 10:减少 swap 使用,优先使用物理内存,适合内存充足的服务器。vm.vfs_cache_pressure = 50:平衡目录缓存和内存回收,避免过度回收导致文件系统性能下降。vm.dirty_ratio = 10和vm.dirty_background_ratio = 5:限制脏页比例,避免大量数据同时写入磁盘导致 I/O 峰值。
1.2 网络参数优化
网络性能对 Web 服务器、数据库等应用至关重要。以下参数可优化 TCP 连接和吞吐量。
参数说明:
net.core.somaxconn:定义每个监听端口的最大连接队列长度。net.ipv4.tcp_max_syn_backlog:定义 SYN 请求队列的最大长度。net.ipv4.tcp_tw_reuse:允许 TIME_WAIT 状态的 socket 被重用,提高短连接场景的性能。net.ipv4.tcp_fin_timeout:调整 TIME_WAIT 状态的超时时间,减少资源占用。
实战配置:
# 在 /etc/sysctl.conf 中添加
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
# 应用配置
sudo sysctl -p
解释:
net.core.somaxconn = 65535:提高连接队列长度,适合高并发场景(如 Nginx、Apache)。net.ipv4.tcp_tw_reuse = 1:允许重用 TIME_WAIT 状态的 socket,减少连接建立延迟,但需注意安全性。net.ipv4.tcp_fin_timeout = 30:缩短 TIME_WAIT 状态时间,释放资源更快。
1.3 文件系统参数优化
文件系统参数影响磁盘 I/O 性能,特别是对于数据库和文件服务器。
参数说明:
fs.file-max:系统可打开的最大文件数。fs.aio-max-nr:异步 I/O 请求的最大数量。fs.inotify.max_user_watches:inotify 监控的最大文件数,影响文件监控工具(如 logrotate)。
实战配置:
# 在 /etc/sysctl.conf 中添加
fs.file-max = 2097152
fs.aio-max-nr = 1048576
fs.inotify.max_user_watches = 524288
# 应用配置
sudo sysctl -p
解释:
fs.file-max = 2097152:提高文件描述符上限,适合高并发应用。fs.aio-max-nr = 1048576:增加异步 I/O 请求数,提升数据库(如 MySQL)的 I/O 性能。fs.inotify.max_user_watches = 524288:增加监控文件数,避免日志轮转或文件监控工具失败。
二、文件系统优化
文件系统的选择和挂载选项直接影响磁盘 I/O 性能。AlmaLinux 默认使用 XFS 或 ext4,以下以 XFS 为例进行优化。
2.1 XFS 文件系统优化
XFS 在高并发和大文件场景下表现优异,适合数据库和文件服务器。
挂载选项优化:
noatime:禁止更新文件访问时间,减少磁盘写入。nodiratime:禁止更新目录访问时间。logbufs=8:增加日志缓冲区数量,提升写入性能。logbsize=256k:设置日志缓冲区大小。
实战配置:
# 查看当前挂载选项
mount | grep xfs
# 编辑 /etc/fstab,添加挂载选项
/dev/sda1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0
# 重新挂载
sudo mount -o remount /data
解释:
noatime和nodiratime:减少不必要的磁盘写入,提升读写性能。logbufs=8和logbsize=256k:优化 XFS 日志性能,适合写入密集型应用。
2.2 磁盘调度器优化
磁盘调度器决定 I/O 请求的处理顺序,不同场景适合不同调度器。
常见调度器:
deadline:适合数据库等随机读写场景,保证请求的截止时间。noop:适合 SSD,减少调度开销。cfq:适合多进程公平调度,但性能一般。
实战配置:
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 设置为 deadline(适合数据库)
echo deadline > /sys/block/sda/queue/scheduler
# 永久生效(通过 udev 规则)
sudo vi /etc/udev/rules.d/60-scheduler.rules
# 添加以下内容
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"
# 重新加载 udev 规则
sudo udevadm control --reload-rules
解释:
- 对于数据库(如 MySQL、PostgreSQL),
deadline调度器能更好地处理随机读写,避免请求饥饿。 - 对于 SSD,使用
noop或none调度器,减少 CPU 开销。
三、网络优化
网络优化涉及接口配置、协议栈调整和负载均衡,以下从多个方面展开。
3.1 网络接口优化
调整网卡参数可以提升网络吞吐量和降低延迟。
参数说明:
txqueuelen:发送队列长度,增加可提高吞吐量。rx/tx缓冲区大小:调整接收和发送缓冲区。
实战配置:
# 查看当前配置
ethtool -g eth0
# 设置发送队列长度
sudo ip link set eth0 txqueuelen 4096
# 调整缓冲区大小(以 10G 网卡为例)
sudo ethtool -G eth0 rx 4096 tx 4096
# 永久生效(通过 NetworkManager 或 systemd)
sudo vi /etc/NetworkManager/system-connections/eth0.nmconnection
# 添加以下内容
[ethernet]
mtu=9000
txqueuelen=4096
解释:
txqueuelen=4096:增加发送队列,适合高吞吐量场景。mtu=9000:启用 Jumbo Frame,减少数据包开销,提升大文件传输效率。
3.2 TCP 协议栈优化
TCP 协议栈参数对网络性能影响显著,特别是高延迟或高带宽场景。
参数说明:
net.ipv4.tcp_rmem和net.ipv4.tcp_wmem:调整 TCP 接收和发送缓冲区。net.ipv4.tcp_congestion_control:拥塞控制算法,bbr适合高带宽延迟积(BDP)场景。net.ipv4.tcp_mtu_probing:启用 MTU 探测,避免分片。
实战配置:
# 在 /etc/sysctl.conf 中添加
net.ipv4.tcp_rmem = 4096 87380 6291456
net.ipv4.tcp_wmem = 4096 65536 6291456
net.ipv4.tcp_congestion_control = bbr
net.ipv4.tcp_mtu_probing = 1
# 应用配置
sudo sysctl -p
解释:
tcp_rmem和tcp_wmem:设置缓冲区最小、默认和最大值,适应不同网络条件。tcp_congestion_control = bbr:Google 的 BBR 算法,适合高带宽延迟积网络,提升吞吐量。tcp_mtu_probing = 1:自动探测 MTU,避免分片,减少延迟。
四、应用层调优
应用层调优针对具体应用(如 Web 服务器、数据库)进行配置,以下以 Nginx 和 MySQL 为例。
4.1 Nginx 性能优化
Nginx 是高性能 Web 服务器,优化配置可显著提升并发处理能力。
关键配置项:
worker_processes:工作进程数,通常设置为 CPU 核心数。worker_connections:每个进程的最大连接数。keepalive_timeout:保持连接超时时间。gzip:启用压缩,减少传输数据量。
实战配置:
# /etc/nginx/nginx.conf
worker_processes auto; # 自动设置为 CPU 核心数
worker_rlimit_nofile 65535; # 文件描述符上限
events {
worker_connections 65535; # 每个进程的最大连接数
use epoll; # 使用 epoll 事件模型
}
http {
# 启用 gzip 压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 连接保持
keepalive_timeout 65;
keepalive_requests 100;
# 缓冲区优化
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
# 日志优化
access_log /var/log/nginx/access.log combined buffer=32k flush=5s;
error_log /var/log/nginx/error.log warn;
}
解释:
worker_processes auto:充分利用多核 CPU。worker_connections 65535:支持高并发连接。gzip压缩:减少传输数据量,提升加载速度。keepalive_timeout:保持连接,减少 TCP 握手开销。
4.2 MySQL 性能优化
MySQL 是常用数据库,优化配置可提升查询速度和并发处理能力。
关键配置项:
innodb_buffer_pool_size:InnoDB 缓冲池大小,通常设置为物理内存的 70%-80%。innodb_log_file_size:重做日志文件大小,影响写入性能。max_connections:最大连接数。query_cache_size:查询缓存大小(MySQL 8.0 已移除,此处以 5.7 为例)。
实战配置:
# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
# 内存相关
innodb_buffer_pool_size = 16G # 根据内存调整,例如 64GB 内存服务器设置为 48G
innodb_buffer_pool_instances = 8 # 缓冲池实例数,避免争用
# 日志相关
innodb_log_file_size = 2G
innodb_log_buffer_size = 64M
# 连接相关
max_connections = 2000
thread_cache_size = 50
# 查询缓存(MySQL 5.7)
query_cache_type = 1
query_cache_size = 256M
# 其他优化
innodb_flush_log_at_trx_commit = 2 # 平衡性能和数据安全
innodb_flush_method = O_DIRECT # 避免双缓冲
解释:
innodb_buffer_pool_size:缓存数据和索引,减少磁盘 I/O。innodb_log_file_size:较大的日志文件减少日志切换频率,提升写入性能。max_connections:根据应用需求调整,避免连接数不足。innodb_flush_log_at_trx_commit = 2:每秒提交事务,提升性能,但可能丢失 1 秒数据。
五、监控与调优验证
优化后需监控系统性能,验证调优效果。常用工具包括 top、htop、iostat、vmstat、netstat 等。
5.1 系统监控工具
使用 htop 监控 CPU 和内存:
# 安装 htop
sudo dnf install htop -y
# 运行 htop
htop
- 查看 CPU 使用率、内存占用、进程列表。
- 按 F6 排序,按 F9 杀死进程。
使用 iostat 监控磁盘 I/O:
# 安装 sysstat
sudo dnf install sysstat -y
# 查看磁盘 I/O 统计(每秒刷新)
iostat -dx 1
- 关注
%util(磁盘利用率)和await(平均 I/O 等待时间)。 - 如果
%util接近 100% 或await过高,说明磁盘是瓶颈。
使用 vmstat 监控内存和进程:
vmstat 1
- 关注
si(swap in)和so(swap out),如果非零,说明内存不足。 wa(I/O 等待)高,说明磁盘 I/O 瓶颈。
5.2 网络监控工具
使用 ss 和 netstat 监控网络连接:
# 查看 TCP 连接状态
ss -tunap
# 查看端口监听情况
netstat -tuln
- 关注
TIME_WAIT连接数,过多可能需调整tcp_tw_reuse。
使用 iftop 监控网络流量:
sudo dnf install iftop -y
sudo iftop -i eth0
- 实时显示网络流量,识别带宽占用高的进程。
5.3 应用层监控
Nginx 状态监控:
# 在 nginx.conf 中添加
server {
listen 80;
server_name localhost;
location /nginx_status {
stub_status on;
allow 127.0.0.1;
deny all;
}
}
- 访问
http://localhost/nginx_status查看活动连接、请求处理等信息。
MySQL 状态监控:
-- 查看 InnoDB 缓冲池命中率
SHOW STATUS LIKE 'Innodb_buffer_pool_read%';
-- 计算命中率:(1 - Innodb_buffer_pool_reads / Innodb_buffer_pool_read_requests) * 100
-- 理想值 > 99%
-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query_log%';
SHOW VARIABLES LIKE 'long_query_time';
六、实战案例:高并发 Web 服务器优化
假设我们有一台 AlmaLinux 服务器,运行 Nginx 和 PHP-FPM,处理高并发 Web 请求。以下是完整优化步骤。
6.1 系统层面优化
# 1. 调整内核参数
sudo vi /etc/sysctl.conf
# 添加以下内容
vm.swappiness = 10
vm.vfs_cache_pressure = 50
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
fs.file-max = 2097152
sudo sysctl -p
# 2. 调整用户进程限制
sudo vi /etc/security/limits.conf
# 添加以下内容
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
# 3. 优化文件系统挂载选项
sudo vi /etc/fstab
# 修改 /data 挂载选项
/dev/sda1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0
sudo mount -o remount /data
6.2 Nginx 优化
# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 65535;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 日志格式优化
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time uct="$upstream_connect_time" '
'uht="$upstream_header_time" urt="$upstream_response_time"';
access_log /var/log/nginx/access.log main buffer=32k flush=5s;
error_log /var/log/nginx/error.log warn;
# 性能优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 100;
client_body_buffer_size 128k;
client_max_body_size 10m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
# Gzip 压缩
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# 虚拟主机配置
server {
listen 80;
server_name example.com;
root /var/www/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
}
}
}
6.3 PHP-FPM 优化
# /etc/php-fpm.d/www.conf
[www]
user = nginx
group = nginx
; 进程管理
pm = dynamic
pm.max_children = 200
pm.start_servers = 50
pm.min_spare_servers = 20
pm.max_spare_servers = 100
pm.max_requests = 500
; 进程空闲时间
pm.process_idle_timeout = 10s
; 内存限制
php_admin_value[memory_limit] = 256M
; 慢日志
request_slowlog_timeout = 5s
slowlog = /var/log/php-fpm/slow.log
; 错误日志
catch_workers_output = yes
error_log = /var/log/php-fpm/error.log
6.4 验证与监控
# 1. 重启服务
sudo systemctl restart nginx
sudo systemctl restart php-fpm
# 2. 使用 ab 压力测试
sudo dnf install httpd-tools -y
ab -n 10000 -c 100 http://localhost/
# 3. 监控系统资源
htop
iostat -dx 1
vmstat 1
# 4. 查看 Nginx 状态
curl http://localhost/nginx_status
# 5. 查看 PHP-FPM 状态
curl http://localhost/status # 需在 php-fpm 配置中启用 status 页面
七、总结
AlmaLinux 性能优化是一个系统工程,涉及内核参数、文件系统、网络和应用层多个方面。通过合理配置,可以显著提升系统性能和稳定性。关键点包括:
- 内核参数调优:根据应用场景调整内存、网络和文件系统参数。
- 文件系统优化:选择合适的挂载选项和磁盘调度器。
- 网络优化:调整接口参数和 TCP 协议栈。
- 应用层调优:针对具体应用(如 Nginx、MySQL)进行配置。
- 监控与验证:使用工具监控性能,验证调优效果。
优化是一个持续的过程,需要根据实际负载和监控数据不断调整。建议在生产环境变更前,在测试环境中充分验证。通过本文的指南,您可以系统地优化 AlmaLinux 服务器,应对各种性能挑战。
