Утро среды, 9:47. В #incident кто-то пишет: «прод тормозит». Вы ssh-итесь и на секунду зависаете, пытаясь вспомнить — top сортирует по CPU на Shift+M или Shift+P, iostat по умолчанию в MB/s или в секторах, ss -s действительно показывает то, что нужно. Ничего из этого помнить не обязательно. Пять вопросов дают картину.
1. Топ по CPU
$ 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 топ 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 — реальные килобайты в резиденции. Для «кто ест память» нужен RSS.
3. Дисковый I/O за 10 секунд
$ 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 покажи использование памяти в читаемом виде→ 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 покажи все 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))
Форма триажа
Пять вопросов, две минуты — у вас картина: какой процесс, какой ресурс, какое устройство, какой коннект. Часто запускаете две-три по цепочке — top по CPU найти подозреваемого, top по RSS убедиться, что это память, iostat исключить диск. Быстрее, чем рыться в горячих клавишах htop.
См. также
- Убить процесс на порту — естественное продолжение после нахождения подозреваемого.
- Сетевая диагностика — когда узкое место всё-таки сеть, а не хост.