2011-09-05 2 views
5

Многопоточное приложение зависает и не отвечает на любые команды. Я попытался следующие вещи без везения:Как отлаживать многопоточный процесс в Linux?

  1. Приложить процесс БГД (ошибка: (GDB) присоединять 6026 Прикрепление обрабатывать 6026 ptrace:. Операция не допускается)
  2. gstack (gstack просто висит так)

Есть ли хороший способ отладить этот процесс?

+0

Вы пытаетесь подключиться как от имени пользователя root, так и от пользователя, который создал этот процесс, или как какой-либо другой пользователь? Вы пытались запустить программу из gdb, прежде чем она дойдет до точки, где она висит? –

+0

@Jonatha Leffler Я запустил этот процесс в корне, и я использовал тот же идентификатор для присоединения процесса в gdb. Это не процесс переднего плана, это процесс демона. – Thangaraj

+0

OK; если он работает от имени root, и вы пытаетесь запустить gdb как root, то это не простой вопрос о привилегиях (но он может быть сложным). В целом, то, что я сделал бы, это запустить демона в gdb, используя такие опции, как 'set follow-fork-mode' и' set fork-detach-mode'. –

ответ

6

Спасибо за ваш ответ. Проблема на уровне ядра. мы использовали echo t>/proc/sysrq-trigger, который регистрирует стек всего запущенного процесса в/var/log/messages. Эта трассировка стека помогла проанализировать проблему.

Из трассировки стека файловая система отправила некоторое ожиданное событие от имени процесса приложения другому процессу (который находится в состоянии отсутствия) и ожидает ответа на неопределенный срок. Который приводит к зависанию.

1

Скорее всего, кто-то еще уже отслеживает этот процесс. Чтобы узнать, кто это делает, посмотрите файловую систему proc.

cat /proc/6026/status|grep TracerPid 
+0

Поле TracePid равно нулю – Thangaraj

+0

Тогда причина в другом: – ks1322

Смежные вопросы