Наши журналы сообщают о ThreadAbortException
, которые останавливают наши задания Quartz.NET через кажущиеся случайными промежутки времени. Насколько я понимаю, это обычно не вызвано чем-то, что делает сам поток (например, чтением файла с FTP-сервера или выполнением запроса LINQ to Entities), а скорее потому, что какой-то внешний процесс сообщает потоку остановиться . Кроме того, способ создания журналов заставляет меня думать, что все веб-приложение перезапускается, когда мы получаем эти ошибки, поэтому я предполагаю, что процесс перезапуска - это то, что ' s, в первую очередь вызывающая прерывание потока.
Итак, мой вопрос: как я могу выяснить, почему сервер / приложение перезапускается? Есть ли где-нибудь журналы, которые давали бы мне подробную информацию о каждом перезапуске? Есть ли общие причины подобного, которые я должен исследовать?
Заранее благодарю за вашу помощь.
Править
Я только что обсудил с коллегами, и похоже, что IIS автоматически помещает приложение спать после определенного периода бездействия, что может быть частью проблемы. Проведя небольшое исследование, я обнаружил параметр «Тайм-аут простоя» для рабочих потоков в IIS. Я думаю, что когда приложение не обрабатывает никаких запросов в течение определенного времени, оно выдает команду выключения. По какой-то причине Quartz не выключается сразу, но вместо этого он ждет, пока будет запущено следующее задание, а затем система обнаруживает поток этого задания и убивает его, пока он пытается запустить.
Итак, я думаю, нам нужно придумать какой-то способ изящно завершить любые выполняемые задания, когда система хочет выключиться и заставить Quartz фактически выключиться, когда ей прикажут, если она не выполняет никаких заданий. Есть ли у кого-нибудь опыт работы с подобными проблемами?