CLI AI

「现在谁在啃我的 CPU?」——用大白话做系统监控

2026-04-27

周三早上 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 的快捷键里翻找快得多。

另见