2008-10-21 8 views
5

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

Скорее всего, какой-то системный ресурс работает коротким. Очевидная вещь - использование ЦП - выглядит нормально.

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

ответ

2

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

8

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

strace -f -o LOG -p <pid> 

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

  1. Когда процесс зависает, использование сверху/пс/ввп/Трассирование/ltrace выяснить состояние процесса (например, ожидает ли он в «выбрать» или потребляет 100% cpu в некотором библиотечном вызове)

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

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

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

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

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

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

0

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

+0

забыли добавить - есть также инструмент-компаньон «ltrace», для отслеживания вызовов библиотеки (только для трассировки трассировки) – ADEpt 2008-10-22 06:22:18