从入门到精通,掌握最全面的性能分析工具
今天,给大家分享整理50个最实用的性能分析命令,按场景分类,每个都有详细说明
📋 目录
一、系统整体性能(10个命令)
1. uptime - 系统负载快速查看
功能:查看系统运行时间和平均负载
语法:
输出解读:
负载判断:
负载 < CPU核数 → 正常
负载 = CPU核数×1.5 → 轻度负载
负载 = CPU核数×2 → 中度负载
负载 > CPU核数×2 → 重度负载(需要优化)
实战案例:
# 案例:8核CPU,负载16
$ uptime
load average: 16.2, 15.8, 14.5
# 分析:16 / 8 = 2,系统过载
# 需要:查看是哪些进程占用CPU
注意事项:
⚠️ 负载包括等待CPU和等待IO的进程
⚠️ 需要结合CPU使用率判断
⚠️ 短期负载高不一定有问题
2. top - 实时系统监控之王
功能:实时显示系统和进程信息
语法:
常用选项:
-d N:刷新间隔N秒
-p PID:只监控指定进程
-H:显示线程
-b:批处理模式
-n N:刷新N次后退出
交互式快捷键:
P:按CPU排序
M:按内存排序
T:按运行时间排序
k:杀死进程
r:调整nice值
1:显示每个CPU
输出解读:
实战案例:
# 案例1:找出CPU占用最高的进程
$ top
# 按P键,按CPU排序
# 找到占用95.3%的java进程
# 案例2:监控特定进程
$ top -p 1234
# 只显示PID为1234的进程
# 案例3:批处理模式(用于脚本)
$ top -b -n 1 > top.log
# 输出一次快照到文件
高级技巧:
# 显示完整命令行
$ top -c
# 显示线程而非进程
$ top -H
# 只显示特定用户的进程
$ top -u username
# 设置刷新间隔为2秒
$ top -d 2
3. htop - 增强版top
功能:更友好的交互式进程查看器
安装:
# CentOS/RHEL
yum install htop
# Ubuntu/Debian
apt install htop
语法:
常用选项:
-d N:刷新间隔
-u USER:只显示指定用户
-p PID:只显示指定进程
-t:树形显示
交互式快捷键:
F1:帮助
F2:设置
F3:搜索进程
F4:过滤
F5:树形显示
F6:排序
F9:杀死进程
F10:退出
优势对比:
htop vs top:
✓ 彩色界面,更直观
✓ 支持鼠标操作
✓ 显示所有CPU核心
✓ 树形显示进程关系
✓ 可以横向/纵向滚动
实战案例:
# 案例:树形显示进程
$ htop -t
# 可以看到父子进程关系
# 案例:只看某个用户的进程
$ htop -u mysql
# 只显示mysql用户的进程
4. atop - 全能性能监控
功能:记录和回放系统性能数据
安装:
yum install atop # CentOS
apt install atop # Ubuntu
语法:
常用选项:
-r FILE:读取历史数据
-w FILE:写入数据到文件
-a:显示活跃进程
-m:显示内存信息
-d:显示磁盘信息
-n:显示网络信息
交互式快捷键:
g:通用信息
m:内存信息
d:磁盘信息
n:网络信息
c:命令行
实战案例:
# 案例1:实时监控
$ atop 5
# 每5秒刷新一次
# 案例2:记录性能数据
$ atop -w /tmp/atop.log 601440
# 每60秒记录一次,记录1440次(24小时)
# 案例3:回放历史数据
$ atop -r /var/log/atop/atop_20240101
# 查看1月1日的性能数据
# 按t键前进,T键后退
# 案例4:查看昨天10点的性能
$ atop -r /var/log/atop/atop_20240101 -b 10:00 -e 11:00
5. glances - 一站式监控
功能:跨平台的系统监控工具
安装:
语法:
常用选项:
-t N:刷新间隔
-w:Web服务器模式
-s:服务器模式
-c HOST:客户端模式
--export:导出数据
交互式快捷键:
h:帮助
q:退出
a:自动排序
c:按CPU排序
m:按内存排序
d:显示/隐藏磁盘IO
n:显示/隐藏网络
实战案例:
# 案例1:基础监控
$ glances
# 案例2:Web界面
$ glances -w
# 浏览器访问 http://localhost:61208
# 案例3:远程监控
# 服务器端
$ glances -s
# 客户端
$ glances -c server_ip
# 案例4:导出到InfluxDB
$ glances --export influxdb
6. dstat - 综合资源统计
功能:实时显示系统资源统计
安装:
yum install dstat # CentOS
apt install dstat # Ubuntu
语法:
常用选项:
-c:CPU统计
-m:内存统计
-d:磁盘统计
-n:网络统计
-l:负载统计
-p:进程统计
--top-cpu:CPU占用最高的进程
--top-mem:内存占用最高的进程
--top-io:IO占用最高的进程
实战案例:
# 案例1:综合监控
$ dstat -cdnm 1
# CPU、磁盘、网络、内存,每秒刷新
# 案例2:找出IO最高的进程
$ dstat --top-io --top-cpu 1
# 案例3:详细网络统计
$ dstat -n --net-packets 1
# 案例4:输出到CSV
$ dstat -cdnm --output /tmp/dstat.csv 160
输出示例:
7. vmstat - 虚拟内存统计
功能:报告虚拟内存、进程、CPU活动
语法:
常用选项:
-a:显示活跃/非活跃内存
-s:显示内存统计
-d:显示磁盘统计
-p:显示分区统计
-S:单位(k/K/m/M)
输出解读:
字段说明:
procs:
r: 运行队列长度
b: 不可中断睡眠的进程数
memory:
swpd: 使用的swap
free: 空闲内存
buff: 缓冲区
cache: 缓存
swap:
si: 从磁盘换入内存
so: 从内存换出到磁盘
io:
bi: 从块设备读入
bo: 写出到块设备
system:
in: 每秒中断数
cs: 每秒上下文切换数
cpu:
us: 用户态时间
sy: 系统态时间
id: 空闲时间
wa: IO等待时间
st: 虚拟化偷取时间
实战案例:
# 案例1:判断系统瓶颈
$ vmstat 1 10
# r > CPU核数×2 → CPU瓶颈
# si/so 频繁 → 内存不足
# wa 高 → IO瓶颈
# cs 很高 → 上下文切换频繁
# 案例2:内存统计
$ vmstat -s
# 显示详细内存统计
# 案例3:磁盘统计
$ vmstat -d
# 显示磁盘读写统计
8. mpstat - 多处理器统计
功能:报告每个CPU的统计信息
语法:
常用选项:
-P ALL:显示所有CPU
-P 0,1:显示指定CPU
-I SUM:显示中断统计
-u:CPU使用率
实战案例:
负载不均衡诊断:
# 如果某个CPU使用率特别高
# 可能原因:
1. 进程绑定到特定CPU
2. 中断只在某个CPU处理
3. 单线程程序
# 解决方法:
# 调整进程CPU亲和性
taskset -cp 0-7 <pid>
# 调整网卡中断分布
echo 2 > /proc/irq/<irq>/smp_affinity
9. sar - 系统活动报告
功能:收集、报告和保存系统活动信息
语法:
常用选项:
-u:CPU使用率
-r:内存使用
-b:IO统计
-n DEV:网络统计
-q:队列长度和负载
-f FILE:读取历史数据
实战案例:
# 案例1:CPU使用率
$ sar -u 1 10
# 每秒显示一次,共10次
# 案例2:内存使用
$ sar -r 1 10
# 案例3:网络统计
$ sar -n DEV 1 10
# 显示网络设备统计
# 案例4:查看历史数据
$ sar -u -f /var/log/sa/sa01
# 查看1号的CPU使用历史
# 案例5:查看昨天10点到11点的数据
$ sar -u -s 10:00:00 -e 11:00:00 -f /var/log/sa/sa01
# 案例6:综合监控
$ sar -u -r -b -n DEV 1
# 同时显示CPU、内存、IO、网络
历史数据分析:
# sar数据默认保存在 /var/log/sa/
# sa01, sa02... 是二进制数据
# sar01, sar02... 是文本报告
# 查看本月所有数据
$ ls /var/log/sa/
# 生成报告
$ sar -A -f /var/log/sa/sa01 > report.txt
10. nmon - 性能监控
功能:AIX和Linux的性能监控工具
安装:
# 下载
wget http://sourceforge.net/projects/nmon/files/nmon_linux_x86_64
# 添加执行权限
chmod +x nmon_linux_x86_64
# 移动到PATH
mv nmon_linux_x86_64 /usr/local/bin/nmon
语法:
交互式快捷键:
c:CPU统计
m:内存统计
d:磁盘统计
n:网络统计
t:进程统计
V:虚拟内存
k:内核统计
r:资源统计
h:帮助
q:退出
实战案例:
# 案例1:交互式监控
$ nmon
# 按c显示CPU,按m显示内存
# 案例2:数据采集
$ nmon -f -s 60 -c 1440
# -f: 输出到文件
# -s 60: 每60秒采集一次
# -c 1440: 采集1440次(24小时)
# 案例3:分析nmon数据
# 使用nmon analyser工具(Excel)
# 或使用nmonchart生成HTML报告
二、CPU性能分析(10个命令)
11. perf - 性能分析之王
功能:Linux性能分析工具
安装:
yum install perf # CentOS
apt install linux-tools-common # Ubuntu
常用子命令:
perf top# 实时显示热点函数
perf record # 记录性能数据
perf report # 分析性能数据
perf stat # 统计性能事件
perf list # 列出所有事件
perf trace # 追踪系统调用
实战案例:
高级用法:
# 只记录用户态
$ perf record -e cycles:u -p 1234
# 只记录内核态
$ perf record -e cycles:k -p 1234
# 记录特定事件
$ perf record -e cache-misses -p 1234
# 记录所有CPU
$ perf record -a -g --sleep 10
12. pidstat - 进程统计
功能:报告进程的统计信息
语法:
常用选项:
-u:CPU统计(默认)
-r:内存统计
-d:IO统计
-w:上下文切换
-t:显示线程
-p PID:指定进程
-C COMM:指定命令名
实战案例:
字段说明:
%usr: 用户态CPU使用率
%system: 系统态CPU使用率
%wait: 等待CPU的时间
minflt/s: 次缺页错误(不需要IO)
majflt/s: 主缺页错误(需要IO)
VSZ: 虚拟内存大小
RSS: 物理内存大小
kB_rd/s: 每秒读取KB数
kB_wr/s: 每秒写入KB数
cswch/s: 自愿上下文切换(主动让出CPU)
nvcswch/s: 非自愿上下文切换(被抢占)
13. time - 程序计时
功能:测量程序执行时间
语法:
time command
/usr/bin/time [选项] command
常用选项:
-v:详细输出
-o FILE:输出到文件
-a:追加到文件
-f FORMAT:自定义格式
实战案例:
格式化选项:
%E: 实际时间(h:mm:ss)
%U: 用户态时间
%S: 系统态时间
%P: CPU使用率
%M: 最大内存(KB)
%K: 平均内存(KB)
%F: 主缺页错误
%R: 次缺页错误
%W: 上下文切换次数
14. taskset - CPU亲和性
功能:设置或查看进程的CPU亲和性
语法:
taskset [选项] mask command
taskset [选项] -p [mask] pid
常用选项:
-p:操作已存在的进程
-c:使用CPU列表而非掩码
-a:设置所有线程
实战案例:
使用场景:
1. 优化CPU缓存
- 将进程绑定到特定CPU
- 减少缓存失效
2. 隔离关键进程
- 将关键进程绑定到专用CPU
- 避免其他进程干扰
3. NUMA优化
- 将进程绑定到本地NUMA节点的CPU
- 减少跨节点内存访问
4. 性能测试
- 固定CPU,减少变量
- 获得稳定的测试结果
15. cpupower - CPU频率管理
功能:查看和设置CPU频率
安装:
yum install kernel-tools # CentOS
apt install linux-cpupower # Ubuntu
语法:
常用子命令:
frequency-info # 查看频率信息
frequency-set # 设置频率
idle-info # 查看idle状态
monitor # 监控频率
实战案例:
调频策略:
performance: 始终最高频率(性能优先)
powersave: 始终最低频率(省电优先)
ondemand: 根据负载动态调整(平衡)
conservative: 渐进式调整(平滑)
schedutil: 基于调度器的调整(推荐)
16. numactl - NUMA控制
功能:控制NUMA策略和CPU/内存亲和性
安装:
yum install numactl # CentOS
apt install numactl # Ubuntu
语法:
常用选项:
实战案例:
NUMA优化建议:
1. 查看NUMA命中率
$ numastat -p <pid>
2. 避免跨节点访问
- 将进程和内存绑定到同一节点
- 减少20-30%的延迟
3. 大内存应用
- 使用interleave策略
- 平衡各节点负载
17. turbostat - CPU状态监控
功能:显示CPU频率、C-state、温度等信息
语法:
常用选项:
-i N:刷新间隔N秒
-n N:运行N次
-S:显示系统调用
-q:安静模式
实战案例:
字段说明:
Avg_MHz: 平均频率
Busy%: CPU忙碌百分比
Bzy_MHz: 忙碌时的频率
C1-C10: CPU空闲状态
CoreTmp: 核心温度
PkgWatt: 包功耗
18. schedtool - 调度策略管理
功能:查看和设置进程调度策略
安装:
yum install schedtool # CentOS
apt install schedtool # Ubuntu
语法:
schedtool [选项] [command | -p pid]
常用选项:
-N:SCHED_NORMAL(默认)
-F:SCHED_FIFO(实时)
-R:SCHED_RR(实时轮转)
-B:SCHED_BATCH(批处理)
-I:SCHED_IDLE(空闲)
-p N:设置优先级
-a CPU:设置CPU亲和性
实战案例:
调度策略选择:
SCHED_NORMAL: 普通进程(默认)
SCHED_FIFO: 实时进程,先进先出
SCHED_RR: 实时进程,时间片轮转
SCHED_BATCH: 批处理,低优先级
SCHED_IDLE: 空闲时才运行
19. chrt - 实时调度属性
功能:操作进程的实时调度属性
语法:
chrt [选项] priority command
chrt [选项] -p [priority] pid
常用选项:
-f:SCHED_FIFO
-r:SCHED_RR
-o:SCHED_OTHER
-b:SCHED_BATCH
-i:SCHED_IDLE
-p:操作已存在的进程
-m:显示优先级范围
实战案例:
# 案例1:查看优先级范围
$ chrt -m
SCHED_OTHER min/max priority : 0/0
SCHED_FIFO min/max priority : 1/99
SCHED_RR min/max priority : 1/99
SCHED_BATCH min/max priority : 0/0
SCHED_IDLE min/max priority : 0/0
# 案例2:查看进程调度策略
$ chrt -p 1234
pid 1234's current scheduling policy: SCHED_OTHER
pid 1234's current scheduling priority: 0
# 案例3:设置实时优先级
$ chrt -f 50 ./critical_app
# SCHED_FIFO,优先级50
# 案例4:修改已运行进程
$ chrt -f -p 801234
# 将进程1234设置为SCHED_FIFO,优先级80
使用场景:
实时调度(FIFO/RR):
- 音视频处理
- 工控系统
- 低延迟应用
注意:
- 需要root权限
- 优先级1-99,99最高
- 可能导致系统无响应
20. ps - 进程快照
功能:显示当前进程状态
语法:
常用选项:
aux:显示所有进程(BSD风格)
-ef:显示所有进程(System V风格)
-eLf:显示线程
--sort:排序
-o:自定义输出
实战案例:
STAT字段说明:
R: 运行中
S: 可中断睡眠
D: 不可中断睡眠(通常是IO)
T: 停止
Z: 僵尸进程
<: 高优先级
N: 低优先级
L: 有页面锁定在内存
s: 会话领导者
l: 多线程
+: 前台进程组
三、内存性能分析(10个命令)
21. free - 内存使用概览
功能:显示系统内存使用情况
语法:
常用选项:
-h:人类可读格式
-m:以MB显示
-g:以GB显示
-s N:每N秒刷新
-t:显示总计
-w:宽格式(分离buffers和cache)
实战案例:
字段说明:
total: 总内存
used: 已使用(不含buffers/cache)
free: 完全空闲
shared: 共享内存
buff/cache: 缓冲区和缓存
available: 可用内存(包括可回收的cache)
重要:
- available才是真正可用的内存
- buffers/cache可以被回收
- used高不一定有问题
内存判断:
# 内存充足
available > total * 20%
# 内存紧张
available < total * 10%
# 内存不足
available < total * 5% 且 swap使用增加
22. smem - 内存报告工具
功能:报告每个进程的内存使用(包括共享内存)
安装:
yum install smem # CentOS
apt install smem # Ubuntu
语法:
常用选项:
-r:按RSS排序
-s:按PSS排序
-u:按用户分组
-m:按映射分组
-p:显示百分比
-k:以KB显示
-t:显示总计
实战案例:
内存指标说明:
RSS (Resident Set Size):
- 进程实际占用的物理内存
- 包括共享库(重复计算)
- 不准确
PSS (Proportional Set Size):
- 按比例分配共享内存
- 更准确的内存占用
- 推荐使用
USS (Unique Set Size):
- 进程独占的内存
- 不包括共享内存
- 进程结束后可释放的内存
23. pmap - 进程内存映射
功能:显示进程的内存映射
语法:
常用选项:
-x:扩展格式
-X:更详细的扩展格式
-d:设备格式
-q:安静模式
-p:显示完整路径
实战案例:
字段说明:
Address: 内存地址
Kbytes: 虚拟内存大小
RSS: 实际物理内存
Dirty: 脏页(已修改)
Mode: 权限(r读/w写/x执行)
Mapping: 映射的文件或区域
特殊区域:
[ anon ]: 匿名映射(堆、栈)
[ heap ]: 堆内存
[ stack ]: 栈内存
内存泄漏排查:
24. slabtop - 内核slab缓存
功能:实时显示内核slab缓存信息
语法:
常用选项:
-d N:刷新间隔N秒
-s S:排序字段
-o:只显示一次
实战案例:
常见slab对象:
dentry: 目录项缓存
inode_cache: inode缓存
buffer_head: 缓冲区头
kmalloc-*: 通用内存分配
tcp_bind_bucket: TCP连接
内存回收:
# 如果slab占用过多内存
# 可以尝试回收
$ echo 2 > /proc/sys/vm/drop_caches
# 1: 回收page cache
# 2: 回收slab
# 3: 回收page cache和slab
25. valgrind - 内存调试
功能:内存泄漏检测和性能分析
安装:
yum install valgrind # CentOS
apt install valgrind # Ubuntu
语法:
valgrind [选项] program [program-options]
常用工具:
memcheck:内存错误检测(默认)
cachegrind:缓存分析
callgrind:调用图分析
massif:堆分析
helgrind:线程错误检测
实战案例:
常用选项:
--leak-check=full # 详细泄漏检查
--show-leak-kinds=all # 显示所有泄漏类型
--track-origins=yes# 追踪未初始化值的来源
--log-file=file # 输出到文件
--suppressions=file # 忽略已知问题
注意事项:
⚠️ 程序运行速度会变慢10-50倍
⚠️ 内存占用会增加
⚠️ 适合开发测试,不适合生产环境
⚠️ 需要调试符号(-g编译)
26. memleak (bcc) - 内存泄漏追踪
功能:使用eBPF追踪内存分配和释放
安装:
yum install bcc-tools # CentOS
apt install bpfcc-tools # Ubuntu
语法:
memleak-bpfcc [选项] [-p pid | -c command]
常用选项:
-p PID:追踪指定进程
-c CMD:追踪命令
-t:显示追踪信息
-a:显示每次分配
-o OLDER:只显示存活时间>N毫秒的分配
-s SAMPLE:采样率
实战案例:
优势:
✓ 零开销(不追踪时)
✓ 生产环境可用
✓ 不需要重启进程
✓ 实时追踪
✓ 支持内核和用户态
27. pcstat - 页缓存统计
功能:查看文件在页缓存中的情况
安装:
# 需要Go环境
go get golang.org/x/sys/unix
go get github.com/tobert/pcstat/pcstat
语法:
常用选项:
-json:JSON格式输出
-terse:简洁输出
-nohdr:不显示表头
-bname:只显示文件名
实战案例:
使用场景:
1. 数据库性能优化
- 查看热点数据是否在缓存
- 评估缓存命中率
2. 文件IO优化
- 判断文件是否需要预加载
- 评估内存配置是否合理
3. 缓存预热
- 确认预热是否成功
- 监控缓存状态
28. cachestat (bcc) - 页缓存统计
功能:实时显示页缓存命中率
语法:
cachestat-bpfcc [interval [count]]
实战案例:
字段说明:
HITS: 缓存命中次数
MISSES: 缓存未命中次数
DIRTIES: 脏页数量
HITRATIO: 命中率
BUFFERS_MB: 缓冲区大小
CACHED_MB: 缓存大小
性能判断:
HITRATIO > 90%: 缓存效果好
HITRATIO 70-90%: 一般
HITRATIO < 70%: 缓存效果差,考虑增加内存
29. swapon - 交换空间管理
功能:启用/禁用交换空间,查看交换信息
语法:
常用选项:
-s:显示交换空间使用情况
-a:启用所有交换空间
-p N:设置优先级
实战案例:
交换空间优化:
建议:
服务器:swappiness=10(尽量不用swap)
桌面:swappiness=60(默认值)
内存充足:swappiness=0(禁用swap)
30. numastat - NUMA统计
功能:显示NUMA内存统计信息
语法:
常用选项:
-c:紧凑格式
-m:以MB显示
-n:显示节点信息
-p PID:显示进程NUMA统计
-s:排序输出
-v:详细输出
实战案例:
NUMA问题诊断:
四、磁盘IO性能(10个命令)
31. iostat - IO统计
功能:报告CPU和IO统计信息
语法:
常用选项:
-x:扩展统计
-d:只显示设备统计
-c:只显示CPU统计
-k:以KB显示
-m:以MB显示
-p:显示分区统计
-t:显示时间戳
实战案例:
字段说明:
r/s: 每秒读请求数
w/s: 每秒写请求数
rkB/s: 每秒读KB数
wkB/s: 每秒写KB数
rrqm/s: 每秒合并的读请求
wrqm/s: 每秒合并的写请求
r_await: 读请求平均等待时间(ms)
w_await: 写请求平均等待时间(ms)
aqu-sz: 平均队列长度
%util: 设备利用率
性能判断:
%util > 80%: IO繁忙
await > 20ms: IO响应慢(机械硬盘)
await > 5ms: IO响应慢(SSD)
aqu-sz > 1: 有IO排队
rrqm/s高: 顺序读多
wrqm/s高: 顺序写多
32. iotop - IO监控之王
功能:实时显示进程IO使用情况
安装:
yum install iotop # CentOS
apt install iotop # Ubuntu
语法:
常用选项:
-o:只显示有IO的进程
-b:批处理模式
-n N:刷新N次后退出
-d N:刷新间隔N秒
-p PID:只监控指定进程
-u USER:只监控指定用户
-P:只显示进程(不显示线程)
-a:累计IO而非带宽
交互式快捷键:
左右箭头:改变排序
r:反向排序
o:切换--only模式
p:切换进程/线程显示
a:切换累计/带宽模式
q:退出
实战案例:
字段说明:
TID: 线程ID
PRIO: IO优先级
DISK READ: 读速度
DISK WRITE: 写速度
SWAPIN: 换入百分比
IO>: IO等待百分比
COMMAND: 命令
33. ioping - IO延迟测试
功能:测试磁盘IO延迟
安装:
yum install ioping # CentOS
apt install ioping # Ubuntu
语法:
ioping [选项] directory|file|device
常用选项:
-c N:测试N次
-i N:间隔N秒
-s SIZE:请求大小
-S SIZE:工作集大小
-q:安静模式
-R:随机IO
-W:写测试(危险)
实战案例:
延迟判断:
SSD:
< 1ms: 优秀
1-5ms: 良好
> 5ms: 较差
机械硬盘:
< 10ms: 优秀
10-20ms: 良好
> 20ms: 较差
34. fio - IO性能测试
功能:灵活的IO测试工具
安装:
yum install fio # CentOS
apt install fio # Ubuntu
语法:
常用选项:
--name=NAME:任务名称
--filename=FILE:测试文件
--rw=TYPE:IO模式
--bs=SIZE:块大小
--size=SIZE:测试文件大小
--numjobs=N:并发任务数
--runtime=N:运行时间
--ioengine=TYPE:IO引擎
实战案例:
IO模式:
read: 顺序读
write: 顺序写
randread: 随机读
randwrite: 随机写
randrw: 混合随机读写
重要参数:
--direct=1: 绕过缓存,测试真实IO
--iodepth=N: 队列深度
--numjobs=N: 并发任务数
--rwmixread=N: 读写比例
35. blktrace - 块设备追踪
功能:追踪块设备IO请求
安装:
yum install blktrace # CentOS
apt install blktrace # Ubuntu
语法:
blktrace -d device
blkparse -i device
实战案例:
事件类型:
Q: 请求排队
G: 获取请求
I: 插入请求
D: 发送到驱动
C: 完成
时间分析:
Q2Q: 请求间隔
Q2C: 总响应时间
D2C: 设备响应时间
36. iosnoop (bcc) - IO追踪
功能:使用eBPF追踪磁盘IO
语法:
常用选项:
-Q:包括排队时间
-d DEVICE:只追踪指定设备
-n NAME:只追踪指定进程名
-p PID:只追踪指定进程
实战案例:
字段说明:
TIME: 时间戳
COMM: 进程名
PID: 进程ID
DISK: 磁盘设备
T: 类型(R读/W写)
SECTOR: 扇区号
BYTES: 字节数
QUE: 排队时间
LAT: 延迟时间
37. biosnoop (bcc) - 块IO追踪
功能:追踪块设备IO并显示延迟
语法:
实战案例:
38. df - 磁盘空间
功能:显示文件系统磁盘空间使用情况
语法:
常用选项:
-h:人类可读格式
-i:显示inode信息
-T:显示文件系统类型
-t TYPE:只显示指定类型
-x TYPE:排除指定类型
--total:显示总计
实战案例:
告警阈值:
磁盘空间:
Use% > 90%: 严重告警
Use% > 80%: 警告
Use% > 70%: 注意
Inode使用:
IUse% > 90%: 严重(即使空间充足)
IUse% > 80%: 警告
快速清理:
39. du - 目录空间
功能:估算文件和目录的磁盘使用空间
语法:
常用选项:
实战案例:
快速定位大文件:
40. lsof - 打开文件列表
功能:列出打开的文件和进程
语法:
常用选项:
-p PID:指定进程
-u USER:指定用户
-c CMD:指定命令
-i:网络连接
+D DIR:目录下的所有文件
-a:AND条件
-t:只显示PID
实战案例:
字段说明:
COMMAND: 进程名
PID: 进程ID
USER: 用户
FD: 文件描述符
cwd: 当前工作目录
rtd: 根目录
txt: 程序代码
mem: 内存映射文件
数字: 文件描述符
u: 读写
r: 只读
w: 只写
TYPE: 类型
DIR: 目录
REG: 普通文件
CHR: 字符设备
IPv4/IPv6: 网络套接字
实用技巧:
五、网络性能分析(10个命令)
41. netstat - 网络统计
功能:显示网络连接、路由表、接口统计等
语法:
常用选项:
-a:显示所有连接
-t:TCP连接
-u:UDP连接
-l:监听状态
-n:数字格式(不解析域名)
-p:显示进程信息
-s:统计信息
-i:网络接口
-r:路由表
-c:持续显示
实战案例:
连接状态说明:
LISTEN: 监听
ESTABLISHED: 已建立连接
TIME_WAIT: 等待足够时间以确保远程TCP接收到连接中断请求的确认
CLOSE_WAIT: 等待关闭
FIN_WAIT1: 等待远程TCP连接中断请求
FIN_WAIT2: 等待远程TCP连接中断请求
SYN_SENT: 发送连接请求后等待匹配的连接请求
SYN_RECV: 收到连接请求后等待连接确认
42. ss - Socket统计
功能:netstat的现代替代品,更快更强大
语法:
常用选项:
-a:显示所有socket
-t:TCP socket
-u:UDP socket
-l:监听状态
-n:数字格式
-p:显示进程
-s:统计信息
-i:内部TCP信息
-e:详细信息
-m:内存信息
-o:计时器信息
实战案例:
过滤表达式:
性能对比:
ss vs netstat:
✓ 速度快10倍以上
✓ 显示更多TCP信息
✓ 支持过滤表达式
✓ 推荐使用ss替代netstat
43. iftop - 网络流量监控
功能:实时显示网络带宽使用情况
安装:
yum install iftop # CentOS
apt install iftop # Ubuntu
语法:
常用选项:
-i INTERFACE:指定网卡
-n:不解析域名
-N:不解析端口
-P:显示端口
-b:不显示条形图
-B:以字节显示
-f FILTER:BPF过滤器
交互式快捷键:
h: 帮助
n: 切换域名解析
s: 切换源地址显示
d: 切换目标地址显示
t: 切换显示模式
p: 切换端口显示
P: 暂停
q: 退出
实战案例:
显示说明:
=>: 发送流量
<=: 接收流量
三列数字: 2秒、10秒、40秒平均值
TX: 发送总计
RX: 接收总计
TOTAL: 总计
44. nethogs - 进程网络监控
功能:按进程显示网络带宽使用
安装:
yum install nethogs # CentOS
apt install nethogs # Ubuntu
语法:
常用选项:
-d N:刷新间隔N秒
-v N:视图模式(0-3)
-c N:刷新N次后退出
-t:追踪模式
-p:混杂模式
交互式快捷键:
m: 切换显示模式(KB/s, KB, B, MB)
r: 按接收排序
s: 按发送排序
q: 退出
实战案例:
使用场景:
✓ 找出占用带宽的进程
✓ 监控异常流量
✓ 排查网络性能问题
✓ 流量审计
45. tcpdump - 抓包分析
功能:网络数据包捕获和分析
语法:
常用选项:
-i INTERFACE:指定网卡
-n:不解析域名
-nn:不解析域名和端口
-c N:捕获N个包后退出
-w FILE:写入文件
-r FILE:读取文件
-A:以ASCII显示
-X:以十六进制和ASCII显示
-s N:捕获N字节(0=全部)
-v/-vv/-vvv:详细程度
实战案例:
过滤表达式:
实用技巧:
46. nload - 网络负载监控
功能:实时显示网络流量和带宽使用
安装:
yum install nload # CentOS
apt install nload # Ubuntu
语法:
常用选项:
交互式快捷键:
↑↓: 切换网卡
←→: 切换显示模式
F2: 显示选项窗口
F5: 保存设置
F6: 重新加载设置
q: 退出
实战案例:
显示说明:
Curr: 当前速率
Avg: 平均速率
Min: 最小速率
Max: 最大速率
Ttl: 总流量
47. iperf3 - 网络性能测试
功能:测试网络带宽和性能
安装:
yum install iperf3 # CentOS
apt install iperf3 # Ubuntu
语法:
# 服务器端
iperf3 -s
# 客户端
iperf3 -c server_ip [选项]
常用选项:
-s:服务器模式
-c HOST:客户端模式,连接到HOST
-p PORT:端口(默认5201)
-t N:测试时间N秒
-i N:报告间隔N秒
-P N:并发连接数
-u:UDP测试
-b RATE:目标带宽
-R:反向测试(服务器发送)
-J:JSON格式输出
实战案例:
性能基准:
千兆网卡: 900-950 Mbits/sec
万兆网卡: 9000-9500 Mbits/sec
WiFi 5 (802.11ac): 300-600 Mbits/sec
WiFi 6 (802.11ax): 600-1200 Mbits/sec
48. ethtool - 网卡信息
功能:查询和设置网卡参数
语法:
常用选项:
无选项:显示基本信息
-i:驱动信息
-S:统计信息
-g:ring buffer大小
-k:offload特性
-c:中断合并设置
-s:设置参数
实战案例:
性能优化:
# 增大ring buffer(减少丢包)
$ ethtool -G eth0 rx 4096 tx 4096
# 启用offload特性(减少CPU负载)
$ ethtool -K eth0 tso on gso on gro on
# 调整中断合并(平衡延迟和吞吐)
$ ethtool -C eth0 rx-usecs 50 tx-usecs 50
49. ping - 网络连通性测试
功能:测试网络连通性和延迟
语法:
常用选项:
-c N:发送N个包后停止
-i N:间隔N秒
-s SIZE:包大小
-W N:超时N秒
-f:洪水ping(需root)
-q:安静模式
-I INTERFACE:指定网卡
实战案例:
延迟判断:
< 1ms: 优秀(局域网)
1-10ms: 良好(局域网/近距离)
10-50ms: 一般(城域网)
50-100ms: 较差(跨省)
> 100ms: 差(跨国/卫星)
丢包判断:
0%: 正常
< 1%: 可接受
1-5%: 需要关注
> 5%: 严重问题
50. mtr - 网络诊断
功能:结合ping和traceroute的网络诊断工具
安装:
yum install mtr # CentOS
apt install mtr # Ubuntu
语法:
常用选项:
-r:报告模式
-c N:发送N个包
-n:不解析域名
-b:同时显示IP和域名
-s SIZE:包大小
-i N:间隔N秒
-w:宽格式
--tcp:使用TCP
--udp:使用UDP
实战案例:
字段说明:
Loss%: 丢包率
Snt: 发送的包数
Last: 最后一个包的延迟
Avg: 平均延迟
Best: 最小延迟
Wrst: 最大延迟
StDev: 标准差(抖动)
问题诊断:
1. 某一跳丢包率高
- 如果后续跳正常,可能是该路由器限速
- 如果后续跳也高,说明该跳有问题
2. 延迟突然增加
- 找出延迟增加的跳
- 可能是该跳的网络拥塞
3. 抖动大(StDev高)
- 网络不稳定
- 可能有QoS策略
4. 最后一跳不通
- 目标主机可能禁ping
- 使用--tcp或--udp测试
📊 命令速查表
系统整体性能
| 命令 | 用途 | 推荐指数 | 适用场景 |
|---|
| uptime | 快速查看负载 | ⭐⭐⭐⭐⭐ | 首选,快速判断 |
| top | 实时监控 | ⭐⭐⭐⭐⭐ | 最常用 |
| htop | 增强版top | ⭐⭐⭐⭐ | 交互友好 |
| atop | 历史回放 | ⭐⭐⭐⭐ | 事后分析 |
| glances | 一站式监控 | ⭐⭐⭐⭐ | 全面监控 |
| dstat | 综合统计 | ⭐⭐⭐⭐ | 脚本友好 |
| vmstat | 虚拟内存 | ⭐⭐⭐⭐⭐ | 经典工具 |
| mpstat | 多CPU统计 | ⭐⭐⭐⭐ | CPU分析 |
| sar | 系统活动 | ⭐⭐⭐⭐⭐ | 历史数据 |
| nmon | 性能监控 | ⭐⭐⭐ | 长期监控 |
CPU性能分析
| 命令 | 用途 | 推荐指数 | 适用场景 |
|---|
| perf | 性能分析之王 | ⭐⭐⭐⭐⭐ | 深度分析 |
| pidstat | 进程统计 | ⭐⭐⭐⭐⭐ | 进程监控 |
| time | 程序计时 | ⭐⭐⭐⭐ | 性能测试 |
| taskset | CPU亲和性 | ⭐⭐⭐ | 性能优化 |
| cpupower | 频率管理 | ⭐⭐⭐ | 功耗优化 |
| numactl | NUMA控制 | ⭐⭐⭐ | NUMA优化 |
| turbostat | CPU状态 | ⭐⭐ | 深度分析 |
| schedtool | 调度策略 | ⭐⭐ | 实时应用 |
| chrt | 实时调度 | ⭐⭐ | 实时应用 |
| ps | 进程快照 | ⭐⭐⭐⭐⭐ | 最常用 |
内存性能分析
| 命令 | 用途 | 推荐指数 | 适用场景 |
|---|
| free | 内存概览 | ⭐⭐⭐⭐⭐ | 首选 |
| smem | 内存报告 | ⭐⭐⭐⭐ | 准确统计 |
| pmap | 内存映射 | ⭐⭐⭐⭐ | 进程分析 |
| slabtop | slab缓存 | ⭐⭐⭐ | 内核内存 |
| valgrind | 内存调试 | ⭐⭐⭐⭐⭐ | 开发调试 |
| memleak | 泄漏追踪 | ⭐⭐⭐⭐ | 生产环境 |
| pcstat | 页缓存 | ⭐⭐⭐ | 缓存分析 |
| cachestat | 缓存统计 | ⭐⭐⭐ | 命中率 |
| swapon | 交换空间 | ⭐⭐⭐⭐ | 内存管理 |
| numastat | NUMA统计 | ⭐⭐⭐ | NUMA分析 |
磁盘IO性能
| 命令 | 用途 | 推荐指数 | 适用场景 |
|---|
| iostat | IO统计 | ⭐⭐⭐⭐⭐ | 最常用 |
| iotop | IO监控 | ⭐⭐⭐⭐⭐ | 进程IO |
| ioping | IO延迟 | ⭐⭐⭐⭐ | 延迟测试 |
| fio | IO测试 | ⭐⭐⭐⭐⭐ | 性能测试 |
| blktrace | 块设备追踪 | ⭐⭐⭐ | 深度分析 |
| iosnoop | IO追踪 | ⭐⭐⭐⭐ | 实时追踪 |
| biosnoop | 块IO追踪 | ⭐⭐⭐ | 延迟分析 |
| df | 磁盘空间 | ⭐⭐⭐⭐⭐ | 最常用 |
| du | 目录空间 | ⭐⭐⭐⭐⭐ | 空间分析 |
| lsof | 打开文件 | ⭐⭐⭐⭐⭐ | 文件追踪 |
网络性能分析
| 命令 | 用途 | 推荐指数 | 适用场景 |
|---|
| netstat | 网络统计 | ⭐⭐⭐⭐ | 经典工具 |
| ss | Socket统计 | ⭐⭐⭐⭐⭐ | 推荐替代netstat |
| iftop | 流量监控 | ⭐⭐⭐⭐ | 实时流量 |
| nethogs | 进程流量 | ⭐⭐⭐⭐ | 进程监控 |
| tcpdump | 抓包分析 | ⭐⭐⭐⭐⭐ | 深度分析 |
| nload | 负载监控 | ⭐⭐⭐ | 简单直观 |
| iperf3 | 性能测试 | ⭐⭐⭐⭐⭐ | 带宽测试 |
| ethtool | 网卡信息 | ⭐⭐⭐⭐ | 网卡配置 |
| ping | 连通性测试 | ⭐⭐⭐⭐⭐ | 最常用 |
| mtr | 网络诊断 | ⭐⭐⭐⭐⭐ | 路由诊断 |
🎯 快速诊断流程
1. 系统慢?先看这3个命令
2. CPU 100%?这样排查
3. 内存不足?这样处理
4. 磁盘IO慢?这样分析
5. 网络慢?这样诊断
💡 性能优化建议
CPU优化
# 1. 绑定CPU(减少缓存失效)
$ taskset-cp0-3 <pid>
# 2. 调整调度策略
$ chrt-f-p50 <pid> # 实时应用
# 3. 设置CPU频率
$ cpupower frequency-set -g performance
# 4. NUMA优化
$ numactl--cpunodebind=0--membind=0 ./program
内存优化
# 1. 调整swappiness
$ sysctl vm.swappiness=10
# 2. 清理缓存(谨慎使用)
$ echo 3 > /proc/sys/vm/drop_caches
# 3. 启用透明大页
$ echo always > /sys/kernel/mm/transparent_hugepage/enabled
# 4. 调整OOM策略
$ echo 0 > /proc/<pid>/oom_adj
磁盘IO优化
# 1. 调整IO调度器
$ echo deadline > /sys/block/sda/queue/scheduler
# 2. 增大预读
$ blockdev --setra 8192 /dev/sda
# 3. 启用writeback缓存
$ hdparm -W1 /dev/sda
# 4. 调整文件系统参数
$ mount -o remount,noatime,nodiratime /data
网络优化
# 1. 增大ring buffer
$ ethtool -G eth0 rx 4096 tx 4096
# 2. 启用offload
$ ethtool -K eth0 tso on gso on gro on
# 3. 调整TCP参数
$ sysctl -w net.core.rmem_max=16777216
$ sysctl -w net.core.wmem_max=16777216
$ sysctl -w net.ipv4.tcp_rmem="4096 87380 16777216"
$ sysctl-w net.ipv4.tcp_wmem="4096 65536 16777216"
# 4. 调整连接队列
$ sysctl -w net.core.somaxconn=65535
$ sysctl -w net.ipv4.tcp_max_syn_backlog=8192
📚 推荐资源
书籍
《性能之巅:洞悉系统、企业与云计算》- Brendan Gregg
《Linux性能优化实战》- 倪朋飞
《深入理解Linux内核》- Daniel P. Bovet
在线资源
Brendan Gregg的博客:brendangregg.com
Linux Performance:www.brendangregg.com/linuxperf.html
eBPF工具集:github.com/iovisor/bcc
工具集合
bcc-tools:eBPF性能分析工具集
perf-tools:perf相关脚本集合
sysstat:系统性能监控工具集
🎉 总结
这50个命令覆盖了Linux性能分析的方方面面:
✅ 系统整体性能监控(10个)
✅ CPU性能深度分析(10个)
✅ 内存性能全面分析(10个)
✅ 磁盘IO性能分析(10个)
✅ 网络性能完整分析(10个)
记住:
先用简单命令快速定位(top, free, iostat, ss)
再用专业工具深入分析(perf, valgrind, tcpdump)
最后用eBPF工具精确追踪(memleak, iosnoop)
性能分析是一门实践的艺术,多用多练才能熟能生巧!
觉得有用?点个赞👍,转发给更多需要的人!
#Linux #性能分析 #运维 #技术干货