Linux 系统性能调优
概述
在日常运维和架构优化中,Linux 性能调优是提高系统稳定性和运行效率的重要手段。本文结合工作经验,总结了 Linux 服务器常见的优化技巧,涵盖 CPU、内存、磁盘 I/O、网络等多个方面,帮助大家在不同场景下快速定位和优化系统性能瓶颈。
目录
概述
一、CPU 调优
1.1 监控 CPU 负载
1.2 调整 CPU 运行模式
1.3 限制进程 CPU 使用
二、内存优化
2.1 监控内存使用情况
2.2 关闭不必要的服务
2.3 禁用或调整 swap
2.4 增加内存分配限制
三、磁盘 I/O 优化
3.1 监控 I/O 负载
3.2 调整 I/O 调度算法
3.3 启用 TRIM(适用于 SSD)
3.4 增加文件系统缓存
四、网络优化
4.1 监控网络流量
4.2 调整 TCP 参数
4.3 调整连接追踪表大小
五、进程与文件句柄优化
5.1 增加最大文件描述符
5.2 调整最大进程数
5.3 限制 Zombie 进程
六、系统级别优化
6.1 禁用 SELinux(若无安全需求)
6.2 优化日志记录
6.3 关闭 IPv6(若不使用)
一、CPU 调优
1.1 监控 CPU 负载
使用 top
或 htop
观察 CPU 使用率:
top -d 1 # 每秒刷新一次
htop # 更直观的界面
关键指标:
- load average(系统平均负载):通常不应超过 CPU 核心数的 70%
- %us(用户态CPU占用):业务进程消耗
- %sy(内核态CPU占用):系统调用消耗
- %wa(IO等待):高 IO 可能是磁盘瓶颈
- %st(偷取时间):虚拟化环境中 CPU 被其他虚拟机占用
或者使用 mpstat
查看每个 CPU 核心的使用情况:
mpstat -P ALL 1
1.2 调整 CPU 运行模式
在高负载服务器上,建议调整 CPU 运行模式为 性能模式,提高响应速度:
cpupower frequency-set -g performance # 设置为性能模式
1.3 限制进程 CPU 使用
如果某些进程消耗过多 CPU,可使用 cpulimit
限制:
cpulimit -p <PID> -l 50 # 限制进程最多使用 50% CPU
或者用 taskset
绑定进程到特定 CPU 核心:
taskset -c 0,1 ./myapp # 绑定到 CPU 0 和 1
二、内存优化
2.1 监控内存使用情况
使用 free -m
或 vmstat
观察内存占用:
free -h # 查看内存使用
vmstat 1 # 监控 swap、cache
关键指标:
- available:可用内存,低于 20% 可能导致 OOM
- swap:如果 swap 使用率高,说明物理内存不足
- buffers/cache:缓存占比高说明文件 IO 频繁
2.2 关闭不必要的服务
使用 systemctl
禁用无关的系统服务:
systemctl disable --now avahi-daemon
systemctl disable --now cups
2.3 禁用或调整 swap
对于大部分生产环境,swap 过多使用会拖慢系统响应,可适当调整:默认 swappiness
值为 60,建议改为 10 或 0,以减少不必要的 Swap 交换:
sysctl vm.swappiness=10
echo "vm.swappiness=10" >> /etc/sysctl.conf
如果物理内存充足,也可以直接禁用:
swapoff -a
sed -i '/swap/d' /etc/fstab # 永久禁用
2.4 增加内存分配限制
调整 ulimit
限制,提高进程可用的最大文件描述符数:
ulimit -n 65535
echo "* - nofile 65535" >> /etc/security/limits.conf
三、磁盘 I/O 优化
3.1 监控 I/O 负载
使用 iostat
或 iotop
监测磁盘 I/O:
iostat -x 1
iotop
3.2 调整 I/O 调度算法
修改磁盘调度算法(适用于 SSD):
echo "none" > /sys/block/sda/queue/scheduler
持久化设置:
echo 'GRUB_CMDLINE_LINUX="elevator=none"' >> /etc/default/grub
update-grub && reboot
3.3 启用 TRIM(适用于 SSD)
定期手动清理未使用的块:
fstrim -v /
或者启用自动 TRIM:
systemctl enable fstrim.timer
3.4 增加文件系统缓存
提高 dirty_ratio
,减少磁盘写入:
sysctl -w vm.dirty_ratio=20
sysctl -w vm.dirty_background_ratio=5
持久化配置:
echo "vm.dirty_ratio=20" >> /etc/sysctl.conf
echo "vm.dirty_background_ratio=5" >> /etc/sysctl.conf
四、网络优化
4.1 监控网络流量
使用 iftop
或 nload
监控网络:
iftop -i eth0
nload
4.2 调整 TCP 参数
优化 TCP 连接,减少 TIME_WAIT
状态:
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_keepalive_time=600
sysctl -w net.core.somaxconn=65535
持久化配置:
echo "net.ipv4.tcp_tw_reuse=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_tw_recycle=1" >> /etc/sysctl.conf
echo "net.ipv4.tcp_fin_timeout=30" >> /etc/sysctl.conf
echo "net.ipv4.tcp_keepalive_time=600" >> /etc/sysctl.conf
echo "net.core.somaxconn=65535" >> /etc/sysctl.conf
sysctl -p
4.3 调整连接追踪表大小
增加 nf_conntrack
的最大连接数,防止大流量导致丢包:
sysctl -w net.netfilter.nf_conntrack_max=524288
echo "net.netfilter.nf_conntrack_max=524288" >> /etc/sysctl.conf
五、进程与文件句柄优化
5.1 增加最大文件描述符
查看当前限制:
ulimit -n
修改 /etc/security/limits.conf
:
* soft nofile 65535
* hard nofile 65535
5.2 调整最大进程数
修改 /etc/security/limits.conf
:
* soft nproc 65535
* hard nproc 65535
5.3 限制 Zombie 进程
减少 defunct
进程数量:
echo 1 > /proc/sys/kernel/pid_max
六、系统级别优化
6.1 禁用 SELinux(若无安全需求)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
6.2 优化日志记录
限制日志大小:
logrotate -f /etc/logrotate.conf
6.3 关闭 IPv6(若不使用)
echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf
sysctl -p
以上优化涵盖了 Linux 服务器的 CPU、内存、磁盘、网络等核心部分。实际工作中,优化应根据业务需求和硬件配置进行权衡。提升 Linux 服务器的性能和稳定性!