Linux 性能调优:CPU、内存和 I/O 瓶颈排查指南

Raj Kumar | 2026-08-27T20:54:56 | DevOps

使用 top、vmstat、iostat、perf 等工具系统排查 Linux 服务器性能瓶颈,附真实故障排查案例。

# Linux 性能调优:CPU、内存和 I/O 瓶颈排查指南 ## 一、整体概览:top 和 htop ```bash # 按 CPU 使用率排序 top -o %CPU # 关键指标解读 # load average: 1.5, 1.2, 0.8 # 1分钟/5分钟/15分钟负载,一般不超过 CPU 核数 # us: 用户态 CPU, sy: 内核态, wa: I/O 等待, id: 空闲 ``` ## 二、CPU 瓶颈排查 ```bash # 查看每核 CPU 使用率 mpstat -P ALL 1 5 # 查看进程的线程级 CPU 消耗 pidstat -t -p 1 # 使用 perf 分析热点函数 perf top -p perf record -p -g -- sleep 30 perf report ``` ### 案例:Java 应用 CPU 100% ```bash # 1. 找到 CPU 最高的线程 top -Hp # 假设线程 ID 为 12345 # 2. 转为十六进制 printf "%x\n" 12345 # 输出: 3039 # 3. 在 jstack 中搜索 jstack | grep "0x3039" -A 20 # 找到具体的代码堆栈 ``` ## 三、内存瓶颈排查 ```bash # 内存整体使用 free -h # total used free buff/cache available # 16G 8G 1G 7G 7.5G # available 才是实际可用内存 # 每秒内存变化 vmstat 1 10 # si/so: swap in/out,如果非零说明内存不足 # 查看进程内存详情 pmap -x | sort -k3 -n -r | head -20 # 查看 OOM killer 记录 dmesg | grep -i "out of memory" ``` ## 四、I/O 瓶颈排查 ```bash # 磁盘 I/O 统计 iostat -xz 1 5 # 关注指标: # %util: 磁盘繁忙度,>80% 表示瓶颈 # await: 平均 I/O 等待时间(毫秒) # r/s, w/s: 每秒读写次数 # 找出 I/O 最高的进程 iotop -oa # 查看文件系统缓存命中率 cat /proc/meminfo | grep -E "Cached|Buffers" ``` ## 五、网络瓶颈排查 ```bash # 网络连接状态统计 ss -s # 或者 ss -tnp | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn # 每秒网络流量 sar -n DEV 1 5 # 查看 TCP 重传率 netstat -s | grep -i retrans # 重传率 >1% 说明网络质量差 ``` ## 六、一键巡检脚本 ```bash #!/bin/bash echo "=== CPU ===" uptime mpstat 1 1 echo "=== Memory ===" free -h echo "=== Disk I/O ===" iostat -xz 1 1 echo "=== Network ===" ss -s echo "=== Top Processes ===" ps aux --sort=-%cpu | head -10 ``` ## 性能工具速查 | 问题 | 首选工具 | 备选 | |------|---------|------| | CPU 高 | top, perf | pidstat | | 内存不足 | free, vmstat | pmap | | 磁盘慢 | iostat, iotop | blktrace | | 网络问题 | ss, sar | tcpdump |

← Back to Blog