Есть программа ("Электронной очереди") написанная на C# под фреймворк .NET 4.6.2
Программа должна постоянно крутится на сервере, но стали поступать жалобы, что компьютер перезагружается несколько раз в день, снял дамп, там присутствует постоянно 1 ошибка
SYSTEM_SERVICE_EXCEPTION 0x0000003b. driver ntoskrnl.exe
Погуглив данную ошибку я нашел, что в причина скорее всего в железе (видео карты, память, HDD).
Моя программа также использует железо.
Я хотел спросить, может ли данный BSOD быть из за ошибок в коде, или это исключено и в любом случае будет только Exception уровня приложения.
1.
Программа использует сетевую карту.
4 терминала по выдаче билетов, подключены по TCP/IP
2.
Программа использует 2 USB порта:
Конверторы RS-485 в USB, к ним подключены кассовые планшеты
3.
Карта передающая видеобуфер.
Через эту карту подключены табло, через спец программу (Mars)
происходит захват видео буффера с областей экрана, эти области и идут на табло.
Карта вставлена в PCI слот и подключается как монитор по DVI.
4.
Вывод звука через встроенную звуковую карту.
Из низкоуровневых библиотек я использую Naudio.dll (Подтягивал через Nuget).
Объект важный, хотелось бы услышать ваши мнения.
Ответ
Исключение SYSTEM_SERVICE_EXCEPTION означает проблему при переходе из кода уровня пользователя в код уровня ядра. Она может возникать например, из-за того, что данные, переданные модулю ядра, были каким-то образом повреждены и не было предусмотрено проверки их корректности. Parameter 1 у BSOD - код исключения, 0xC0000005 соответствует STATUS_ACCESS_VIOLATION, т.е. произошла попытка обратиться к защищенной области памяти.
Причиной может быть как дефект железа, так и ошибка в коде драйвера (ошибка в коде .Net приложений напрямую обычно не вызывает такое исключение). Поскольку драйвера видеоадаптеров в Windows разделены на модули уровня ядра и уровня пользователя, наибольшее подозрение падает именно на них.
Для диагностики проблемы можно попробовать следующее:
Настроить windbg на правильные символы и попытаться получить стек вызовов и список загруженных модулей. Это поможет выявить, какие именно драйвера вызывают проблему.
Обновить драйвера до последних версий.
Те драйвера, которые уже были недавно обновлены, наоборот попробовать откатить на предыдущую версию (т.к. в новой версии могла появится ошибка). Если проблема не исчезнет, вернуть новую версию.
Заменять компоненты железа на заведомо исправные, и смотреть, на каком исчезнет ошибка.
Комментариев нет:
Отправить комментарий