Утилиты отладки для проблем зависания процесса Linux? - PullRequest
4 голосов
/ 14 июня 2010

У меня есть процесс-демон, который управляет конфигурацией.все остальные процессы должны взаимодействовать с этим демоном для их функционирования.Но когда я выполняю большое действие, через несколько часов процесс демона не отвечает в течение 2-3 часов.И через 2-3 часа он работает нормально.

Утилиты отладки для проблем зависания процессов в Linux?

Как узнать, в какой момент процесс linux зависает?

Ответы [ 3 ]

9 голосов
/ 14 июня 2010
  • strace может показывать последние системные вызовы и их результат
  • lsof может показывать открытые файлы
  • системный журнал может быть очень эффективным, когда сообщения журнала записываются для отслеживания прогресса. Позволяет ограничить проблему в меньших областях. Также коррелируйте сообщения журнала с другими сообщениями из других систем, это часто приводит к интересным результатам
  • wireshark, если в приложениях используются сокеты, чтобы сделать проволоку видимой.
  • ps ax + top может показать, находится ли ваше приложение в занятом цикле, то есть работает все время, спит или заблокировано в IO, использует процессор, использует память.

Каждый из них может дать небольшую информацию, которая вместе создает картину проблемы.

При использовании gdb может быть полезно вызвать дамп ядра, когда приложение заблокировано. Затем у вас есть статический снимок, который вы можете проанализировать с помощью посмертной отладки на досуге. Вы можете получить их по сценарию. Вы быстро создадите набор снимков, которые можно использовать для проверки ваших теорий.

1 голос
/ 14 июня 2010

Один из вариантов - использовать gdb и использовать команду attach для подключения к запущенному процессу. Вам нужно будет загрузить файл, содержащий символы рассматриваемого исполняемого файла (с помощью команды file)

0 голосов
/ 09 ноября 2013

Существует несколько различных способов:

  1. Прослушивание сокета домена UNIX для обработки запросов о состоянии.Затем внешнее приложение может узнать, все ли в порядке с приложением.Если он не получает ответа в течение некоторого периода времени ожидания, то можно предположить, что запрашиваемое приложение заблокировано или является мертвым.

  2. Периодически касаясь файла с предварительно выбранным путем.Внешнее приложение может найти временную метку для файла, и если оно устарело, то оно может предположить, что приложение устарело или заблокировано.

  3. Вы можете использовать системный вызов alarmнесколько раз, имея сигнал прекратить процесс (используйте sigaction соответственно).Пока вы продолжаете вызывать alarm (т.е. пока ваша программа работает), она будет продолжать работать.Как только вы этого не сделаете, сигнал сработает.

Вы можете беспрепятственно перезапустить ваш процесс, когда он умрет с fork и waitpid, как описано в этом ответе .Это не потребует значительных ресурсов, поскольку ОС будет совместно использовать страницы памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...