当前位置:首页>Linux>运维老鸟打死不说的10个Linux性能排查命令最后一个直接封神

运维老鸟打死不说的10个Linux性能排查命令最后一个直接封神

  • 2026-10-11 08:17:10
运维老鸟打死不说的10个Linux性能排查命令最后一个直接封神

运维老鸟打死不说的10个Linux性能排查命令

最后一个直接封神,90%的人都没用过

核心看点

CPU飙到100%怎么一秒定位?内存泄漏如何快速揪出?磁盘IO打满是谁在搞鬼?

本文整理了10个运维老兵压箱底的性能排查命令,从入门到精通,手把手教你成为排障高手。

一、top / htop — 系统健康的体温计

任何性能问题排查的第一步,永远是看整体。top 是 Linux 自带的进程监控工具,而 htop 是其增强版,界面更友好。

$ top -c

# -c 显示完整命令行,一眼看出是哪个进程在作妖

关键指标
含义
告警阈值
load average
1/5/15分钟平均负载
超过CPU核数即告警
us (user)
用户态CPU占用
持续 >70% 需关注
sy (system)
内核态CPU占用
持续 >30% 异常
wa (iowait)
等待IO的CPU时间
持续 >10% 磁盘瓶颈

实战技巧:按1展开所有CPU核心,按P按CPU排序,按M按内存排序,按c显示完整命令。

二、vmstat — 虚拟内存的透视镜

vmstat 能同时展示CPU、内存、IO和系统整体状态,是性能排查的瑞士军刀。

$ vmstat 1 10

# 每秒采样一次,共10次,实时观察系统波动

列名
含义
异常信号
r
运行队列长度
>CPU核数说明CPU瓶颈
b
阻塞进程数
持续 >0 说明IO瓶颈
si / so
换入/换出
持续 >0 内存不足
bi / bo
块设备读写
突然飙升需排查

实战技巧:如果r列持续高于CPU核数,同时us+sy接近100%,那就是纯CPU瓶颈;如果b列持续大于0且wa高,那就是IO瓶颈。

三、iostat — 磁盘IO的CT扫描仪

磁盘是服务器最慢的组件,IO问题往往是最隐蔽的性能杀手。iostat 让你对磁盘了如指掌。

$ iostat -x 1

# -x 显示扩展统计,1 表示每秒刷新

指标
含义
危险值
%util
磁盘繁忙度
>80% 严重瓶颈
await
平均IO等待时间(ms)
>20ms 机械盘告警
svctm
平均IO服务时间(ms)
>10ms 需关注
r/s w/s
每秒读写次数
SSD >10000 需关注

四、ss — 网络连接的显微镜

ss 是 netstat 的现代替代品,速度更快、信息更全。网络问题排查的第一利器。

$ ss -tunlp

# 查看所有TCP/UDP监听端口及对应进程

$ ss -s

# 汇总统计,一眼看出连接数是否异常

$ ss -tan state time-wait | wc -l

# 统计TIME_WAIT连接数,过多说明短连接频繁

实战技巧:如果TIME_WAIT连接数超过1万,说明你的服务在疯狂建立短连接,赶紧改成连接池或长连接。

五、sar — 系统活动的黑匣子

sar 是 sysstat 包中的王牌工具,能回溯历史数据。出问题时如果没开监控,sar 就是你的救命稻草。

$ sar -u -f /var/log/sa/sa26

# 查看26号当天的CPU历史数据

$ sar -n DEV 1 5

# 实时查看每块网卡的流量,定位网络瓶颈

$ sar -r 1 10

# 实时内存使用情况,关注 kbmemfree 和 kbbuffers

六、strace — 进程行为的追踪器

当所有常规手段都用过了还是找不到问题,strace 就是你的终极武器。它能追踪进程的每一个系统调用。

$ strace -p 12345 -c

# 附加到进程12345,-c 统计各系统调用耗时

$ strace -e trace=network -p 12345

# 只看网络相关的系统调用,过滤噪音

$ strace -T -e trace=read,write -p 12345

# -T 显示每个调用的耗时,定位慢IO操作

注意:strace 对性能有较大影响,生产环境谨慎使用,建议先在测试环境复现。

