Как посмотреть, сколько ресурсов потребляет конкретный процесс или сервис?

«Как посмотреть, сколько ресурсов потребляет конкретный процесс или сервис?» — вопрос из категории Мониторинг и логирование, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В DevOps-контексте важно не только смотреть общую утилизацию, но и детализировать потребление по процессам и сервисам.

Быстрый анализ через командную строку:

  1. Топ потребителей памяти:

    ps aux --sort=-%mem | head -10
  2. Топ потребителей CPU:

    ps aux --sort=-%cpu | head -10
  3. Детальная информация по конкретному PID (например, 1234):

    top -p 1234
    # Или
    cat /proc/1234/status | grep -E 'VmRSS|VmSize'
    # VmRSS — физическая память, VmSize — виртуальная.

Для контейнеризированных сред (Docker/Kubernetes):

docker stats <container_id>
kubectl top pod <pod_name> --namespace <namespace>

Профессиональный мониторинг: Для постоянного наблюдения мы настраиваем стек мониторинга. Например, с Prometheus + Grafana:

  • На серверах стоит node_exporter для системных метрик.
  • Для приложений настраиваются custom-метрики (например, через клиентские библиотеки для Python/Go).
  • В Grafana создаются дашборды, которые показывают потребление ресурсов конкретным микросервисом в разрезе времени, что помогает выявлять утечки памяти или аномалии нагрузки.

Пример алерта в Prometheus, который я настраивал: container_memory_working_set_bytes{pod=~"my-app.*"} > 500MiB.