Показать сообщение отдельно
Старый 30.11.2016, 10:41   #1  
konfet is offline
konfet
Снова балуюсь косаптой :)
 
143 / 50 (2) ++++
Регистрация: 23.04.2003
Адрес: Moscow
DAX 2009. Как отлаживать BatchJob?
Ситуация такая. Имеем некое периодическое задание (потомок RunBaseBatch), суть которого - в периодической рассылке email-ов клиентам.
BatchJob работает в принципе нормально, но примерно раз в три дня намертво виснет. После того, как его вручную прибить и снова запустить - отрабатывает как ни в чем не бывало...
Поставлена задача - найти и устранить причину зависонов.
Объем кода периодического задания довольно значителен, поэтому "метод научного тыка" представляется крайне контрпродуктивным... кроме того, причина в принципе может крыться не в кривом коде, а в конфигурации bacth сервера, правах доступа и тп.
Разумеется, можно создать таблицу логов и всюду в подозрительных местах расставить выброс в этот лог строк со стеком, значениями переменных и т..д. Однако, что-то мне подсказывает, что такого результата можно добиться и без утомительной мышиной возни...
Вопрос к гуру: есть ли, например, возможность окружить метод run() соответствующего класса скобками типа

PHP код:
try
{
  
run();
}
catch(
Exception::<что-то>)
{
  
//  если время выполнения джоба больше заданного значения, то 
  //  заканчивать/перезапускать/выполнять другие действия 
  //  типа записи обстоятельств зависона в лог. В идеале - выплевывать 
  // в инфолог информацию, на какой именно строке кода зависон произошел.  

или же, может быть, есть и другой рациональный подход к решению такой задачи? Профайлер?
__________________
Бесты и регарды!

Последний раз редактировалось konfet; 30.11.2016 в 10:49.