当前位置:首页>Linux>Linux性能分析命令大全(50个)

Linux性能分析命令大全(50个)

  • 2026-09-05 13:52:34
Linux性能分析命令大全(50个)

  从入门到精通,掌握最全面的性能分析工具


今天,给大家分享整理50个最实用的性能分析命令,按场景分类,每个都有详细说明


📋 目录


一、系统整体性能(10个命令)

1. uptime - 系统负载快速查看

功能:查看系统运行时间和平均负载

语法:

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 - 实时系统监控之王

功能:实时显示系统和进程信息

语法:

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

语法:

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

语法:

atop [选项] [间隔] [次数]

常用选项:

  • -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 - 一站式监控

功能:跨平台的系统监控工具

安装:

pip install glances

语法:

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

语法:

dstat [选项] [间隔] [次数]

常用选项:

  • -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活动

语法:

vmstat [选项] [间隔] [次数]

常用选项:

  • -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的统计信息

语法:

mpstat [选项] [间隔] [次数]

常用选项:

  • -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 - 系统活动报告

功能:收集、报告和保存系统活动信息

语法:

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

语法:

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 - 进程统计

功能:报告进程的统计信息

语法:

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

语法:

cpupower [子命令] [选项]

常用子命令:

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

语法:

numactl [选项] command

常用选项:

  • --hardware:显示NUMA拓扑

  • --show:显示当前策略

  • --cpunodebind=N:绑定到NUMA节点N的CPU

  • --membind=N:内存分配在节点N

  • --interleave=all:内存交错分配

  • --localalloc:本地节点分配

实战案例:

NUMA优化建议:

1. 查看NUMA命中率
$ numastat -p <pid>
2. 避免跨节点访问
   - 将进程和内存绑定到同一节点
   - 减少20-30%的延迟
3. 大内存应用
   - 使用interleave策略
   - 平衡各节点负载

17. turbostat - CPU状态监控

功能:显示CPU频率、C-state、温度等信息

语法:

turbostat [选项] [command]

常用选项:

  • -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 - 进程快照

功能:显示当前进程状态

语法:

ps [选项]

常用选项:

  • aux:显示所有进程(BSD风格)

  • -ef:显示所有进程(System V风格)

  • -eLf:显示线程

  • --sort:排序

  • -o:自定义输出

实战案例:

STAT字段说明:

R: 运行中
S: 可中断睡眠
D: 不可中断睡眠(通常是IO)
T: 停止
Z: 僵尸进程
<: 高优先级
N: 低优先级
L: 有页面锁定在内存
s: 会话领导者
l: 多线程
+: 前台进程组

三、内存性能分析(10个命令)

21. free - 内存使用概览

功能:显示系统内存使用情况

语法:

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

语法:

smem [选项]

常用选项:

  • -r:按RSS排序

  • -s:按PSS排序

  • -u:按用户分组

  • -m:按映射分组

  • -p:显示百分比

  • -k:以KB显示

  • -t:显示总计

实战案例:

内存指标说明:

RSS (Resident Set Size):
- 进程实际占用的物理内存
- 包括共享库(重复计算)
- 不准确
PSS (Proportional Set Size):
- 按比例分配共享内存
- 更准确的内存占用
- 推荐使用
USS (Unique Set Size):
- 进程独占的内存
- 不包括共享内存
- 进程结束后可释放的内存

23. pmap - 进程内存映射

功能:显示进程的内存映射

语法:

pmap [选项] pid

常用选项:

  • -x:扩展格式

  • -X:更详细的扩展格式

  • -d:设备格式

  • -q:安静模式

  • -p:显示完整路径

实战案例:

字段说明:

Address: 内存地址
Kbytes: 虚拟内存大小
RSS: 实际物理内存
Dirty: 脏页(已修改)
Mode: 权限(r读/w写/x执行)
Mapping: 映射的文件或区域
特殊区域:
[ anon ]: 匿名映射(堆、栈)
[ heap ]: 堆内存
[ stack ]: 栈内存

