Определение причины остановившегося процесса в Linux - PullRequest
5 голосов
/ 22 октября 2008

Я пытаюсь определить причину остановки процесса в Linux. Это телекоммуникационное приложение, работающее под довольно большой нагрузкой. Существует отдельный процесс для каждого из 8 диапазонов T1. Время от времени один из процессов перестает отвечать на запросы - возможно, за 50 секунд до того, как событие регистрируется в журнале обычно очень занятого процесса.

Вероятно, не хватает какого-то системного ресурса. Очевидная вещь - использование процессора - выглядит нормально.

Какие утилиты linux лучше всего подходят для обнаружения и анализа такого рода вещей и настолько ненавязчивы, насколько это возможно, поскольку это высоконагруженная система? Казалось бы, это должны быть процессы, а не ориентированные на систему. Может быть, текущий мониторинг / proc / pid / XX? Топ, похоже, здесь не слишком полезен.

Ответы [ 3 ]

8 голосов
/ 22 октября 2008

Если вам удастся обнаружить этот «момент безответственности», то вы можете использовать strace для подключения к рассматриваемому процессу в течение этого времени и попытаться выяснить, где он «спит»:

strace -f -o LOG -p <pid>

Более легкий, но менее надежный метод:

  1. Когда процесс зависает, используйте top / ps / gdp / strace / ltrace, чтобы выяснить состояние процесса (например, ожидает ли он «select» или потребляет 100% ЦП при каком-либо вызове библиотеки)

  2. Зная общую природу рассматриваемого вызова, адаптируйте вызов strace для регистрации определенных системных вызовов или групп системных вызовов. Например, чтобы регистрировать только системные вызовы, связанные с доступом к файлу, используйте:

    strace -e file -f -o LOG ....
    

Если инструмент для вас слишком тяжелый, попробуйте мониторинг:

  1. Использование памяти с помощью "vmstat 1> / some / log" - возможно, процесс в течение этого времени включается (или выключается)

  2. Использование ввода-вывода с vmstat / iotop - может быть, какой-то другой процесс перебивает диски

  3. / proc / interrupts - может быть, драйвер для вашей карты T1 испытывает проблемы?

2 голосов
/ 22 октября 2008

Вы можете связать программу и посмотреть, какие системные вызовы она делает.

0 голосов
/ 22 октября 2008

Спасибо - Strace звучит полезно. Поймать процесс в нужное время будет частью веселья. Я придумал схему, чтобы периодически записывать метку времени в общую память, а затем отслеживать другой процесс. Отправка SIGSTOP позволит мне хотя бы проверить стек приложений с помощью gdb. Я не знаю, скажет ли мне strace на приостановленном процессе, но я мог бы тогда включить strace и посмотреть, что он скажет. Или включите strace и нажмите кнопку SIGCONT.

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