三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

从‘看不懂’到‘门儿清’:手把手教你解读Linux性能监控命令的输出(附真实案例)

从‘看不懂’到‘门儿清’:手把手教你解读Linux性能监控命令的输出(附真实案例)

从‘看不懂’到‘门儿清’:手把手教你解读Linux性能监控命令的输出(附真实案例)

当你第一次面对top命令满屏跳动的数字时,是否感到无从下手?就像拿到一份全英文的体检报告,每个字母都认识,却不知道哪些指标需要重点关注。本文将用医生解读化验单的视角,带你看懂Linux系统的"健康指标"。

1. 系统体检的"基础五项"

1.1 生命体征监测:top命令

想象top是系统的实时心电图,首行三个关键指标就像心跳、血压和血氧:

top - 14:30:45 up 30 days, 3:22, 2 users, load average: 1.25, 0.75, 0.50
  • 14:30:45:当前系统时间(就诊时间)
  • up 30 days:系统持续运行时间(患者年龄)
  • load average:1分钟/5分钟/15分钟平均负载(血压的三次测量值)

异常值判断标准:

  • 单核CPU:负载>1需关注
  • 四核CPU:负载>4是危险信号

CPU使用率分解表:

指标正常范围异常表现可能病因
us%<60%持续高位用户程序CPU密集型
sy%<20%超过30%系统调用频繁
wa%<5%>10%磁盘I/O瓶颈
id%>30%<10%系统过载

1.2 内存透析:free与vmstat组合诊断

free -h的输出就像血常规报告:

total used free shared buff/cache available Mem: 7.7G 2.1G 3.2G 256M 2.4G 5.0G Swap: 2.0G 512M 1.5G

关键指标解读技巧:

  1. available>used:内存充足
  2. swap used持续增长:内存泄漏嫌疑
  3. buff/cache高:正常现象(系统缓存机制)

配合vmstat 2 5观察动态变化:

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 524288 3245124 242332 123456 0 0 12 24 345 1234 25 5 68 2 0

重点关注:

  • si/so:swap交换频率(>0即异常)
  • cs:上下文切换次数(万级以上需优化)

2. 专科检查:I/O与网络专项

2.1 磁盘性能内窥镜:iostat

iostat -x 1 3的输出如同胃肠镜报告:

Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 2.00 1.0 5.0 64.00 256.00 96.00 0.12 20.00 15.00 21.00 6.00 36.00

危险信号判断:

  1. %util>80%:磁盘满负荷
  2. await>svctm×2:I/O队列堆积
  3. avgqu-sz>1:存在等待请求

2.2 网络流量听诊器:iftop

iftop -P -n就像网络血管造影:

<= 192.168.1.1 => 140.82.121.3 2.5Mb 1.2Mb 0.8Mb <= => 91.189.91.38 1.1Mb 0.6Mb 0.4Mb

诊断要点:

  • 峰值流量接近带宽上限:网络拥堵
  • 异常IP连接:安全风险
  • 持续小包传输:可能是心跳包或攻击

3. 真实病例分析

3.1 病例一:数据库服务器卡顿

症状表现:

  • top显示wa%持续90%+
  • iostat显示%util=100%,await=120ms

诊断过程:

  1. 通过iotop定位到MySQL进程大量写操作
  2. vmstat发现si/so持续增长
  3. free显示可用内存不足100MB

治疗方案:

# 临时缓解 sudo sysctl vm.swappiness=10 sudo service mysql restart # 长期方案 ALTER TABLE large_table ENGINE=InnoDB; -- 优化表结构

3.2 病例二:Web API响应延迟

检查结果:

$ vmstat 1 procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 8 0 0 102304 12345 654321 0 0 0 12 5678 12345 85 15 0 0 0

异常指标:

  • r=8(8个进程等待CPU)
  • cs>10000(高频上下文切换)
  • us%=85(用户态CPU吃紧)

优化方案:

# 调整Nginx worker配置 worker_processes auto; worker_connections 4096; keepalive_timeout 65;

4. 建立你的监控诊断工具箱

4.1 常用命令速查表

症状初诊命令深度检查可视化工具
CPU高负载top -H -p PIDperf stathtop
内存泄漏vmstat 1smem -s ussgnome-system-monitor
磁盘I/O慢iostat -x 1iotop -oPaglances
网络异常iftop -nNPnethogs eth0bmon

4.2 自制监控脚本示例

#!/bin/bash # 保存为check_health.sh LOG_FILE="/var/log/system_health.log" echo "==== $(date) ====" >> $LOG_FILE # CPU检查 echo "CPU Load:" >> $LOG_FILE uptime >> $LOG_FILE echo "Top Processes:" >> $LOG_FILE ps -eo pid,user,%cpu,%mem,cmd --sort=-%cpu | head -n 5 >> $LOG_FILE # 内存检查 echo -e "\nMemory Usage:" >> $LOG_FILE free -h >> $LOG_FILE # 磁盘检查 echo -e "\nDisk IO:" >> $LOG_FILE iostat -x 1 3 >> $LOG_FILE # 网络检查 echo -e "\nNetwork Connections:" >> $LOG_FILE ss -s >> $LOG_FILE

添加定时任务:

chmod +x check_health.sh crontab -e # 添加: */30 * * * * /path/to/check_health.sh

掌握这些诊断技巧后,下次当服务器"身体不适"时,你就能像经验丰富的医生一样,快速定位问题根源。记住,好的系统管理员不是等到故障发生才检查,而是通过定期"体检"预防问题。

← 返回列表