内存泄漏排查:


24. slabtop - 内核slab缓存

功能:实时显示内核slab缓存信息

语法:

slabtop [选项]

常用选项:

  • -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

语法:

pcstat [选项] files...

常用选项:

  • -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 - 交换空间管理

功能:启用/禁用交换空间,查看交换信息

语法:

swapon [选项]
swapoff [选项]

常用选项:

  • -s:显示交换空间使用情况

  • -a:启用所有交换空间

  • -p N:设置优先级

实战案例:

交换空间优化:

建议:

服务器:swappiness=10(尽量不用swap)
桌面:swappiness=60(默认值)
内存充足:swappiness=0(禁用swap)

30. numastat - NUMA统计

功能:显示NUMA内存统计信息

语法:

numastat [选项] [pid]

常用选项:

  • -c:紧凑格式

  • -m:以MB显示

  • -n:显示节点信息

  • -p PID:显示进程NUMA统计

  • -s:排序输出

  • -v:详细输出

实战案例:

NUMA问题诊断:


四、磁盘IO性能(10个命令)

31. iostat - IO统计

功能:报告CPU和IO统计信息

语法:

iostat [选项] [间隔] [次数]

常用选项:

  • -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

语法:

iotop [选项]

常用选项:

  • -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

语法:

fio [选项] [job文件]

常用选项:

  • --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

语法:

iosnoop-bpfcc [选项]

常用选项:

  • -Q:包括排队时间

  • -d DEVICE:只追踪指定设备

  • -n NAME:只追踪指定进程名

  • -p PID:只追踪指定进程

实战案例:

字段说明:

TIME: 时间戳
COMM: 进程名
PID: 进程ID
DISK: 磁盘设备
T: 类型(R读/W写)
SECTOR: 扇区号
BYTES: 字节数
QUE: 排队时间
LAT: 延迟时间

37. biosnoop (bcc) - 块IO追踪

功能:追踪块设备IO并显示延迟

语法:

biosnoop-bpfcc [选项]

实战案例:


38. df - 磁盘空间

功能:显示文件系统磁盘空间使用情况

语法:

df [选项] [文件系统]

常用选项:

  • -h:人类可读格式

  • -i:显示inode信息

  • -T:显示文件系统类型

  • -t TYPE:只显示指定类型

  • -x TYPE:排除指定类型

  • --total:显示总计

实战案例:

告警阈值:

磁盘空间:
  Use% > 90%: 严重告警
  Use% > 80%: 警告
  Use% > 70%: 注意
Inode使用:
  IUse% > 90%: 严重(即使空间充足)
  IUse% > 80%: 警告

快速清理:


39. du - 目录空间

功能:估算文件和目录的磁盘使用空间

语法:

du [选项] [目录/文件]

常用选项:

  • -h:人类可读格式

  • -s:只显示总计

  • -c:显示总计

  • -a:显示所有文件

  • -d N:最大深度N层

  • --max-depth=N:同-d

  • --exclude=PATTERN:排除匹配的文件

  • -x:不跨文件系统

实战案例:

快速定位大文件:


40. lsof - 打开文件列表

功能:列出打开的文件和进程

语法:

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 - 网络统计

功能:显示网络连接、路由表、接口统计等

语法:

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的现代替代品,更快更强大

语法:

ss [选项]

常用选项:

  • -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

语法:

iftop [选项]

常用选项:

  • -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

语法:

nethogs [选项] [网卡]

常用选项:

  • -d N:刷新间隔N秒

  • -v N:视图模式(0-3)

  • -c N:刷新N次后退出

  • -t:追踪模式

  • -p:混杂模式

交互式快捷键:

m: 切换显示模式(KB/s, KB, B, MB)
r: 按接收排序
s: 按发送排序
q: 退出

实战案例:

使用场景:

✓ 找出占用带宽的进程
✓ 监控异常流量
✓ 排查网络性能问题
✓ 流量审计

45. tcpdump - 抓包分析

