Сбой приложения без объяснения причин

Я заранее извиняюсь, потому что это не очень хороший вопрос.

У меня есть серверное приложение, которое работает как служба на выделенном сервере Windows. Очень случайным образом это приложение аварийно завершает работу и не оставляет никаких намеков на то, что вызвало сбой.

При сбое в журналах событий есть запись о сбое приложения, но не указывается, почему. Он также дает некоторую информацию о неисправном модуле, но не Это кажется очень надежным, поскольку модуль сбоя обычно отличается при каждом сбое. Например, последний сказал, что это ntdll, предыдущий сказал, что это libmysql, предыдущий сказал, что это netsomething, и т. Д.

Каждый отдельный поток в приложении заключен в try / catch (...) (что-либо, выброшенное обработчиком исключений / не пойманное специально), __ try / __ except (структурированные исключения) и try / catch (определенные исключения C ++ ). Приложение скомпилировано с / EHa, поэтому catch all также будет перехватывать структурированные исключения.

Все эти обработчики исключений делают то же самое. Сначала создается аварийный дамп. Во-вторых, запись записывается в новый файл на диске. В-третьих, запись регистрируется в журналах приложений. В случае этих сбоев, ничего из этого не происходит . Самый нижний обработчик исключений ( try / catch (...) ) ничего не делает, он просто завершает поток. Основной поток приложения спит и не имеет возможности вызвать исключение.

Файлы журнала приложения просто перестают вести журнал. Вскоре после этого процесс, отслеживающий сервер, замечает, что он больше не отвечает, отправляет предупреждение и запускает его снова. Если монитор сервера замечает, что сервер все еще работает, но просто не отвечает, он делает дамп процесса и сообщает об этом, но этого не происходит.

Единственная другая причина такого поведения, которую я могу придумать с, помимо неперехваченных исключений, это вызов exit или аналогичный. Поиск в коде не вызывает вызовов каких-либо функций, которые могли бы завершить процесс. Я' Мы также убедились, что программа не завершается нормально (т.е. запрос остановки от диспетчера служб).

Мы пробовали запустить ее с подключенным windbg (нет возможности использовать Visual Studio, накладные расходы слишком высоки), но он ни о чем не сообщал, когда произошел сбой.

Что может вызвать такой сбой приложения? У нас заканчиваются варианты, и мы считаем, что это может быть аппаратный сбой, но мне это кажется маловероятным.

5
задан Collin Dauphinee 7 March 2011 в 19:21
поделиться