在当今数字化时代,服务器性能直接关系到业务的稳定性和用户体验。AlmaLinux 作为 CentOS 的稳定替代品,继承了 RHEL 的稳定性和安全性,但在实际部署中,我们仍需针对特定场景进行深度优化。本文将从内核调优、资源管理、文件系统优化、网络性能提升等多个维度,详细探讨提升 AlmaLinux 系统性能的关键策略与实用技巧。
一、系统监控与性能基准测试
在进行任何优化之前,我们必须先了解系统的当前状态。没有基准数据的优化是盲目的,因此掌握系统监控和基准测试工具至关重要。
1.1 系统监控工具
AlmaLinux 提供了丰富的内置监控工具,帮助我们实时了解系统资源使用情况。
top 命令 是最基础的实时监控工具,它能显示系统中各个进程的资源占用情况。通过 top,我们可以快速发现 CPU 或内存占用过高的进程。
# 启动 top 命令
top
# 在 top 界面中,我们可以使用以下常用快捷键:
# P:按 CPU 使用率排序
# M:按内存使用率排序
# k:终止指定进程
# q:退出 top
htop 是 top 的增强版本,提供了更友好的交互界面和更丰富的功能。如果系统未安装,可以通过以下命令安装:
# 安装 htop
sudo dnf install htop -y
# 启动 htop
htop
在 htop 界面中,我们可以使用 F2 进入设置,自定义显示的指标,例如启用 CPU 使用率条形图、内存使用率条形图等,让监控信息更直观。
iostat 用于监控磁盘 I/O 统计信息,帮助我们了解磁盘的读写性能。
# 安装 sysstat 包(包含 iostat)
sudo dnf install sysstat -y
# 每 2 秒刷新一次磁盘 I/O 统计信息
iostat -dx 2
输出示例:
Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s %rrqm %wrqm r_await w_await aqu-sz rareq-sz wareq-sz svctm %util
sda 0.50 1.20 4.00 8.00 0.00 0.00 0.00 0.00 0.20 0.50 0.01 8.00 6.67 0.10 0.02
其中,r/s 和 w/s 分别表示每秒读写次数,rkB/s 和 wkB/s 表示每秒读写的数据量,%util 表示磁盘利用率,如果该值持续接近 100%,说明磁盘可能成为性能瓶颈。
vmstat 用于监控虚拟内存、进程、CPU 活动等信息。
# 每 2 秒刷新一次,共 5 次
vmstat 2 5
输出示例:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 123456 12345 678900 0 0 2 4 100 200 5 2 93 0 0
0 0 0 123456 12345 678900 0 0 0 0 150 300 3 1 96 0 0
其中,r 表示运行队列中的进程数,b 表示阻塞的进程数,us 表示用户态 CPU 时间,sy 表示内核态 CPU 时间,id 表示空闲 CPU 时间,wa 表示等待 I/O 的 CPU 时间。
1.2 基准测试工具
基准测试可以让我们量化系统性能,便于优化前后对比。
sysbench 是一款流行的基准测试工具,支持 CPU、内存、磁盘、数据库等测试。
# 安装 sysbench
sudo dnf install epel-release -y
sudo dnf install sysbench -y
# CPU 基准测试:计算 10000 个质数
sysbench cpu --cpu-max-prime=10000 run
# 内存基准测试:分配 1GB 内存,进行 100 次读写操作
sysbench memory --memory-block-size=1M --memory-total-size=100G run
# 磁盘基准测试:在 /tmp 目录下创建 10 个文件,每个 1GB,进行随机读写测试
sysbench fileio --file-total-size=10G --file-test-mode=rndrw prepare
sysbench fileio --file-total-size=10G --file-test-mode=rndrw run
sysbench fileio --file-total-size=10G --file-test-mode=rndrw cleanup
fio 是更专业的磁盘 I/O 基准测试工具,支持更复杂的测试场景。
# 安装 fio
sudo dnf install fio -y
# 随机读测试:4KB 块大小,队列深度 32,运行 60 秒
fio --name=randread --ioengine=libaio --iodepth=32 --rw=randread --bs=4k --size=1G --numjobs=1 --runtime=60 --group_reporting
# 顺序写测试:64KB 块大小,队列深度 16,运行 60 秒
fio --name=seqwrite --ioengine=libaio --iodepth=16 --rw=write --bs=64k --size=1G --numjobs=1 --runtime=60 --group_reporting
通过这些工具,我们可以全面了解 AlmaLinux 系统的当前性能状态,为后续的优化提供数据支持。
二、内核参数调优
内核参数的调整是提升系统性能的关键环节。AlmaLinux 使用与 RHEL 相同的内核,我们可以通过修改 /etc/sysctl.conf 文件来调整内核参数,使其更适应我们的业务场景。
2.1 网络性能优化
对于网络密集型应用,如 Web 服务器、数据库服务器,网络参数的优化至关重要。
TCP 连接优化:增加 TCP 连接队列的长度,避免高并发下连接被丢弃。
# 编辑 /etc/sysctl.conf 文件
sudo vi /etc/sysctl.conf
# 添加或修改以下参数
# 增大 TCP 最大连接队列
net.core.somaxconn = 65535
# 增大 TCP 连接队列的最小值
net.ipv4.tcp_max_syn_backlog = 65535
# 开启 TCP SYN Cookie,防止 SYN 洪水攻击
net.ipv4.tcp_syncookies = 1
# 增大可用的端口范围
net.ipv4.ip_local_port_range = 1024 65535
# 开启 TCP 时间戳,提高网络性能
net.ipv4.tcp_timestamps = 1
# 开启 TCP 窗口缩放,提高大带宽网络性能
net.ipv4.tcp_window_scaling = 1
# 增大 TCP 接收缓冲区大小
net.core.rmem_max = 16777216
net.core.rmem_default = 16777216
# 增大 TCP 发送缓冲区大小
net.core.wmem_max = 16777216
net.core.wmem_default = 16777216
# 增大 TCP 自动调整缓冲区的最大值
net.ipv4.tcp_mem = 16777216 16777216 16777216
应用修改:
sudo sysctl -p
UDP 性能优化:如果应用使用 UDP 协议(如视频流、DNS 服务器),可以调整以下参数:
# 在 /etc/sysctl.conf 中添加
# 增大 UDP 接收缓冲区
net.core.rmem_max = 26214400
net.core.rmem_default = 26214400
# 增大 UDP 发送缓冲区
net.core.wmem_max = 26214400
net.core.wmem_default = 26214400
2.2 内存管理优化
内存管理参数的调整可以提高内存使用效率,减少交换(swap)使用,提升系统响应速度。
# 在 /etc/sysctl.conf 中添加
# 降低交换倾向,当内存使用率达到 80% 时才开始交换
vm.swappiness = 10
# 增大文件系统缓存,提高文件读取性能
vm.vfs_cache_pressure = 50
# 调整内存过量使用策略,允许分配超过物理内存的进程内存(需谨慎使用)
vm.overcommit_memory = 0 # 0:启发式过量使用;1:总是允许;2:严格检查
# 当内存不足时,杀死进程的策略(0-17,数值越小越倾向于杀死进程)
vm.panic_on_oom = 0 # 0:启用 OOM Killer;1:内核恐慌(不推荐)
2.3 磁盘 I/O 优化
磁盘 I/O 性能对数据库、文件服务器等应用至关重要。
# 在 /etc/sysctl.conf 中添加
# 增大 I/O 调度器队列长度
kernel.sched_autogroup_enabled = 0
# 调整 I/O 调度器(针对 SSD 硬盘)
# 查看当前 I/O 调度器
cat /sys/block/sda/queue/scheduler
# 临时修改为 none(适用于 NVMe SSD)或 deadline(适用于 SATA SSD)
echo none > /sys/block/sda/queue/scheduler
# 永久修改:在 /etc/default/grub 中添加 elevator=none
# 然后更新 grub 并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
注意:I/O 调度器的选择取决于硬件类型。对于 SSD,推荐使用 none 或 mq-deadline;对于 HDD,推荐使用 cfq 或 deadline。
三、文件系统优化
文件系统是数据存储的基础,选择合适的文件系统并进行优化可以显著提升磁盘性能。
3.1 选择合适的文件系统
AlmaLinux 默认使用 XFS 文件系统,它在处理大文件和大目录方面表现出色。对于不同的应用场景,我们可以选择不同的文件系统:
- XFS:适合大文件、高并发的场景,如视频服务器、数据库。
- ext4:适合通用场景,兼容性好,适合小文件和传统应用。
- Btrfs:支持快照、压缩、RAID 等高级功能,适合需要数据保护和灵活存储的场景。
3.2 XFS 文件系统优化
XFS 是 AlmaLinux 的默认文件系统,我们可以通过以下方式进行优化:
挂载选项优化:在 /etc/fstab 中调整挂载参数。
# 查看当前挂载选项
cat /etc/fstab
# 示例:优化 /data 分区的挂载选项
# 原始内容可能为:
# /dev/sdb1 /data xfs defaults 0 0
# 优化后:
/dev/sdb1 /data xfs noatime,nodiratime,logbufs=8,logbsize=256k 0 0
参数说明:
noatime:禁止更新文件访问时间,减少磁盘写操作。nodiratime:禁止更新目录访问时间。logbufs=8:增加日志缓冲区数量,提高日志写入性能。logbsize=256k:增加日志缓冲区大小。
应用修改:
sudo mount -o remount /data
XFS 文件系统碎片整理:XFS 不需要频繁碎片整理,但可以使用 xfs_fsr 工具进行优化。
# 整理 /data 分区的碎片(仅对有大量写入/删除操作的分区有效)
sudo xfs_fsr /data
3.3 ext4 文件系统优化
如果使用 ext4 文件系统,可以进行以下优化:
挂载选项优化:
# 在 /etc/fstab 中修改
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,data=writeback,barrier=0 0 0
参数说明:
data=writeback:提高写入性能,但可能增加数据丢失风险(需根据业务需求选择)。barrier=0:禁用写入屏障,提高性能,但断电可能导致数据损坏(仅适用于有 UPS 的场景)。
调整保留块:默认情况下,ext4 会为 root 用户保留 5% 的磁盘空间,对于大容量磁盘,可以降低该比例。
# 将 /dev/sdb1 的保留块比例调整为 1%
sudo tune2fs -m 1 /dev/sdb1
3.4 文件系统性能监控
使用 iostat 和 dstat 监控文件系统性能:
# 安装 dstat
sudo dnf install dstat -y
# 监控磁盘、CPU、内存、网络等信息,每 2 秒刷新
dstat -cdmn 2
四、CPU 与进程管理优化
CPU 是系统的核心资源,合理管理 CPU 和进程可以提高系统整体性能。
4.1 进程优先级调整
通过调整进程优先级,可以让关键进程获得更多 CPU 时间。
nice 和 renice 命令:
# 启动一个进程并设置优先级(-20 到 19,数值越小优先级越高)
nice -n -10 ./my_app
# 调整已运行进程的优先级
renice -n -10 -p <PID>
cgroups(控制组):cgroups 是 Linux 内核功能,用于限制、隔离和记录进程组的资源使用。对于需要严格控制资源的应用(如容器),cgroups 非常有用。
# 安装 libcgroup-tools
sudo dnf install libcgroup-tools -y
# 创建一个名为 myapp 的 cgroup,限制 CPU 使用率为 50%
sudo cgcreate -g cpu:/myapp
sudo cgset -r cpu.cfs_quota_us=50000 myapp
sudo cgset -r cpu.cfs_period_us=100000 myapp
# 在 cgroup 中运行进程
sudo cgexec -g cpu:myapp ./my_app
4.2 CPU 亲和性调整
CPU 亲和性(Affinity)可以将进程绑定到特定的 CPU 核心,减少上下文切换,提高性能。
taskset 命令:
# 查看进程的 CPU 亲和性
taskset -p <PID>
# 设置进程的 CPU 亲和性(绑定到 CPU 0 和 1)
taskset -p 0x3 <PID>
# 启动进程并设置 CPU 亲和性
taskset -c 0,1 ./my_app
4.3 中断亲和性调整
对于网络密集型应用,将网络中断绑定到特定 CPU 核心可以提高网络性能。
# 查看网络中断分配情况
cat /proc/interrupts | grep eth0
# 假设 eth0 的中断号为 123,将其绑定到 CPU 0 和 1
echo 0x3 > /proc/irq/123/smp_affinity
注意:中断号和 CPU 掩码需要根据实际情况调整。CPU 掩码是十六进制,每一位代表一个 CPU 核心(从右到左)。
4.4 锁竞争优化
在多线程应用中,锁竞争可能导致 CPU 使用率过高。可以通过以下方式优化:
- 使用无锁数据结构:如原子操作、CAS(Compare-And-Swap)等。
- 减少锁粒度:将大锁拆分为小锁,减少竞争范围。
- 使用读写锁:在读多写少的场景下,使用读写锁(
pthread_rwlock_t)可以提高并发性能。
五、网络性能优化
网络性能是服务器的关键指标,尤其对于 Web 服务、API 服务等。
5.1 网络接口参数优化
调整网卡队列长度:对于高并发网络场景,增加网卡队列长度可以减少丢包。
# 查看当前队列长度
ethtool -g eth0
# 设置接收队列长度(假设最大支持 4096)
ethtool -G eth0 rx 4096 tx 4096
启用网卡多队列:现代网卡支持多队列,可以充分利用多核 CPU。
# 查看当前队列数量
ethtool -l eth0
# 设置队列数量(假设支持 8 个队列)
ethtool -L eth0 combined 8
调整网卡中断亲和性:将网卡中断分配到不同的 CPU 核心,避免单个 CPU 过载。
# 查看网卡中断
cat /proc/interrupts | grep eth0
# 假设 eth0 有 8 个中断,分别绑定到 CPU 0-7
for i in {0..7}; do
echo $(printf "%x" $((1 << $i))) > /proc/irq/$(($i + 123))/smp_affinity
done
5.2 TCP/IP 协议栈优化
除了之前提到的内核参数,还可以进一步优化 TCP/IP 协议栈。
启用 TCP Fast Open:减少 TCP 握手延迟。
# 在 /etc/sysctl.conf 中添加
net.ipv4.tcp_fastopen = 3 # 1:客户端启用;2:服务端启用;3:同时启用
# 应用修改
sudo sysctl -p
调整 TCP 重传参数:在网络延迟较高的环境中,调整重传参数可以提高可靠性。
# 在 /etc/sysctl.conf 中添加
# 初始 RTO(重传超时)为 1 秒
net.ipv4.tcp_syn_retries = 3
net.ipv4.tcp_synack_retries = 3
# 最小 RTO 为 200ms
net.ipv4.tcp_min_rto = 200
# 最大 RTO 为 5 秒
net.ipv4.tcp_max_rto = 5000
5.3 网络工具监控
使用 ss 和 netstat 监控网络连接状态。
# 查看所有 TCP 连接状态
ss -tan
# 查看监听端口
ss -tln
# 查看连接数统计
ss -s
iftop 可以实时监控网络流量:
# 安装 iftop
sudo dnf install iftop -y
# 监控 eth0 网络流量
iftop -i eth0
六、服务与应用优化
系统服务和应用程序的优化是提升性能的直接手段。
6.1 服务管理优化
禁用不必要的服务:减少系统资源占用。
# 查看所有正在运行的服务
systemctl list-units --type=service --state=running
# 禁用不需要的服务(例如 cups 打印服务,如果服务器不需要打印)
sudo systemctl disable cups
sudo systemctl stop cups
调整服务启动顺序:对于关键服务,可以设置为优先启动。
# 创建服务依赖文件
sudo mkdir -p /etc/systemd/system/myapp.service.d
# 创建依赖配置文件
sudo vi /etc/systemd/system/myapp.service.d/after.conf
# 添加以下内容,确保在 network.target 后启动
[Unit]
After=network.target
# 重新加载 systemd 配置
sudo systemctl daemon-reload
6.2 应用程序优化
编译优化:对于从源码编译的应用,可以使用优化的编译选项。
# 使用 GCC 编译时,添加优化选项
# -O2:标准优化
# -march=native:针对当前 CPU 架构优化
# -flto:链接时优化
gcc -O2 -march=native -flto -o my_app my_app.c
使用高性能库:例如,使用 jemalloc 替代 glibc 的 malloc,可以减少内存碎片,提高多线程性能。
# 安装 jemalloc
sudo dnf install jemalloc -y
# 运行程序时使用 jemalloc
LD_PRELOAD=/usr/lib64/libjemalloc.so ./my_app
6.3 数据库优化(以 MySQL 为例)
如果在 AlmaLinux 上运行数据库,可以进行以下优化:
MySQL 配置优化(/etc/my.cnf):
[mysqld]
# 内存相关
innodb_buffer_pool_size = 4G # 设置为物理内存的 50-70%
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
# I/O 相关
innodb_flush_log_at_trx_commit = 2 # 0:每秒写入;1:每次事务提交写入;2:每次事务提交写入但不刷盘
innodb_flush_method = O_DIRECT # 绕过系统缓存,直接写入磁盘
# 连接相关
max_connections = 1000
thread_cache_size = 100
优化后重启 MySQL:
sudo systemctl restart mysqld
七、高级优化技巧
7.1 使用 tuned 动态调优
tuned 是 RHEL/CentOS/AlmaLinux 的动态调优工具,提供了多种预设配置文件。
# 安装 tuned
sudo dnf install tuned -y
# 启动并启用 tuned
sudo systemctl enable --now tuned
# 查看可用配置文件
tuned-adm list
# 选择适合的配置文件(例如,网络服务器)
sudo tuned-adm profile network-latency
# 查看当前配置文件
tuned-adm active
tuned 提供了多种配置文件,如:
latency-performance:低延迟性能模式。throughput-performance:高吞吐量模式。virtual-guest:虚拟机优化模式。network-latency:网络低延迟模式。network-throughput:网络高吞吐量模式。
7.2 使用 eBPF 进行深度监控
eBPF(Extended Berkeley Packet Filter)是 Linux 内核的革命性技术,可以用于深度监控和性能分析。
安装 bpftrace:
sudo dnf install bpftrace -y
示例:监控系统调用:
# 监控所有进程的 open 系统调用
bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("Process %s opened %s\n", comm, str(args->filename)); }'
示例:监控 TCP 重传:
# 监控 TCP 重传事件
bpftrace -e 'tracepoint:tcp:tcp_retransmit_skb { printf("TCP retransmit: %s\n", comm); }'
7.3 使用 systemd 资源控制
systemd 支持通过 cgroups 对服务进行资源限制。
限制服务的 CPU 使用率:
# 编辑服务文件
sudo systemctl edit myapp.service
# 添加以下内容
[Service]
CPUQuota=50% # 限制 CPU 使用率为 50%
MemoryLimit=2G # 限制内存使用为 2GB
重新加载并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart myapp.service
八、总结
提升 AlmaLinux 系统性能是一个系统工程,需要从监控、内核调优、文件系统、CPU、网络、服务等多个方面入手。在实际操作中,我们应遵循以下原则:
- 先监控后优化:通过监控工具了解系统瓶颈,有针对性地进行优化。
- 逐步调整:每次只调整少量参数,观察效果,避免一次性调整过多导致系统不稳定。
- 测试验证:在生产环境应用优化前,务必在测试环境进行充分测试。
- 文档记录:记录所有优化操作和效果,便于后续维护和回滚。
通过本文介绍的策略和技巧,相信您可以显著提升 AlmaLinux 系统的性能,满足不同业务场景的需求。记住,性能优化是一个持续的过程,需要根据业务发展和硬件变化不断调整和优化。