功能:网络数据包捕获和分析

语法:

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

语法:

nload [选项] [网卡]

常用选项:

  • -m:同时显示多个网卡

  • -a N:平均时间窗口N秒

  • -t N:刷新间隔N毫秒

  • -u:单位(h/H/b/B/k/K/m/M/g/G)

  • -U:同上,用于总流量

交互式快捷键:

↑↓: 切换网卡
←→: 切换显示模式
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 - 网卡信息

功能:查询和设置网卡参数

语法:

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 - 网络连通性测试

功能:测试网络连通性和延迟

语法:

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

语法:

mtr [选项] 目标

常用选项:

  • -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程序计时⭐⭐⭐⭐性能测试
tasksetCPU亲和性⭐⭐⭐性能优化
cpupower频率管理⭐⭐⭐功耗优化
numactlNUMA控制⭐⭐⭐NUMA优化
turbostatCPU状态⭐⭐深度分析
schedtool调度策略⭐⭐实时应用
chrt实时调度⭐⭐实时应用
ps进程快照⭐⭐⭐⭐⭐最常用

内存性能分析

命令用途推荐指数适用场景
free内存概览⭐⭐⭐⭐⭐首选
smem内存报告⭐⭐⭐⭐准确统计
pmap内存映射⭐⭐⭐⭐进程分析
slabtopslab缓存⭐⭐⭐内核内存
valgrind内存调试⭐⭐⭐⭐⭐开发调试
memleak泄漏追踪⭐⭐⭐⭐生产环境
pcstat页缓存⭐⭐⭐缓存分析
cachestat缓存统计⭐⭐⭐命中率
swapon交换空间⭐⭐⭐⭐内存管理
numastatNUMA统计⭐⭐⭐NUMA分析

磁盘IO性能

命令用途推荐指数适用场景
iostatIO统计⭐⭐⭐⭐⭐最常用
iotopIO监控⭐⭐⭐⭐⭐进程IO
iopingIO延迟⭐⭐⭐⭐延迟测试
fioIO测试⭐⭐⭐⭐⭐性能测试
blktrace块设备追踪⭐⭐⭐深度分析
iosnoopIO追踪⭐⭐⭐⭐实时追踪
biosnoop块IO追踪⭐⭐⭐延迟分析
df磁盘空间⭐⭐⭐⭐⭐最常用
du目录空间⭐⭐⭐⭐⭐空间分析
lsof打开文件⭐⭐⭐⭐⭐文件追踪

网络性能分析

命令用途推荐指数适用场景
netstat网络统计⭐⭐⭐⭐经典工具
ssSocket统计⭐⭐⭐⭐⭐推荐替代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

📚 推荐资源

书籍

  1. 《性能之巅:洞悉系统、企业与云计算》- Brendan Gregg

  2. 《Linux性能优化实战》- 倪朋飞

  3. 《深入理解Linux内核》- Daniel P. Bovet

在线资源

  1. Brendan Gregg的博客:brendangregg.com

  2. Linux Performance:www.brendangregg.com/linuxperf.html

  3. eBPF工具集:github.com/iovisor/bcc

工具集合

  1. bcc-tools:eBPF性能分析工具集

  2. perf-tools:perf相关脚本集合

  3. sysstat:系统性能监控工具集


🎉 总结

这50个命令覆盖了Linux性能分析的方方面面:

✅ 系统整体性能监控(10个)

✅ CPU性能深度分析(10个)

✅ 内存性能全面分析(10个)

✅ 磁盘IO性能分析(10个)

✅ 网络性能完整分析(10个)

记住:

  1. 先用简单命令快速定位(top, free, iostat, ss)

  2. 再用专业工具深入分析(perf, valgrind, tcpdump)

  3. 最后用eBPF工具精确追踪(memleak, iosnoop)

性能分析是一门实践的艺术,多用多练才能熟能生巧!


觉得有用?点个赞👍,转发给更多需要的人!

#Linux #性能分析 #运维 #技术干货

最新文章

随机文章