AlmaLinux 是一个由社区驱动的、开源的、与 RHEL 二进制兼容的操作系统。它继承了 RHEL 的稳定性和安全性,同时提供了长期的支持。对于服务器管理员和开发者来说,优化 AlmaLinux 的性能是确保应用高效运行、资源合理利用的关键。本文将从基础配置到高级调优,提供一份详细的实战指南,帮助您系统地提升 AlmaLinux 的性能。
1. 基础系统配置优化
在深入高级调优之前,确保系统的基础配置是优化的。这包括内核参数、文件系统和基本服务配置。
1.1 内核参数调优
内核参数直接影响系统的资源管理和调度。通过调整 /etc/sysctl.conf 文件,可以优化网络、内存和进程管理。
示例:优化网络和内存参数
编辑 /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
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 15
# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 10
vm.dirty_background_ratio = 5
vm.vfs_cache_pressure = 50
解释:
net.core.somaxconn:定义了系统中每个端口的最大连接队列长度,提高并发连接能力。net.ipv4.tcp_tw_reuse:允许重用 TIME_WAIT 状态的套接字,减少连接建立的开销。vm.swappiness:控制内核使用交换分区的倾向,值越低越倾向于使用物理内存,建议设置为 10(默认为 60)。vm.dirty_ratio和vm.dirty_background_ratio:控制脏页比例,避免系统因大量写入而卡顿。
应用配置:
sudo sysctl -p
1.2 文件系统优化
文件系统的选择和挂载选项对 I/O 性能有显著影响。对于大多数服务器,推荐使用 XFS 或 ext4。
示例:优化 ext4 文件系统
在 /etc/fstab 中为挂载点添加优化选项:
/dev/sda1 / ext4 defaults,noatime,nodiratime,commit=60 0 1
解释:
noatime:禁止更新文件访问时间,减少磁盘写入。nodiratime:禁止更新目录访问时间。commit=60:将数据提交到磁盘的间隔时间从默认的 5 秒延长到 60 秒,减少 I/O 次数。
对于 XFS 文件系统,可以使用以下挂载选项:
/dev/sdb1 /data xfs defaults,noatime,nodiratime,allocsize=64k 0 2
1.3 禁用不必要的服务
减少运行的服务可以释放系统资源。使用 systemctl 管理服务。
示例:禁用不需要的服务
# 查看当前运行的服务
systemctl list-unit-files --type=service | grep enabled
# 禁用不需要的服务,例如蓝牙、cups(打印服务)
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable firewalld # 如果使用其他防火墙
注意:禁用服务前请确保不影响系统功能。
2. 系统资源监控与诊断
在优化之前,需要了解系统的当前状态。使用工具监控 CPU、内存、磁盘和网络。
2.1 使用 top 和 htop
top 是内置的实时监控工具,htop 是更友好的版本(需安装)。
# 安装 htop
sudo dnf install htop -y
# 运行 htop
htop
在 htop 中,可以查看进程列表、CPU 和内存使用情况,并可以按 F9 杀死进程。
2.2 使用 vmstat 和 iostat
vmstat 报告虚拟内存统计,iostat 报告磁盘 I/O 统计。
# 安装 sysstat 包
sudo dnf install sysstat -y
# 每 2 秒报告一次,共 5 次
vmstat 2 5
# 每 2 秒报告一次磁盘 I/O,共 5 次
iostat -x 2 5
示例输出分析:
vmstat中的si和so列显示交换分区的读写,如果持续较高,说明内存不足。iostat中的%util列显示磁盘利用率,如果接近 100%,说明磁盘是瓶颈。
2.3 使用 sar 进行长期监控
sar 可以收集并报告系统活动信息,用于长期分析。
# 安装 sysstat 并启用 sar
sudo dnf install sysstat -y
sudo systemctl enable sysstat
sudo systemctl start sysstat
# 查看 CPU 使用情况
sar -u
# 查看内存使用情况
sar -r
# 查看磁盘 I/O
sar -d
3. 高级性能调优
3.1 CPU 调优
3.1.1 调整 CPU 频率策略
AlmaLinux 默认使用 ondemand 或 performance 调速器。对于服务器,推荐使用 performance 以获得稳定性能。
# 查看当前调速器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# 安装 cpupower 工具
sudo dnf install cpupower-utils -y
# 设置所有 CPU 为 performance 模式
sudo cpupower frequency-set -g performance
# 永久设置:编辑 /etc/sysconfig/cpupower
echo 'GOVERNOR="performance"' | sudo tee -a /etc/sysconfig/cpupower
sudo systemctl enable cpupower
sudo systemctl start cpupower
3.1.2 调整进程优先级
使用 nice 和 renice 调整进程优先级。
# 启动一个进程并设置优先级(-20 到 19,值越小优先级越高)
nice -n -10 ./my_app
# 调整已运行进程的优先级
renice -n -10 -p <PID>
3.2 内存调优
3.2.1 调整透明大页(THP)
透明大页可以减少内存管理开销,但可能不适合所有工作负载。对于数据库等应用,建议禁用。
# 查看当前 THP 状态
cat /sys/kernel/mm/transparent_hugepage/enabled
# 临时禁用
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
# 永久禁用:编辑 /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="transparent_hugepage=never"
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
3.2.2 调整内存分配策略
对于特定应用,可以调整内存分配策略。例如,对于 Java 应用,可以调整 JVM 参数。
# 示例:调整 Java 应用的堆大小
java -Xms4g -Xmx4g -XX:+UseG1GC -jar myapp.jar
3.3 磁盘 I/O 调优
3.3.1 调整 I/O 调度器
I/O 调度器决定磁盘请求的处理顺序。对于 SSD,推荐使用 none 或 noop;对于 HDD,推荐使用 deadline 或 cfq。
# 查看当前调度器
cat /sys/block/sda/queue/scheduler
# 临时设置为 deadline(适用于 HDD)
echo deadline | sudo tee /sys/block/sda/queue/scheduler
# 永久设置:创建 udev 规则
echo 'ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/scheduler}="deadline"' | sudo tee /etc/udev/rules.d/60-ioscheduler.rules
sudo udevadm control --reload-rules
3.3.2 调整 I/O 队列深度
对于高并发 I/O,可以增加队列深度。
# 查看当前队列深度
cat /sys/block/sda/queue/nr_requests
# 增加队列深度(例如,增加到 1024)
echo 1024 | sudo tee /sys/block/sda/queue/nr_requests
3.4 网络调优
3.4.1 调整网络缓冲区
网络缓冲区大小影响网络吞吐量和延迟。
# 查看当前缓冲区大小
sysctl net.core.rmem_max
sysctl net.core.wmem_max
# 增加缓冲区大小
sudo sysctl -w net.core.rmem_max=16777216
sudo sysctl -w net.core.wmem_max=16777216
sudo sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
3.4.2 调整 TCP 参数
优化 TCP 参数可以提高网络性能,特别是在高延迟或高带宽网络中。
# 启用 TCP 快速打开
sudo sysctl -w net.ipv4.tcp_fastopen=3
# 调整 TCP 拥塞控制算法
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
# 启用 TCP 时间戳
sudo sysctl -w net.ipv4.tcp_timestamps=1
4. 应用特定优化
4.1 数据库优化(以 MySQL 为例)
4.1.1 调整 MySQL 配置
编辑 /etc/my.cnf 或 /etc/mysql/my.cnf,根据服务器资源调整参数。
[mysqld]
# 内存相关
innodb_buffer_pool_size = 4G # 根据总内存调整,通常为总内存的 50-70%
innodb_log_file_size = 512M
innodb_flush_log_at_trx_commit = 2 # 平衡性能和数据安全
innodb_flush_method = O_DIRECT
# 连接相关
max_connections = 200
thread_cache_size = 50
# 查询缓存(MySQL 8.0 已移除,适用于 5.7)
query_cache_type = 0
4.1.2 使用性能模式监控
启用 MySQL 性能模式(Performance Schema)以监控查询性能。
-- 启用性能模式
SET GLOBAL performance_schema = ON;
-- 查看慢查询
SELECT * FROM mysql.slow_log;
4.2 Web 服务器优化(以 Nginx 为例)
4.2.1 调整 Nginx 配置
编辑 /etc/nginx/nginx.conf,优化工作进程和连接数。
worker_processes auto; # 自动设置为 CPU 核心数
worker_connections 1024; # 每个 worker 的最大连接数
worker_rlimit_nofile 65535; # 文件描述符限制
events {
use epoll; # 使用 epoll 事件模型
worker_connections 1024;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# 启用 gzip 压缩
gzip on;
gzip_vary on;
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;
}
4.2.2 调整内核参数以支持高并发
结合之前提到的网络内核参数,确保系统可以处理大量连接。
# 增加文件描述符限制
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf
# 增加系统级文件描述符限制
echo "fs.file-max = 1000000" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
4.3 容器化应用优化(以 Docker 为例)
4.3.1 调整 Docker 守护进程配置
编辑 /etc/docker/daemon.json,优化存储驱动和资源限制。
{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
},
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 65535,
"Soft": 65535
}
}
}
4.3.2 调整容器资源限制
使用 docker run 时指定资源限制,避免容器占用过多资源。
# 限制 CPU 和内存
docker run -d --name myapp \
--cpus="1.5" \
--memory="2g" \
--memory-swap="2g" \
myimage
5. 监控与自动化调优
5.1 使用 Prometheus 和 Grafana 监控
Prometheus 是一个开源的监控系统,Grafana 用于可视化。
安装 Prometheus 和 Grafana:
# 安装 Prometheus
sudo dnf install prometheus -y
sudo systemctl enable prometheus
sudo systemctl start prometheus
# 安装 Grafana
sudo dnf install grafana -y
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
配置 Prometheus 监控 AlmaLinux 主机,使用 Node Exporter 收集系统指标。
# 安装 Node Exporter
sudo dnf install node_exporter -y
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
# 在 Prometheus 配置文件中添加 Node Exporter 目标
# /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
5.2 自动化调优脚本
编写脚本自动化常见调优任务。
示例:性能调优脚本
#!/bin/bash
# performance_tuning.sh
# 设置内核参数
echo "net.core.somaxconn = 65535" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
echo "vm.swappiness = 10" >> /etc/sysctl.conf
sysctl -p
# 设置文件系统挂载选项
sed -i 's/defaults/defaults,noatime,nodiratime,commit=60/g' /etc/fstab
# 禁用不必要的服务
systemctl disable bluetooth
systemctl disable cups
# 设置 CPU 调速器为 performance
cpupower frequency-set -g performance
# 禁用透明大页
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 设置 I/O 调度器为 deadline(适用于 HDD)
for disk in /sys/block/sd*/queue/scheduler; do
echo deadline > $disk
done
echo "性能调优完成!"
运行脚本:
chmod +x performance_tuning.sh
sudo ./performance_tuning.sh
6. 总结
AlmaLinux 的性能优化是一个持续的过程,需要根据具体的工作负载和硬件环境进行调整。本文从基础配置到高级调优,涵盖了内核参数、文件系统、资源监控、CPU、内存、磁盘、网络以及应用特定优化。通过系统地应用这些策略,您可以显著提升 AlmaLinux 的性能,确保应用高效稳定运行。
关键要点:
- 基础配置:优化内核参数和文件系统,禁用不必要的服务。
- 监控诊断:使用工具监控系统状态,识别瓶颈。
- 高级调优:针对 CPU、内存、磁盘和网络进行精细调整。
- 应用优化:根据应用类型(如数据库、Web 服务器)进行特定优化。
- 自动化:使用脚本和监控工具实现自动化调优和持续优化。
记住,优化前务必备份重要数据,并在测试环境中验证调整效果。性能调优没有银弹,需要结合实际场景不断迭代和优化。
