《系统性能监控: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空闲、waIO 等待。- 进程表关键列: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:每秒读写 KBavqq-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 日志。
阅读 —
·
全站 —