《系统性能监控:top/ps/vmstat/iostat/sar》

《系统性能监控:top/ps/vmstat/iostat/sar》

本文汇总 Linux 性能排查的常用命令:top(实时进程)、ps(进程快照)、vmstat(内存/IO)、iostat(磁盘/CPU 静态分析)、sar(历史性能报告)、journalctl(系统日志)。

1 top:实时查看进程资源

top 类似 Windows 的任务管理器,实时刷新 CPU/内存占用。

top -u root # 只看 root 用户 top -p $(pgrep nginx | tr "\n" "," | sed 's/,$//') # 指定进程 top -p 1234 -p 5678

top 首屏信息解读:

top - 01:06:48 up 2 days, 1:22 1 user, load average: 0.06, 0.60, 0.48 Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 1.0 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si Mem: 191272k total, 173656k used, 17616k free, 22052k buffers Swap: 192772k total, 0k used, 192772k free, 123988k cached
  • Load average 三个值分别是 1/5/15 分钟平均负载(任务队列长度)。
  • us 用户态 CPU、sy 内核态、id 空闲、wa IO 等待。
  • 进程表关键列:VIRT 虚拟内存、RES 常驻物理内存、SHR(各列含义见 top(1) man 页)。

进程状态(S 列):R 运行、S 睡眠、D 不可中断睡眠、T 停止、Z 僵尸。

修改显示字段:按 f 进入字段选择界面(方向键选择、空格/d 选中、esc/q 退出)。

2 ps:进程快照

# 查看进程运行了多久(lstart 启动时间、etime 运行时长) ps -eo pid,lstart,etime,cmd | grep <keyword>

ps 输出关键列:USER、PID、%CPU、%MEM、VSZ(虚拟内存)、RSS(常驻内存)、STAT、START、TIME、COMMAND。

Debian 安装 ps:apt-get install -y procps。

3 vmstat:虚拟内存与系统整体

# 每 1 秒输出一次,共 5 次,以 M 为单位 vmstat -SM 1 5 # 宽格式对齐输出 vmstat -w

输出字段速读:

组 列 说明
procs r / b 运行队列/阻塞进程数(r 长期 >1 需加 CPU)
memory swpd/free/buff/cache 虚拟内存/空闲/缓冲/缓存
swap si / so 每秒换入/换出(长期非 0 说明内存不足)
io bi / bo 每秒读/写块数
system in / cs 每秒中断 / 上下文切换
cpu us/sy/wa/id 用户/系统/IO 等待/空闲百分比

经验:

  • r 长期大于 CPU 核心数 → 需要增加 CPU。
  • si/so 长期非 0 说明内存紧张(漏换页)。
  • cache 含文件缓存,cache 大是好事;buffer 是待写入磁盘的缓冲。
  • us 长期超 50% 考虑优化程序或扩容 CPU;sy 过高需排查内核层面原因。
  • wa 高说明磁盘 IO 遇到瓶颈。

查看块大小:stat /boot/ | grep "IO Block" 或 sudo blockdev --getbsz /dev/vda。

4 iostat:磁盘 IO 与 CPU

sysstat 包提供。

iostat -d -k 1 3 # 间隔 1 秒,3 次,KB 单位,只显示磁盘 iostat -c -kx 1 2 # CPU + 磁盘详细统计 iostat -d -kx 1 2 # 磁盘详细模式

关键列:

  • tps:每秒传输次数
  • rkB/s / wkB/s:每秒读写 KB
  • avqq-block avgqu-sz:平均 IO 队列长度
  • await:平均 IO 等待时间(ms)
  • svctm:平均 IO 服务时间(ms)
  • %util:IO 满载比例

判断经验:

  • %util 接近 100% → 磁盘满负荷,有瓶颈。
  • await 远大于 svctm → IO 队列太长,响应慢。
  • avgqu-sz 很大 → 大量 IO 等待。

5 sar:系统活动报告

sar 适合回溯历史数据,默认通过 cron 每 10 分钟采样一次。

# 安装并开启采样 apt-get install sysstat sed -Ei 's/^ENABLED=.*/ENABLED="true"/' /etc/default/sysstat service sysstat restart # 或 /etc/init.d/sysstat restart # 查看网卡统计 sar -n DEV 1 4

常用选项:-A 全部、-u CPU 利用率、-d 磁盘、-r 内存、-v 进程/I 节点、-b 缓冲区、-n 网络。网络输出字段:rxpck/s 每秒收包、txpck/s 每秒发包、rxbyt/s 每秒收字节、txbyt/s 每秒发字节。

6 journalctl 系统日志(systemd)

# 查看指定 unit 最近 30 条日志 journalctl -n30 -u salt-highstate # 跟随最新日志 journalctl -f # 日志占用磁盘 journalctl --disk-usage

常用选项:--since/--until 时间范围、-b 本次启动日志、-k 内核日志、-p 优先级过滤。

7 总结

定位思路:先用 top/uptime 看负载与 CPU%,再用 vmstat 看内存换页/IO,iostat 定位磁盘,sar 回看历史趋势,journalctl 查应用/systemd 日志。

阅读 — · 全站 —
🎸 我的歌单 0 首