Ищете объяснение о дочерних процессах containerd-shim/runc

Мы используем докер в среде роя. Все хорошо... но для странного процесса с именем "exe", появившегося несколько дней назад:

14126 root      20   0  446836  33648    184 R  49.0  0.2   0:05.98 exe
    1 root      20   0   52356    532    332 S  34.3  0.0   2750:22 systemd
13789 root      20   0 5424660  49784      0 S   5.6  0.3   2381:57 dockerd

Это действительно занимало до 100% процессора.
Мы пытались понять, откуда он взялся, но он был очень нестабильным, и его pid менялся каждые 3-4 секунды. Вы можете догадаться, что такое поведение вызвало несколько тревог.
В конце концов, мы настроили несколько инструментов мониторинга (с помощью auditd), чтобы сделать его снимок, и увидели, что:

Syscall event   curl    /usr/bin/curl   24242   24234
Syscall event   4       /               24240   24234
Syscall event   exe     /usr/bin/runc   24240   24234
Syscall event   runc    /usr/bin/runc   24234   10444

Родительский процесс "main" runc:

root 10444 2621 0 Nov13 ? 00:07:07 containerd-shim

Я прочитал несколько вещей (в том числе это одно и тот другой, и многое другое) о containerd-регулировочной шайбы и RunC... Я думаю, что понимаю RunC используется для запуска demonless контейнеров, а затем containerd-регулировочная шайба принимает как процесс контейнера родитель.
Таким образом, я понимаю, почему я ненадолго вижу runc как дочерний процесс containerd-shim при каждом запуске контейнера.

Но кое-что еще ускользает от меня:

  • почему существует несколько уровней runc (один runc вызывает другой)?
  • почему он называется не "runc", а "exe", и поэтому выглядит очень подозрительно (когда звучит так, как будто это законно)? Это основной процесс контейнера (или другой)?
  • что это за странный процесс под названием "4" и путь к исполняемому файлу "/"? Это часть процессов в контейнере (или основной)?
  • Я предполагаю, что curl - это проверка работоспособности, выполняемая в контейнере (это контейнер apache с проверкой состояния, нацеленным на localhost). Я прав?
  • Если основной процесс контейнера не является "4", должен ли я его видеть и как я могу увидеть его аналогичным образом?

А пока процесс просто перестал использовать весь процессор. Это выглядит коряво (но звучит законно) каждый раз при запуске контейнера, но занимает не более нескольких процентов. Поэтому я думаю, что чрезмерное использование ЦП было связано с какой-то проблемой в нашем контейнере. Во всяком случае, решение проблемы с процессором здесь не входило.

Изменить 1:

О dockerfiles

На виртуальной машине работает много контейнеров, и я не могу предоставить все файлы Docker. Я подозреваю, что завиток запускается через проверку работоспособности - это изображение apache httpd (на основе centOs). Он очень близок к CentOS с некоторыми маркировками, очисткой (неиспользуемые модули) и дополнительной проверкой работоспособности:

HEALTHCHECK --interval=5s --timeout=3s CMD curl --noproxy '*' --fail http://localhost:80/ || exit 1 

О мониторинге

мы используем rsyslog с базовой конфигурацией для удаленного сервера, а затем запускаем auditctl для отслеживания запуска процесса:

service rsyslog restart
service auditd start
auditctl -a always,exit -F arch=b64 -S execve -F key=procmon

0 ответов

Другие вопросы по тегам