Как мне отладить процесс, который находится в непрерывном сне? - PullRequest
2 голосов
/ 25 января 2012

Это в системе Linux (дистрибутив Red Hat).

У меня есть демон, реализованный на Perl.Он следит за таблицей заданий и, когда находит новое, заставляет дочернего элемента выполнить задание.

Я обнаружил, что дети непрерывно слоняются в таблице процессов в непрерывном состоянии:

 682 16658  100 dumpdeco dumpdeco ?          0:27.62  0.0  1.8 D perl /root/runObjectBrowserJobs.pl
 1453 16658  100 dumpdeco dumpdeco ?          0:13.34  0.0  1.5 D perl /root/runObjectBrowserJobs.pl
 1458 16658  100 dumpdeco dumpdeco ?          0:12.42  0.0  1.5 D perl /root/runObjectBrowserJobs.pl
 1467 16658  100 dumpdeco dumpdeco ?          0:13.35  2.9  1.8 D perl /root/runObjectBrowserJobs.pl
 1474 16658  100 dumpdeco dumpdeco ?          0:14.31  0.0  2.1 D perl /root/runObjectBrowserJobs.pl
 1479 16658  100 dumpdeco dumpdeco ?          0:13.73  0.0  2.1 D perl /root/runObjectBrowserJobs.pl
 1496 16658  100 dumpdeco dumpdeco ?          0:13.97  0.0  2.0 D perl /root/runObjectBrowserJobs.pl
 1499 16658  100 dumpdeco dumpdeco ?          0:13.93  0.0  2.2 D perl /root/runObjectBrowserJobs.pl
 1501 16658  100 dumpdeco dumpdeco ?          0:14.47  0.0  1.4 D perl /root/runObjectBrowserJobs.pl
 1503 16658  100 dumpdeco dumpdeco ?          0:14.86  2.0  2.2 D perl /root/runObjectBrowserJobs.pl
 1505 16658  100 dumpdeco dumpdeco ?          0:13.88  1.0  2.0 D perl /root/runObjectBrowserJobs.pl
 1520 16658  100 dumpdeco dumpdeco ?          0:14.39  0.0  1.5 D perl /root/runObjectBrowserJobs.pl
 1522 16658  100 dumpdeco dumpdeco ?          0:14.12  1.0  1.8 D perl /root/runObjectBrowserJobs.pl
 1531 16658  100 dumpdeco dumpdeco ?          0:16.45  0.0  1.7 D perl /root/runObjectBrowserJobs.pl
 3619 16658  100 dumpdeco dumpdeco ?          2:03.59  0.0  4.5 D perl /root/runObjectBrowserJobs.pl

Из своего журнала я знаю, что дети выполнили задание, которое им было поручено.Они зарегистрировали это, и работа была удалена из очереди ожидания.Таким образом, после проверки кода у них не осталось ничего, кроме выхода.

Кажется, это новое явление.Это старый кусок кода, и я танцевал процессы зомби, так что я почти уверен, что это не проблема с неправильным пожатием.

То, что я пытаюсь выяснить, этокак узнать, на чем держатся эти процессы.Я пробовал strace, но ничего не возвращается.Честно говоря, это не удивительно, потому что процесс (по-моему) на самом деле не делает ничего, кроме сна, в ожидании возвращения какого-то системного вызова.

Итак, я 'Я думаю:

  • Есть ли способ напечатать текущий стек вызовов запущенного процесса?
  • Есть ли способ вывести процесс и просмотреть его стек во времясвалка?
  • Есть предложения относительно того, что я должен искать?Я думаю, что сломанный драйвер хранилища (у нас были другие проблемы с нашим хранилищем в последнее время), но обвинять драйверы всегда кажется мне ленивым вариантом.

1 Ответ

0 голосов
/ 25 января 2012

Разве вы не знаете, я наткнулся на ответ. Команда pstack. Больше информации здесь: http://linux.die.net/man/1/pstack

...