Как посмотреть утилизацию CPU и памяти?
Что проверяют
Умеете ли вы читать цифры, а не только выводить их: чем load average отличается от загрузки CPU, почему маленький free ещё не проблема, что такое steal. Следом обычно спрашивают, как смотреть то же самое в контейнере и в Kubernetes.
Как отвечать
Для разовой диагностики:
topилиhtop: сводка CPU с разбивкойus,sy,wa,st. Высокийwaзначит, что процессор ждёт диск, высокийstна виртуалке значит, что время забирает гипервизор;mpstat -P ALL 1из пакета sysstat: загрузка по ядрам. Одно ядро на 100% при общих 12% выдаёт однопоточное узкое место;vmstat 1: колонкаrпоказывает очередь на CPU,siиsoпоказывают активный своп;pidstat 1иsar: разбивка по процессам и история, если sysstat собирает данные;free -h: смотреть на колонкуavailable, а неfree. Память изbuff/cacheядро отдаст приложениям по первому требованию.
Load average это средняя длина очереди на выполнение, в Linux в неё входят и процессы в состоянии D, ждущие диск. Сравнивать его нужно с числом ядер (nproc). Если память кончилась, смотрите dmesg -T | grep -i oom или journalctl -k: там видно, кого убил OOM killer.
В контейнере free и top показывают память хоста, а лимит задаёт cgroup. Используйте docker stats или kubectl top pod (нужен metrics-server). Проверяйте CPU throttling: при жёстком лимите сервис тормозит при низкой средней загрузке, это видно по container_cpu_cfs_throttled_periods_total.
Для постоянного мониторинга: node_exporter, Prometheus и Grafana, алерты на node_memory_MemAvailable_bytes и на загрузку через rate(node_cpu_seconds_total{mode="idle"}[5m]).
Где спотыкаются
Называют load average процентом загрузки. Значение 8 на восьми ядрах это норма, на двух это перегруз.
Бьют тревогу, потому что free почти ноль. Linux занимает свободную память под кэш, и это правильное поведение.
Видят у процесса в top значение 350% и считают это ошибкой. По умолчанию %CPU считается относительно одного ядра, на многоядерной машине это нормально.