周三早上 9:47。#incident 频道里有人说*「prod 卡」*。你 ssh 进去,停顿一下:top 按 CPU 排是 Shift+M 还是 Shift+P?iostat 默认是 MB/s 还是扇区?ss -s 给的真是你要的吗?这些都不用记。五个问题给你一张图。
1. CPU 排行
clai
$ clai 现在哪 10 个进程占 CPU 最多→ ps -eo pid,user,%cpu,%mem,comm --sort=-%cpu | head -11PID USER %CPU %MEM COMMAND8821 app 84.2 12.4 java8901 app 31.1 3.2 node
一次采样不算圣经——但是即时快照,95% 的时候指对了人。
2. RSS 排行
clai
$ clai 按驻留内存排前 10 个进程→ ps -eo pid,user,rss,%mem,comm --sort=-rss | head -11PID USER RSS %MEM COMMAND8821 app 1985432 12.4 java4567 app 1180224 7.2 node
%MEM 是百分比;RSS 是真正常驻的 KB 数。「谁吃内存」要看 RSS。
3. 10 秒磁盘 I/O 窗口
clai
$ clai 显示每秒磁盘 I/O,按设备,10 次→ iostat -dx 1 10Device r/s w/s rkB/s wkB/s %utilsda 12.0 340.2 192.0 18432.0 87.4
%util 87% 表示该盘当前是瓶颈。没有 iostat -x 这一列就看不到。
4. 内存(人类单位)
clai
$ clai 用人类单位显示内存使用→ free -h total used free shared buff/cache availableMem: 15Gi 12Gi 428Mi 32Mi 2.7Gi 2.6GiSwap: 2.0Gi 1.2Gi 820Mi
-h 给可读单位。available 才是回答*我还有内存吗?*的那一列——不是 free,后者会误导地偏低。
5. 已建立的网络连接
clai
$ clai 显示所有 established 连接和对应进程名→ ss -tnp state establishedESTAB 10.0.1.12:54322 10.0.1.50:5432 users:(("app",pid=8821))ESTAB 10.0.1.12:51002 17.253.144.10:443 users:(("clai",pid=4012))
排障的形状
五个问题,两分钟,你已经有图:哪个进程、哪个资源、哪个设备、哪条连接。常常是连续问两三个——CPU 锁定嫌疑,RSS 确认是不是内存,iostat 排除磁盘。比在 htop 的快捷键里翻找快得多。