引言:为什么需要优化 AlmaLinux 系统性能
AlmaLinux 作为 CentOS 的稳定替代品,广泛应用于企业级服务器环境。系统性能优化是确保服务器高效运行、资源合理利用的关键环节。通过合理的优化策略,我们可以显著提升系统响应速度、增加并发处理能力、降低资源消耗,从而提高整体业务的稳定性和用户体验。
性能优化不是一次性的工作,而是一个持续监控、分析和调整的过程。本文将从多个维度深入探讨 AlmaLinux 的性能优化策略,包括内核参数调整、文件系统优化、资源管理技巧等实战内容。
一、系统性能评估与监控
1.1 基础性能监控工具
在进行优化之前,首先需要了解系统的当前状态。AlmaLinux 提供了丰富的监控工具:
# 安装基础监控工具
sudo dnf install sysstat htop iotop
# 启动 sysstat 服务(收集系统性能数据)
sudo systemctl enable --now sysstat
# 查看实时系统资源使用情况
htop
常用监控命令详解:
# CPU 使用率统计(每10秒更新一次,共3次)
mpstat -P ALL 10 3
# 内存使用情况
free -h
# 磁盘 I/O 统计
iostat -x 1 5
# 网络连接状态
ss -tunap
# 进程级资源监控
pidstat -u -r -d 1 5
1.2 性能数据分析
通过监控工具收集数据后,需要关注以下关键指标:
- CPU 使用率:用户态(us)、系统态(sy)、空闲(id)
- 内存使用:可用内存、缓存、交换分区使用率
- 磁盘 I/O:等待时间、吞吐量、队列长度
- 网络 I/O:连接数、重传率、带宽使用
二、内核参数优化策略
2.1 sysctl 内核参数调整
内核参数是影响系统性能的核心因素。通过 /etc/sysctl.conf 文件可以永久修改这些参数。
2.1.1 网络性能优化
# 编辑 sysctl 配置文件
sudo vi /etc/sysctl.conf
# 添加以下网络优化参数
# 增加 TCP 最大连接队列
net.core.somaxconn = 65535
# 增加网络设备队列长度
net.core.netdev_max_backlog = 65536
# TCP 接收缓冲区大小
net.ipv4.tcp_rmem = 4096 87380 67108864
# TCP 发送缓冲区大小
net.ipv4.tcp_wmem = 4096 65536 67108864
# 增加可用端口范围
net.ipv4.ip_local_port_range = 1024 65535
# TIME_WAIT 状态连接重用
net.ipv4.tcp_tw_reuse = 1
# 快速回收 TIME_WAIT 连接
net.ipv4.tcp_tw_recycle = 0 # 注意:在 NAT 环境下应设为 0
# TCP 连接超时设置
net.ipv4.tcp_fin_timeout = 30
# 减少 ACK 重试次数
net.ipv4.tcp_retries2 = 5
# 启用 TCP SACK 和 DSACK
net.ipv4.tcp_sack = 1
net.ipv4.tcp_dsack = 1
# 增加最大半连接数
net.ipv4.tcp_max_syn_backlog = 65535
# 增加已连接连接的最大数量
net.ipv4.tcp_max_tw_buckets = 2000000
# 启用 TCP 时间戳
net.ipv4.tcp_timestamps = 1
# 增加文件描述符限制
fs.file-max = 2097152
# 增加进程可打开的文件描述符数量
fs.nr_open = 2097152
2.1.2 内存管理优化
# 在 /etc/sysctl.conf 中添加内存优化参数
# 虚拟内存区域最大数量
vm.max_map_count = 262144
# 内存过度分配策略(0: 禁止过度分配, 1: 轻度, 2: 重度)
vm.overcommit_memory = 1
# 过度分配内存的百分比
vm.overcommit_ratio = 80
# 系统内存不足时的处理策略
vm.panic_on_oom = 0
# OOM killer 优先级调整(-1000 到 1000,越低越不容易被杀死)
vm.oom_kill_allocating_task = 1
# 交换分区使用策略
vm.swappiness = 10 # 降低交换倾向,值越小越倾向于使用物理内存
# 内存回收策略
vm.vfs_cache_pressure = 100 # 文件系统缓存回收倾向
# 内存页合并(KSM)
vm.ksm.run = 1
vm.ksm.sleep_millisecs = 20
2.1.3 磁盘 I/O 优化
# 在 /etc/sysctl.conf 中添加磁盘 I/O 优化参数
# 虚拟内存脏页比例阈值(百分比)
vm.dirty_ratio = 15
# 系统后台刷写脏页的比例(百分比)
vm.dirty_background_ratio = 5
# 脏页刷写时间阈值(秒)
vm.dirty_writeback_centisecs = 500
# 脏页过期时间(秒)
vm.dirty_expire_centisecs = 3000
# I/O 调度器队列深度
vm.nr_requests = 65536
# 增加 I/O 调度器队列数量
vm.scheduler_max_batch = 16
2.2 应用内核参数
修改完成后,应用这些参数:
# 立即应用参数(无需重启)
sudo sysctl -p
# 验证参数是否生效
sysctl net.core.somaxconn
sysctl vm.swappiness
2.3 内核参数调优案例
案例:高并发 Web 服务器优化
假设你有一台运行 Nginx 的 AlmaLinux 服务器,需要处理每秒 10,000+ 的并发连接:
# 针对高并发 Web 服务器的完整 sysctl 配置
cat >> /etc/sysctl.conf << 'EOF'
# 高并发 Web 服务器优化配置
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65536
net.ipv4.tcp_max_syn_backlog = 65535
# TCP 缓冲区优化
net.ipv4.tcp_rmem = 4096 87380 67108864
net.ipv4.tcp_wmem = 4096 65536 67108864
# TIME_WAIT 优化
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 15
# 文件系统限制
fs.file-max = 2097152
fs.nr_open = 2097152
# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5
# 端口范围
net.ipv4.ip_local_port_range = 1024 65535
EOF
# 应用配置
sudo sysctl -p
三、文件系统优化
3.1 文件系统选择与挂载选项
不同的文件系统有不同的性能特性。对于 AlmaLinux,推荐使用 XFS 或 ext4。
3.1.1 XFS 文件系统优化
# 创建 XFS 文件系统(如果需要重新格式化)
sudo mkfs.xfs -f /dev/sdX
# 查看 XFS 文件系统参数
xfs_info /dev/sdX
# 调整 XFS 参数
sudo xfs_admin -u /dev/sdX # 查看 UUID
sudo xfs_admin -L "my_data" /dev/sdX # 设置标签
# 优化挂载选项
# 编辑 /etc/fstab
sudo vi /etc/fstab
# 添加优化的挂载选项
/dev/sdb1 /data xfs defaults,noatime,nodiratime,logbufs=8,logbsize=256k 0 0
XFS 挂载选项详解:
noatime:不更新文件访问时间,减少磁盘写入nodiratime:不更新目录访问时间logbufs=8:增加日志缓冲区数量logbsize=256k:设置日志缓冲区大小allocsize=64m:预分配大小优化
3.1.2 ext4 文件系统优化
# 创建 ext4 文件系统
sudo mkfs.ext4 -E lazy_itable_init=1,lazy_journal_init=1 /dev/sdX
# 优化挂载选项
# 编辑 /etc/fstab
sudo vi /etc/fstab
# 添加优化的挂载选项
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,data=writeback,barrier=0 0 0
ext4 挂载选项详解:
noatime:不更新访问时间data=writeback:写回模式,提高写入性能(但可能降低数据安全性)barrier=0:禁用写入屏障(仅在 UPS 电源保护下使用)delalloc:延迟分配,减少碎片commit=60:每60秒提交一次事务(默认30秒)
3.2 I/O 调度器优化
I/O 调度器决定了磁盘请求的处理顺序,对性能有重要影响。
# 查看当前 I/O 调度器
cat /sys/block/sda/queue/scheduler
# 临时修改 I/O 调度器
echo deadline > /sys/block/sda/queue/scheduler
# 永久修改 I/O 调度器(创建 udev 规则)
sudo tee /etc/udev/rules.d/60-ioscheduler.rules << 'EOF'
# 为所有 SATA/SCSI 磁盘设置 deadline 调度器
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", ATTR{queue/scheduler}="deadline"
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="deadline"
EOF
# 重新加载 udev 规则
sudo udevadm control --reload-rules
sudo udevadm trigger
I/O 调度器选择指南:
- deadline:适合数据库和通用服务器,保证请求延迟
- cfq:适合桌面系统,公平分配 I/O 带宽
- noop:适合虚拟机和 SSD,无调度开销
- kyber:适合高速 SSD,现代调度器
- mq-deadline:多队列版本的 deadline
3.3 文件系统性能监控
# 监控文件系统性能
sudo apt-get install sysstat # 如果未安装
# 查看磁盘使用情况
df -h
# 查看 inode 使用情况
df -i
# 查看文件系统详细信息
tune2fs -l /dev/sda1 # ext4
xfs_info /dev/sda1 # xfs
# 监控文件系统事件
sudo inotifywait -m -r /data
四、内存管理与优化
4.1 内存使用分析
# 详细内存使用情况
cat /proc/meminfo
# 实时内存监控
vmstat 1 5
# 内存使用排名
ps aux --sort=-%mem | head -20
# 查看内存泄漏
sudo valgrind --leak-check=full ./your_application
4.2 透明大页(THP)优化
透明大页可以减少 TLB 压力,但对某些工作负载可能产生负面影响。
# 查看 THP 状态
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /sys/kernel/mm/transparent_hugepage/defrag
# 临时禁用 THP(推荐数据库服务器)
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久禁用 THP
sudo tee /etc/systemd/system/disable-thp.service << 'EOF'
[Unit]
Description=Disable Transparent Huge Pages
DefaultDependencies=no
After=sysinit.target local-fs.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/enabled'
ExecStart=/bin/sh -c 'echo never > /sys/kernel/mm/transparent_hugepage/defrag'
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now disable-thp.service
4.3 内存压缩与交换优化
# 启用内存压缩(zswap)
# 编辑 /etc/default/grub
sudo vi /etc/default/grub
# 在 GRUB_CMDLINE_LINUX 中添加
GRUB_CMDLINE_LINUX="... zswap.enabled=1 zswap.compressor=lz4"
# 更新 grub 并重启
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
# 调整交换分区策略
# 编辑 /etc/sysctl.conf
vm.swappiness = 10 # 降低交换倾向
vm.vfs_cache_pressure = 100 # 平衡缓存回收
# 创建交换文件(如果需要更多交换空间)
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久添加到 fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
4.4 应用内存限制
使用 cgroups 限制应用程序内存使用:
# 安装 cgroups 工具
sudo dnf install libcgroup-tools
# 创建内存限制组
sudo cgcreate -g memory:/limited
# 设置内存限制(512MB)
sudo cgset -r memory.max=512M limited
sudo cgset -r memory.swap.max=128M limited
# 在限制组中运行程序
sudo cgexec -g memory:limited your_application
# 创建 systemd 服务单元(自动应用限制)
sudo tee /etc/systemd/system/limited-app.service << 'EOF'
[Unit]
Description=Application with Memory Limit
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/your_application
MemoryMax=512M
MemorySwapMax=128M
Restart=always
[Install]
WantedBy=multi-user.target
EOF
五、CPU 性能优化
5.1 CPU 调控器设置
CPU 调控器决定了 CPU 频率的调整策略。
# 查看当前 CPU 调控器
cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 查看可用调控器
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_governors
# 临时设置调控器(performance 模式)
echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 永久设置调控器
# 安装 cpupower 工具
sudo dnf install kernel-tools
# 创建 systemd 服务
sudo tee /etc/systemd/system/cpu-performance.service << 'EOF'
[Unit]
Description=CPU Performance Governor
After=sysinit.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo performance > /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor'
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now cpu-performance.service
CPU 调控器类型:
- performance:始终运行在最高频率,适合服务器
- powersave:始终运行在最低频率,适合节能
- ondemand:根据负载动态调整,适合桌面
- conservative:保守的动态调整
- userspace:用户空间控制
5.2 中断亲和性优化
将特定中断分配给特定 CPU 核心,减少缓存失效。
# 查看中断分布
cat /proc/interrupts
# 查看特定中断的亲和性
cat /proc/irq/XX/smp_affinity
# 设置中断亲和性(以中断号 123 为例,分配到 CPU0)
echo 1 > /proc/irq/123/smp_affinity
# 设置网络中断亲和性
# 查看网络接口中断号
cat /proc/interrupts | grep eth0
# 将网络中断分配到 CPU2 和 CPU3
echo 4 > /proc/irq/123/smp_affinity # 二进制 0100,对应 CPU2
echo c > /proc/irq/124/smp_affinity # 二进制 1100,对应 CPU2 和 CPU3
# 创建自动化脚本
sudo tee /usr/local/bin/set_irq_affinity.sh << 'EOF'
#!/bin/bash
# 将网络中断分配到 CPU2-CPU3
for irq in $(cat /proc/interrupts | grep -E 'eth|ens' | awk '{print $1}' | sed 's/://'); do
echo c > /proc/irq/$irq/smp_affinity 2>/dev/null
done
EOF
sudo chmod +x /usr/local/bin/set_irq_affinity.sh
5.3 进程绑定(CPU 亲和性)
# 查看进程当前的 CPU 亲和性
taskset -p <PID>
# 设置进程的 CPU 亲和性(绑定到 CPU0 和 CPU1)
taskset -cp 0,1 <PID>
# 启动时指定 CPU 亲和性
taskset -c 0,1 your_application
# 使用 numactl 进行 NUMA 架构优化
# 查看 NUMA 拓扑
numactl --hardware
# 在特定 NUMA 节点上运行程序
numactl --cpunodebind=0 --membind=0 your_application
# 分配特定 CPU 核心
numactl --physcpubind=0,1,2 --membind=0 your_application
5.4 定时器与调度优化
# 调整内核定时器频率(降低功耗)
# 编辑 /etc/default/grub
GRUB_CMDLINE_LINUX="... timer_hz=100"
# 调整调度器参数
# 编辑 /etc/sysctl.conf
kernel.sched_migration_cost_ns = 500000
kernel.sched_wakeup_granularity_ns = 1500000
kernel.sched_autogroup_enabled = 0 # 禁用自动分组,适合专用服务器
六、网络性能优化
6.1 网络接口参数优化
# 查看网络接口信息
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 tee /etc/systemd/system/ethtool-optimize.service << 'EOF'
[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
EOF
sudo systemctl enable --now ethtool-optimize.service
6.2 TCP/IP 协议栈优化
除了 sysctl 参数,还可以使用更高级的优化:
# 启用 TCP BBR 拥塞控制算法(Google 开发,适合高带宽延迟积网络)
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
# 永久设置
echo 'net.ipv4.tcp_congestion_control=bbr' >> /etc/sysctl.conf
# 查看可用拥塞控制算法
sysctl net.ipv4.tcp_available_congestion_control
# 启用 TCP Fast Open
sudo sysctl -w net.ipv4.tcp_fastopen=3
echo 'net.ipv4.tcp_fastopen=3' >> /etc/sysctl.conf
# 调整 TCP 重传参数
sudo sysctl -w net.ipv4.tcp_retries2=3
sudo sysctl -w net.ipv4.tcp_slow_start_after_idle=0
6.3 网络连接跟踪优化
对于高连接数服务器,需要优化连接跟踪表:
# 查看当前连接跟踪数
cat /proc/sys/net/netfilter/nf_conntrack_count
# 查看最大连接跟踪数
cat /proc/sys/net/netfilter/nf_conntrack_max
# 增加连接跟踪表大小
sudo sysctl -w net.netfilter.nf_conntrack_max=2097152
sudo sysctl -w net.netfilter.nf_conntrack_buckets=2097152
# 永久设置
echo 'net.netfilter.nf_conntrack_max=2097152' >> /etc/sysctl.conf
echo 'net.netfilter.nf_conntrack_buckets=2097152' >> /etc/sysctl.conf
# 调整超时时间
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=7200
sudo sysctl -w net.netfilter.nf_conntrack_tcp_timeout_time_wait=30
6.4 网络性能监控工具
# 实时网络流量监控
sudo dnf install nload iftop
# 监控网络连接
iftop -i eth0 -P
# 监控网络接口流量
nload eth0
# 抓包分析
sudo tcpdump -i eth0 -w capture.pcap
# 分析 TCP 连接状态
ss -s
# 查看网络统计
netstat -s
七、存储系统优化
7.1 RAID 配置优化
# 查看 RAID 状态
cat /proc/mdstat
# 创建 RAID10(推荐用于性能和冗余)
sudo mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd[b-e]
# 优化 RAID 参数
sudo mdadm --grow /dev/md0 --bitmap=internal # 启用位图日志
sudo mdadm --grow /dev/md0 --chunk-size=512 # 设置块大小
# 监控 RAID 重建速度
cat /proc/sys/dev/raid/speed_limit_min
cat /proc/sys/dev/raid/speed_limit_max
# 调整重建速度
echo 50000 > /proc/sys/dev/raid/speed_limit_min
echo 200000 > /proc/sys/dev/raid/speed_limit_max
7.2 LVM 优化
# 查看 LVM 配置
sudo lvs
sudo vgs
sudo pvs
# 优化 LVM 策略
sudo tee /etc/lvm/lvm.conf << 'EOF'
devices {
# 启用 LVM 策略优化
filter = [ "a|sd.*|", "r|.*|" ]
sysfs_scan = 1
obtain_device_list_from_udev = 1
}
activation {
# 优化激活策略
udev_sync = 1
udev_rules = 1
verify_udev_pass = 0
}
EOF
# 调整 LVM 缓存
sudo lvchange --cachepolicy writethrough /dev/vg0/lv_data
7.3 SSD 优化
# 检查是否为 SSD
lsblk -d -o NAME,ROTA
# SSD 特定优化
# 禁用 discard(TRIM)在某些场景下可能影响性能
# 编辑 /etc/fstab
/dev/sdb1 /data ext4 defaults,noatime,nodiratime,discard 0 0
# 改为定期手动 TRIM
# 创建 systemd 定时器
sudo tee /etc/systemd/system/fstrim.timer << 'EOF'
[Unit]
Description=Weekly SSD TRIM
[Timer]
OnCalendar=weekly
Persistent=true
[Install]
WantedBy=timers.target
EOF
sudo tee /etc/systemd/system/fstrim.service << 'EOF'
[Unit]
Description=SSD TRIM
[Service]
Type=oneshot
ExecStart=/usr/sbin/fstrim -a
EOF
sudo systemctl enable fstrim.timer
八、应用程序级优化
8.1 数据库优化(以 MySQL/MariaDB 为例)
# 安装 MariaDB
sudo dnf install mariadb-server
sudo systemctl enable --now mariadb
# 优化配置 /etc/my.cnf.d/server.cnf
sudo tee /etc/my.cnf.d/server.cnf << 'EOF'
[mysqld]
# 内存优化
innodb_buffer_pool_size = 4G # 设置为总内存的 50-70%
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2 # 平衡性能和数据安全
# 连接优化
max_connections = 1000
max_connect_errors = 100000
thread_cache_size = 100
# 查询缓存(MySQL 8.0+ 已移除,MariaDB 仍可用)
query_cache_type = 1
query_cache_size = 128M
# I/O 优化
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_io_capacity = 2000
# 日志优化
slow_query_log = 1
slow_query_log_file = /var/log/mariadb/slow.log
long_query_time = 2
EOF
# 重启服务
sudo systemctl restart mariadb
8.2 Web 服务器优化(Nginx)
# 安装 Nginx
sudo dnf install nginx
sudo systemctl enable --now nginx
# 优化配置 /etc/nginx/nginx.conf
sudo tee /etc/nginx/nginx.conf << 'EOF'
user nginx;
worker_processes auto; # 自动设置为 CPU 核心数
worker_rlimit_nofile 65535; # 工作进程文件描述符限制
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 4096; # 每个工作进程的连接数
use epoll; # 使用 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;
# 性能优化
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
keepalive_requests 1000;
client_max_body_size 100M;
# 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=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
# 包含其他配置
include /etc/nginx/conf.d/*.conf;
}
EOF
# 测试配置并重启
sudo nginx -t
sudo systemctl restart nginx
8.3 应用程序性能分析工具
# 安装性能分析工具
sudo dnf install perf valgrind gdb
# 使用 perf 分析 CPU 性能
sudo perf top
# 分析特定进程
sudo perf record -p <PID> -g
sudo perf report
# 使用 valgrind 检测内存泄漏
valgrind --leak-check=full --show-leak-kinds=all ./your_app
# 使用 strace 跟踪系统调用
strace -c -p <PID>
# 使用 lsof 查看打开的文件
lsof -p <PID>
九、系统服务与启动优化
9.1 禁用不必要的服务
# 查看所有服务
systemctl list-unit-files --type=service
# 查看已启用的服务
systemctl list-unit-files --type=service --state=enabled
# 禁用不必要的服务(示例)
sudo systemctl disable bluetooth
sudo systemctl disable cups
sudo systemctl disable avahi-daemon
sudo systemctl disable ModemManager
# 查看服务依赖关系
systemctl list-dependencies sshd.service
# 查看服务资源使用
systemd-cgtop
systemd-analyze blame # 查看启动时间
systemd-analyze critical-chain # 查看关键链
9.2 优化 systemd 服务
# 创建优化的服务单元示例
sudo tee /etc/systemd/system/optimized-app.service << 'EOF'
[Unit]
Description=Optimized Application Service
After=network.target
Wants=network.target
[Service]
# 资源限制
LimitNOFILE=65535
LimitNPROC=65535
MemoryMax=2G
CPUQuota=200% # 允许使用 2 个 CPU 核心
# 安全优化
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/var/log/myapp /data
# 性能优化
Type=simple
ExecStart=/usr/local/bin/myapp
Restart=always
RestartSec=5
# 进程优先级
Nice=-5
CPUSchedulingPolicy=rr
CPUSchedulingPriority=50
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable optimized-app.service
9.3 启动过程优化
# 分析启动时间
systemd-analyze time
systemd-analyze blame
systemd-analyze critical-chain
# 优化内核启动参数
sudo vi /etc/default/grub
# 添加以下参数到 GRUB_CMDLINE_LINUX
GRUB_CMDLINE_LINUX="... systemd.log_level=3 systemd.log_target=journal console=ttyS0,115200"
# 更新 grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# 预加载常用库
sudo tee /etc/ld.so.preload << 'EOF'
/lib64/libc.so.6
/lib64/libpthread.so.0
EOF
十、监控与持续优化
10.1 搭建监控系统
# 安装 Prometheus + Grafana(推荐)
# 安装 Prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /etc/prometheus /var/lib/prometheus
# 下载 Prometheus
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.37.0/prometheus-2.37.0.linux-amd64.tar.gz
tar xvf prometheus-2.37.0.linux-amd64.tar.gz
sudo cp prometheus-2.37.0.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-2.37.0.linux-amd64/promtool /usr/local/bin/
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
# 配置 Prometheus
sudo tee /etc/prometheus/prometheus.yml << 'EOF'
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']
EOF
# 安装 Node Exporter(系统指标采集)
wget https://github.com/prometheus/node_exporter/releases/download/v1.5.0/node_exporter-1.5.0.linux-amd64.tar.gz
tar xvf node_exporter-1.5.0.linux-amd64.tar.gz
sudo cp node_exporter-1.5.0.linux-amd64/node_exporter /usr/local/bin/
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
# 创建 systemd 服务
sudo tee /etc/systemd/system/node_exporter.service << 'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
User=node_exporter
ExecStart=/usr/local/bin/node_exporter
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
sudo systemctl enable --now prometheus
10.2 自动化优化脚本
#!/bin/bash
# /usr/local/bin/system-optimizer.sh
set -e
LOG_FILE="/var/log/system-optimizer.log"
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE
}
# 检查是否为 root
if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root"
exit 1
fi
log "Starting system optimization..."
# 1. 应用 sysctl 优化
log "Applying sysctl optimizations..."
cat >> /etc/sysctl.conf << 'SYSCTL_EOF'
# Auto-optimized settings
net.core.somaxconn = 65535
net.ipv4.tcp_tw_reuse = 1
vm.swappiness = 10
fs.file-max = 2097152
SYSCTL_EOF
sysctl -p
# 2. 优化文件描述符限制
log "Optimizing file descriptors..."
cat >> /etc/security/limits.conf << 'LIMITS_EOF'
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
LIMITS_EOF
# 3. 禁用不必要的服务
log "Disabling unnecessary services..."
services_to_disable=("bluetooth" "cups" "avahi-daemon")
for service in "${services_to_disable[@]}"; do
if systemctl is-enabled $service &>/dev/null; then
systemctl disable $service
log "Disabled $service"
fi
done
# 4. 设置 CPU 调控器
log "Setting CPU governor to performance..."
echo performance | tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor
# 5. 优化内核参数
log "Optimizing kernel parameters..."
echo 1 > /proc/sys/kernel/numa_balancing 2>/dev/null || true
log "Optimization complete! Please reboot for all changes to take effect."
十一、高级优化技巧
11.1 使用 eBPF 进行性能分析
# 安装 bpftrace
sudo dnf install bpftrace
# 跟踪系统调用延迟
sudo bpftrace -e 'tracepoint:raw_syscalls:sys_enter { @start[tid] = nsecs; }
tracepoint:raw_syscalls:sys_exit /@start[tid]/ { @latency = hist(nsecs - @start[tid]); delete(@start[tid]); }'
# 监控文件系统操作
sudo bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args->filename)); }'
11.2 内核模块参数优化
# 查看已加载模块参数
modinfo <module_name>
# 临时修改模块参数
sudo modprobe <module_name> parameter=value
# 永久修改模块参数
sudo tee /etc/modprobe.d/<module_name>.conf << 'EOF'
options <module_name> parameter=value
EOF
# 重新加载模块
sudo modprobe -r <module_name>
sudo modprobe <module_name>
11.3 使用 tuned 进行自动化调优
# 安装 tuned
sudo dnf install tuned
# 查看可用配置文件
tuned-adm list
# 应用优化配置
sudo tuned-adm profile throughput-performance # 高吞吐量
# 或
sudo tuned-adm profile latency-performance # 低延迟
# 创建自定义配置
sudo mkdir -p /etc/tuned/custom-profile
sudo tee /etc/tuned/custom-profile/tuned.conf << 'EOF'
[main]
include=throughput-performance
[sysctl]
net.core.somaxconn=65535
vm.swappiness=10
[cpu]
governor=performance
EOF
sudo tuned-adm profile custom-profile
十二、性能优化最佳实践
12.1 优化原则
- 测量优先:在优化前先测量当前性能
- 渐进式调整:一次只修改一个参数,观察效果
- 备份配置:修改前备份原始配置
- 文档记录:记录所有修改和效果
- 测试验证:在生产环境应用前充分测试
12.2 常见性能瓶颈及解决方案
| 瓶颈类型 | 症状 | 解决方案 |
|---|---|---|
| CPU 瓶颈 | 高 CPU 使用率,负载高 | 优化算法,增加核心数,调整调度器 |
| 内存瓶颈 | 频繁交换,OOM | 增加内存,优化应用内存使用,调整 swappiness |
| 磁盘 I/O 瓶颈 | 高 iowait,响应慢 | 使用 SSD,优化文件系统,调整 I/O 调度器 |
| 网络瓶颈 | 高延迟,丢包 | 优化网络参数,增加带宽,使用 BBR |
12.3 性能优化检查清单
#!/bin/bash
# 性能优化检查清单
echo "=== AlmaLinux 性能优化检查清单 ==="
# 1. 系统信息
echo -e "\n[1] 系统信息:"
echo "OS: $(cat /etc/redhat-release)"
echo "Kernel: $(uname -r)"
echo "CPU: $(grep -c ^processor /proc/cpuinfo) cores"
echo "Memory: $(free -h | awk '/^Mem:/ {print $2}')"
# 2. 当前负载
echo -e "\n[2] 当前负载:"
uptime
echo "Memory Usage: $(free | grep Mem | awk '{printf("%.1f%%", $3/$2 * 100.0)}')"
# 3. 检查关键优化参数
echo -e "\n[3] 关键参数检查:"
echo "somaxconn: $(sysctl -n net.core.somaxconn)"
echo "tcp_tw_reuse: $(sysctl -n net.ipv4.tcp_tw_reuse)"
echo "swappiness: $(sysctl -n vm.swappiness)"
echo "file-max: $(sysctl -n fs.file-max)"
# 4. 检查文件系统
echo -e "\n[4] 文件系统:"
df -h | grep -v tmpfs
echo "I/O Scheduler: $(cat /sys/block/sda/queue/scheduler 2>/dev/null | grep -o '\[.*\]')"
# 5. 检查运行的服务
echo -e "\n[5] 运行的服务:"
systemctl list-units --type=service --state=running | grep -c "\.service"
# 6. 检查网络连接
echo -e "\n[6] 网络连接:"
ss -s | grep -E "estab|timewait"
# 7. 检查文件描述符使用
echo -e "\n[7] 文件描述符:"
echo "System Max: $(cat /proc/sys/fs/file-max)"
echo "Current Usage: $(lsof | wc -l)"
echo -e "\n=== 检查完成 ==="
十三、总结
AlmaLinux 性能优化是一个系统工程,需要从多个层面综合考虑。通过本文介绍的策略,您可以:
- 系统评估:准确识别性能瓶颈
- 内核调优:优化系统核心参数
- 资源管理:高效利用 CPU、内存、磁盘和网络
- 应用优化:针对特定应用进行深度调优
- 持续监控:建立长效的性能监控机制
记住,优化是一个持续的过程。建议定期审查系统性能,根据业务变化调整优化策略。同时,保持系统更新,及时应用 AlmaLinux 官方的安全和性能补丁。
关键要点回顾:
- 始终从测量开始,避免盲目优化
- 一次只调整一个参数,便于效果评估
- 建立完整的监控体系,实现数据驱动的优化
- 保持配置文档化,便于维护和回滚
- 在生产环境应用前,务必在测试环境验证
通过这些优化策略,您的 AlmaLinux 系统将能够更好地应对高负载场景,提供更稳定、更高效的服务。