七、lsof — 打开文件的清单

在Linux中一切皆文件。lsof 能列出进程打开的所有文件、socket、管道,是排查资源泄漏的神器。

$ lsof -p 12345 | wc -l

# 查看进程打开了多少文件,判断是否有fd泄漏

$ lsof -i :8080

# 查看哪个进程占用了8080端口

$ lsof /var/log/nginx/access.log

# 查看哪些进程正在写这个日志文件

八、perf — 性能剖析的手术刀

perf 是 Linux 内核自带的性能分析工具,能深入到函数级别告诉你CPU到底在忙什么。

$ perf top -p 12345

# 实时查看进程12345的热点函数,类似top但精确到函数

$ perf record -p 12345 -g -- sleep 30

# 采样30秒,-g 记录调用栈

$ perf report

# 生成火焰图数据,直观展示CPU热点

九、tcpdump — 网络数据包的照相机

当怀疑是网络层面的问题时,tcpdump 能帮你抓到每一个数据包,还原真相。

$ tcpdump -i eth0 port 8080 -nn -A

# 抓取8080端口的包,-A 以ASCII显示内容

$ tcpdump -i eth0 host 10.0.0.5 -w dump.pcap

# 抓取与10.0.0.5通信的所有包,保存为pcap文件

$ tcpdump -i eth0 'tcp[tcpflags] & (tcp-rst) != 0'

# 只抓RST包,快速定位连接被拒绝的问题

十、bpftrace — 直接封神的内核可观测工具

如果说前面9个是常规武器,那 bpftrace 就是核武器。它基于 eBPF 技术,能在不修改内核、不影响性能的前提下,动态追踪内核和用户态的每一个角落。

为什么 bpftrace 是神?

1. 零侵入:不需要修改代码、不需要重启服务

2. 高性能:eBPF在内核态执行,开销极低

3. 全覆盖:从系统调用到网络包,无所不能

4. 安全:eBPF验证器保证不会把内核搞崩

经典一行命令

$bpftrace -e 'kprobe:vfs_read { @start[tid] = nsecs; } kretprobe:vfs_read /@start[tid]/ { @us = hist((nsecs - @start[tid]) / 1000); delete(@start[tid]); }'

# 统计所有vfs_read调用的耗时分布,单位微秒

$ bpftrace -e 'tracepoint:syscalls:sys_enter_openat { printf("%s %s\n", comm, str(args->filename)); }'

# 实时打印系统中所有进程打开的文件

$ bpftrace -e 'kprobe:tcp_retransmit_skb { printf("retransmit from %s\n", comm); }'

# 捕获所有TCP重传事件,一秒定位网络丢包

$ bpftrace -e 'kprobe:do_sys_open { @opens[comm] = count(); }'

# 统计哪个进程在疯狂打开文件,揪出fd泄漏元凶

实战案例:一次完整的性能排查流程

假设你接到告警:线上服务响应时间从50ms飙升到2000ms。按以下流程排查:

步骤
命令
目的
Step 1
top -c
确认CPU/内存是否异常
Step 2
vmstat 1
看r/b列判断CPU还是IO瓶颈
Step 3
iostat -x 1
确认磁盘IO是否打满
Step 4
ss -s
检查连接数是否异常
Step 5
sar -n DEV 1
检查网络流量是否打满
Step 6
perf top -p $PID
定位热点函数
Step 7
strace -p $PID -c
看系统调用耗时分布
Step 8
bpftrace ...
终极武器,精准定位

排障思维比工具更重要

工具是死的,思维是活的。记住性能排查的黄金法则:

USE法则:Utilization(使用率)+ Saturation(饱和度)+ Errors(错误数),对每个资源都检查这三个维度。

RED法则:Rate(请求速率)+ Errors(错误率)+ Duration(耗时),从服务角度衡量健康度。

黄金信号:延迟(Latency)、流量(Traffic)、错误(Errors)、饱和度(Saturation),Google SRE的四大黄金信号。

把这10个命令练熟,下次服务器出问题,你就是团队里那个最靓的仔。

原创 · 公众号「IT信息化」

觉得有用?转发给身边的运维兄弟

点赞 · 收藏 · 转发

最新文章

随机文章