Найти - Пользователи
Полная версия: Отладка подвисшего приложения
Начало » Python для новичков » Отладка подвисшего приложения
1
IgorG
Есть консольное приложение, которое запускается несколько тысяч раз в сутки (реализует опросы совместно с 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)
j2a
Привет, Игорь.

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

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

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

P.S. В коде небольшая ошибка: вместо
stackfile.write(repr(traceback.format_stack()) % "\n")
надо
stackfile.write('\n'.join(traceback.format_stack()))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB