Linux 性能调优全指南:CPU、内存、IO、网络瓶颈的诊断与优化实战
在使用 Linux 作为服务器系统时,不可避免会遇到各种性能瓶颈:CPU 飙高、内存吃满、磁盘 IO 阻塞、网络延迟升高等。很多开发者遇到问题时只会重启服务或服务器,但真正的根因往往隐藏在系统内部的资源调度和子系统行为中。

本文将带你系统掌握 Linux 性能调优的核心方法,包括:
CPU 性能分析与调优
内存泄漏、OOM 的排查思路
IO 瓶颈定位
网络性能调优
工具链实战:top、htop、iotop、pidstat、dstat、sar、perf
实际案例:一次线上 Redis 访问超时排查
本文极适合开发者、运维、SRE、站长阅读收藏。
一、Linux 性能调优的核心思维
在深入工具和命令前,我们先明确性能问题的根因判断流程。
1. 性能问题必定属于以下四类之一:
CPU 不够
内存不够
IO 跑满
网络堵塞
你遇到的所有“变慢”“卡顿”“超时”,都可以归类到上面四类。
二、CPU 性能调优
CPU 问题通常表现为:
load average 突增
top 中某些进程占用过高
某些线程使用单核跑满
上游服务响应变慢
1. 判断 CPU 是否真的繁忙
top -H
按 1 查看各 CPU 核心利用率。
若只看到一个核心 100%,其他核心空闲,则:
结论:你的程序是单线程瓶颈,不是服务器 CPU 不够。
2. 定位高 CPU 进程
ps aux --sort=-%cpu | head
找出哪个 PID 异常。
3. 用 pidstat 查看进程每秒 CPU 消耗
pidstat -u -p <pid> 1
看是否存在周期性 CPU 峰值。
4. 排查内核态 CPU(sy)过高
如果 top 的 CPU 显示:
sy(系统态)很高us(用户态)很低
说明 CPU 不忙在应用,而忙在内核。
常见原因:
频繁系统调用(syscall)
大量 IO 等待
短连接风暴导致内核处理 TCP
可通过:
strace -p <pid>
查看程序在疯狂调用哪个系统调用(常见是 read/write/accept)。
三、内存性能调优(重点)
Linux 的内存管理机制非常复杂,不懂原理很容易误判。
1. free -h 为什么看起来“内存被吃光了”?
free -h
你会看到:
used 很大
free 很小
buffer/cache 占很大
很多初学者误以为“服务器内存被吃光了”,但其实 Linux 会尽量把内存用于 Cache,以提升 IO 性能。
重点:真正可用内存是 available,而不是 free。
2. 定位内存泄漏
top -o %MEM
找出占用最高的进程。
进一步查看该进程的详细内存构成:
pmap <pid> | sort -k2 -n | tail
若 RSS(实际常驻内存)持续增长 → 真泄漏。
3. 显示进程每秒内存变化
pidstat -r -p <pid> 1
如果不断增加,就是泄漏。
4. OOM-Killer 分析
如果系统爆内存,Linux 会启动 OOM killer 杀掉“最占内存的进程”。日志查看:
dmesg | grep -i oom
你会看到类似:
Out of memory: Killed process 19324 (java)
这表示 Java 被操作系统强杀。
四、磁盘 IO 性能调优
磁盘 IO 是大型服务最常见瓶颈之一。
主要看三个指标:
iowait(CPU 等待 IO)
io util(百分比)
await(IO 请求耗时)
1. 查看 IO 总览
iostat -x 1
关注:
%util> 90% = 磁盘忙炸了await很高 = IO 延迟巨大
2. 查看哪个进程 IO 占用最高
iotop
可实时看到进程的读写量。
3. 所有 IO 指标一屏展示
dstat -cdlmnpsy
非常适合定位综合问题。
如果你看到 load average 很高,但 CPU 使用率不高,iowait 却很高:
结论:瓶颈是磁盘 IO,而不是 CPU。
五、网络性能调优
网络瓶颈通常表现为:
请求延迟增大
SYN backlog 满
TIME_WAIT 暴增
qps 上不去
1. 查看链接数与状态
ss -tan | awk '{print $1}' | sort | uniq -c
可看到:
ESTAB 数量
TIME_WAIT 是否过高
CLOSE_WAIT 是否泄漏
大量 CLOSE_WAIT = 应用未正确关闭 socket。
大量 TIME_WAIT = 短连接问题,可调优内核参数。
2. 查看网卡丢包
ethtool -S eth0
关注:
rx_drop
tx_drop
errors
升高说明网络层异常。
3. 网络优化的关键参数(/etc/sysctl.conf)
例如:
net.core.somaxconn = 1024
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
根据业务场景调优,改后重载:
sysctl -p
六、Linux 性能分析工具体系(必备)
以下工具建议全部掌握:
七、真实案例:一次 Redis 响应变慢的排查过程
这是一次真实线上事故(经过脱敏处理)。
1. 现象
Redis 获取请求偶发超过 200ms
应用无明显 CPU 占用
Redis CPU 也不高
2. 排查步骤
① 查看 IO 情况
iostat -x 1
发现:
%util: 100%
await: 150ms
磁盘 IO 延迟异常。
② 找出 IO 大户
iotop -ao
结果指向某个后端日志服务疯狂写日志,写入速度达到百 MB/s。
③ 定位日志路径在同一磁盘
Redis 数据文件与该日志共享同一个磁盘。
④ 解决方案
将日志目录迁移到另一块 SSD
给 Redis 单独分配高速 NVMe
恢复正常。
总结:Redis 慢不是 Redis 的错,而是磁盘被挤爆了。
八、总结
Linux 性能优化并不是记住命令,而是掌握系统思维。
性能问题都可以归为四类:
CPU 瓶颈
内存瓶颈
磁盘 IO 瓶颈
网络瓶颈
而性能分析工具则帮助你:
找问题
定位问题
量化影响
验证优化有效性
如果你能掌握本文的所有内容,那么你的 Linux 运维能力已经超过大多数中小团队开发者。