Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2010 12:33:41

IgorG
От:
Зарегистрирован: 2010-01-22
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Отладка подвисшего приложения

Есть консольное приложение, которое запускается несколько тысяч раз в сутки (реализует опросы совместно с Asterisk). Проблема заключается в том, что примерно раз-два в сутки экземпляр скрипта зависает и потребляет 100% процессора. Для отладки был добавлен следующий код, с расчетом на то, что при отправке SIGUSR1 зависшему процессу, в файле stack.log будет получена информация о выполняемом участке кода.

Проблема в том, что файл создается, но оказывается пустым. При запуске программы из консоли и отправки SIGUSR1 в файл записывается содержимое стека. В чем может быть проблема? Как можно ещё отлаживать приложение в такой ситуации?

import signal
import traceback

def handler(signum, frame):
filename = '/var/log/asterisk/stack.log'
stackfile = open(filename, 'a+')
stackfile.write(repr(traceback.format_stack()) % "\n")
stackfile.flush()

signal.signal(signal.SIGUSR1, handler)



Офлайн

#2 Янв. 26, 2010 19:03:34

j2a
От:
Зарегистрирован: 2006-06-29
Сообщения: 869
Репутация: +  1  -
Профиль   Отправить e-mail  

Отладка подвисшего приложения

Привет, Игорь.

Сейчас смоделировал два варианта:

1. Зациклился. В этом случае трейс нормально пишется в файл
2. Какая-либо встроенная конструкция делает тяжелый I/O. Попробовал читать /dev/zero :) но в этом случае он вообще по SIGUSR1 не создает файл

Так что ты попробуй логирование сделать в этом скрипте, чтобы каждый запуск начина лог заново, чтобы файл не пух…

P.S. В коде небольшая ошибка: вместо

stackfile.write(repr(traceback.format_stack()) % "\n")
надо
stackfile.write('\n'.join(traceback.format_stack()))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version