Linux 性能监控与排查命令终极详解
一、系统整体监控:top 命令深度解析
1. top 命令界面详解
顶部信息区(前5行):
top - 14:30:45 up 15 days, 3:22, 3 users, load average: 1.25, 0.98, 0.75
Tasks: 256 total, 2 running, 254 sleeping, 0 stopped, 0 zombie
%Cpu(s): 25.3 us, 5.6 sy, 0.0 ni, 68.1 id, 0.5 wa, 0.0 hi, 0.5 si, 0.0 st
KiB Mem : 16304288 total, 2048128 free, 9876544 used, 4379616 buff/cache
KiB Swap: 4194304 total, 3145728 free, 1048576 used. 5123456 avail Mem
1.1 系统平均负载(Load Average)
- 格式:
load average: 1.25, 0.98, 0.75
- 1分钟平均负载:1.25
- 5分钟平均负载:0.98
- 15分钟平均负载:0.75
- 含义:
- 表示单位时间内处于可运行状态和不可中断状态的平均进程数
- 单核CPU的负载临界值为1.0,四核CPU为4.0
- 若1分钟值 > 5分钟值 > 15分钟值,说明负载在升高
- 判断标准:
- < 0.7:系统空闲
- ≈ 1.0:资源利用合理
5.0:系统严重过载
1.2 CPU状态行
%Cpu(s): 25.3 us, 5.6 sy, 0.0 ni, 68.1 id, 0.5 wa, 0.0 hi, 0.5 si, 0.0 st
- 各字段含义:
us
:用户空间CPU时间占比(应用程序)sy
:内核空间CPU时间占比(系统调用)ni
:nice优先级调整的进程CPU占比id
:空闲CPU百分比wa
:I/O等待CPU百分比(>10%需关注)hi
:硬件中断CPU占比si
:软件中断CPU占比st
:虚拟机偷取时间(仅虚拟化环境)
1.3 内存信息
KiB Mem : 16304288 total, 2048128 free, 9876544 used, 4379616 buff/cache
KiB Swap: 4194304 total, 3145728 free, 1048576 used. 5123456 avail Mem
- 关键指标:
buff/cache
:缓存内存(可被快速回收)avail Mem
:实际可用内存(含可回收缓存)- Swap使用量 > 0 表示物理内存不足
2. top 高级用法
2.1 线程监控模式
top -H -p [PID] # 查看指定进程的所有线程
- 字段说明:
PID
:线程ID(可通过ps -T -p [PID]
对照)PR
:优先级S
:状态(R=运行, S=睡眠, D=不可中断)
2.2 批处理模式
top -b -n 3 -d 2 > top.log # 非交互式运行3次,间隔2秒
2.3 自定义显示列
- 运行
top
后按f
进入字段选择 - 使用空格键选中:
CODE
:内存代码段大小DATA
:数据段+栈大小nFLT
:缺页中断次数
二、进程监控:ps 命令深度解析
1. ps 输出字段全解
ps aux --sort=-%mem | head -10
关键字段:
| 字段 | 含义 | 重要值 |
|——|——|——–|
| USER
| 进程所有者 | - |
| PID
| 进程ID | - |
| %CPU
| CPU使用率 | >30%需关注 |
| %MEM
| 内存使用率 | >10%需关注 |
| VSZ
| 虚拟内存大小(KB) | 异常增长可能内存泄漏 |
| RSS
| 物理内存大小(KB) | 实际占用内存 |
| STAT
| 进程状态 | D=不可中断, Z=僵尸 |
| START
| 启动时间 | 运行时间异常需检查 |
| TIME
| CPU占用时间 | 持续增长可能有问题 |
| COMMAND
| 完整命令 | 检查可疑进程 |
2. 线程相关操作
2.1 查看进程线程数
ps -o nlwp [PID] # 查看指定进程的线程数
ps -eLf | grep java | wc -l # 统计Java总线程数
2.2 线程状态分析
ps -T -p [PID] # 显示进程的所有线程
- STAT 状态码:
R
:运行中S
:休眠中D
:不可中断休眠(通常等待I/O)Z
:僵尸进程
三、磁盘I/O监控:iostat 深度解析
1. 关键指标详解
iostat -xdm 1
输出示例:
Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
sda 0.00 0.50 5.0 20.0 0.80 1.20 100.12 1.25 50.25 10.50 60.75 4.00 90.20
字段解析:
| 字段 | 含义 | 警戒值 |
|——|——|——–|
| rrqm/s
| 每秒合并读请求数 | - |
| wrqm/s
| 每秒合并写请求数 | - |
| r/s
| 每秒读次数 | >1000可能瓶颈 |
| w/s
| 每秒写次数 | >1000可能瓶颈 |
| rMB/s
| 每秒读取量(MB) | 接近磁盘上限时有问题 |
| wMB/s
| 每秒写入量(MB) | 接近磁盘上限时有问题 |
| avgqu-sz
| 平均I/O队列长度 | >5表示拥堵 |
| await
| 平均I/O响应时间(ms) | >20ms需关注 |
| %util
| 设备利用率 | >80%表示瓶颈 |
2. 高级用法
2.1 监控特定设备
iostat -x /dev/nvme0n1 2 # 每2秒监控NVMe磁盘
2.2 历史数据分析
iostat -x 1 10 > io.log # 记录10次采样
四、网络监控:iftop 深度解析
1. 界面字段详解
interface: eth0
IP: 192.168.1.100
=========================
TX: cum: 15.3MB peak: 2.45Mb rates: 1.02Mb 2.45Mb 1.67Mb
RX: cum: 45.2MB peak: 5.12Mb rates: 3.21Mb 4.56Mb 2.89Mb
=========================
192.168.1.1 => 10.0.0.5 1.45Mb 1.23Mb 1.12Mb
<= 2.10Mb 1.89Mb 1.56Mb
关键字段:
TX
:发送流量统计RX
:接收流量统计rates
:2秒/10秒/40秒的平均流量=>
:表示连接方向<=
:表示反向流量
2. 高级过滤
2.1 监控特定端口
iftop -f 'port 80 or port 443' # 只监控HTTP/HTTPS
2.2 显示端口号
iftop -P # 按P键显示端口
五、内存分析:free 深度解析
1. 输出详解
free -h
输出示例:
total used free shared buff/cache available
Mem: 15G 8G 1.2G 512M 5.8G 6.5G
Swap: 4.0G 1.5G 2.5G
关键指标:
available
:实际可用内存(含可回收缓存)buff/cache
:可快速释放的缓存- 内存健康判断:
available
> 总内存20%:健康Swap used
> 0:开始使用交换空间free
内存少但available
多:正常(Linux积极利用缓存)
六、综合性能分析:vmstat 深度解析
1. 输出详解
vmstat 1 5
输出示例:
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
2 0 524288 1024000 512000 4096000 0 0 100 50 500 2000 25 10 63 2 0
关键字段:
| 字段 | 含义 | 警戒值 |
|——|——|——–|
| r
| 运行队列长度 | > CPU核数 |
| b
| 不可中断进程数 | > 0需关注 |
| swpd
| 已用交换空间 | > 0表示内存压力 |
| si/so
| 交换区换入/出 | > 0表示内存不足 |
| bi/bo
| 块设备读写(blocks/s) | 持续高位表示I/O忙 |
| in
| 中断次数/s | 突然增加可能有硬件问题 |
| cs
| 上下文切换次数/s | >100,000可能有锁竞争 |
| us/sy/id
| CPU时间分配 | us>70%或sy>30%需关注 |
七、性能问题排查实战流程
场景:数据库服务器响应缓慢
快速定位方向:
top -n 1 # 查看整体负载 vmstat 1 5 # 检查运行队列和交换
CPU分析:
ps aux --sort=-%cpu | head -10 top -H -p [mysql_pid] # 查看MySQL线程 perf top -p [pid] # 需要perf工具
内存分析:
free -h ps aux --sort=-rss | head -10 cat /proc/[pid]/smaps # 详细内存映射
I/O分析:
iostat -x 1 iotop -o -d 1
网络分析:
iftop -i eth0 -nNP netstat -s | grep -E 'retrans|segments'
深度诊断:
strace -p [pid] -T -f -o trace.log # 系统调用分析 tcpdump -i eth0 -w mysql.pcap port 3306 # 抓包分析
通过这套完整的监控体系,可以系统性地定位90%以上的性能问题!
最后编辑:admin 更新时间:2025-05-29 13:26