Я использую команду Linux ps
для отслеживания размера RSS процессов внутри контейнера Docker. Если общее количество RSS превышает пороговое значение, я проваливаю тесты и начинаю искать регрессии памяти.
Вот весь вывод ps
из контейнера Docker.
PID %CPU RSS Threads COMMAND
1 0.0 2616 1 sh /test/Build/unittest.sh
7 3.3 44240 1 /usr/bin/Xvfb :1 -screen 0 ...
17 1.5 10824 1 /usr/bin/fluxbox
357 690 6292244 324 java -server -Xmx2g ...
490 0.4 7852 1 /usr/bin/python /usr/bin/dstat ...
491 0.7 7812 1 /usr/bin/python /usr/bin/dstat ...
1331 0.0 3040 1 /usr/bin/ps -AHww --format ...
1332 0.0 380 1 /usr/bin/ls --all ...
1333 0.0 6292248 1 [NDR-347]
Процесс Java (pid: 357) создает недолговечные дочерние процессы. В приведенном выше выводе вы можете видеть 2 процесса Python dstat, ps, ls и [NDR-347] ". Все они были созданы процессом Java.
Иногда я вижу дубликат дочернего процесса (то есть ту же команду), но другой идентификатор процесса (не показан). Почему я вижу дубликат дочернего процесса? Я полагаю, что это какой-то артефакт Linux или Docker. Что это за артефакт?
Я отслеживаю вывод ps
уже больше года. Впервые я вижу дополнительный процесс "[NDR-347]" (pid: 1333) с почти таким же RSS. Процесс Java (pid: 357) называет потоки "NDR- #", поэтому я нахожу странным, что команда дочернего процесса будет именем потока из процесса Java. Дополнительный процесс удваивает RSS и вызывает проблему. Проблема не воспроизводима. Это говорит мне о том, что pid 1333 очень недолговечен и не перехватывается ps
. Общий объем RSS составляет 12,07 ГБ, а без дополнительного процесса - 6,07 ГБ. Что это за дополнительный процесс? Почему у него такой огромный RSS?
Редактировать: точная команда ps
...
ps -Ahww --format pid,%cpu,rss:8,nlwp=Threads,command