Ошибка приложения с «внутренней ошибкой в ​​.NET Runtime»

У нас есть приложение, написанное против .NET 4.0, которое в течение выходных разбилось, введя следующее сообщение в журнал событий:

Приложение: PnrRetrieverService.exe Версия Framework: v4.0.30319
Описание: процесс был прерван из-за внутренней ошибки в .NET Runtime на IP 791F9AAA (79140000) с кодом выхода 80131506.

Это относится к стандартной версии Windows Server 2003 R2. Ошибка в этой ошибке не повлияла ни на что. Например, это не происходит в VS Studio, а вместо этого на поле производства; когда служба была в конечном итоге перезапущена, у нее не возникло никаких дополнительных проблем.

Как сделать диагностику ошибки в .NET Runtime?

с кодом выхода 80131506

Это неприятно, ExecutionEngineException. Начиная с .NET 4.0, это исключение немедленно прекращает работу программы. Общей причиной является коррупция состояния мусора, собранного в кучу. Это, в свою очередь, неизменно вызвано неуправляемым кодом. Точное местоположение в коде, в котором возбуждено это исключение, не помогает, коррупция обычно происходила задолго до обнаружения повреждения.

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

Ошибка в параллельной реализации коллекции мусора на x64 .Net 4 может привести к этому, как указано в следующей записи Microsoft Microsoft:

ExecutionEngineException происходит во время сбора мусора

Сначала вы должны сделать глубокое исследование minidump, чтобы убедиться, что проблема возникла во время сбора мусора.

Расположение мини-накопителя обычно можно найти в записи отчета об ошибках Windows в журнале событий после записи о сбое. Тогда получайте удовольствие от WinDbg!

Последнюю документацию по использованию элемента конфигурации , чтобы отключить параллельную или (в .NET 4 и более поздних) сборку мусора фона, можно найти здесь .

Я испытал «внутренние ошибки» в среде выполнения .NET, которые оказались вызваны ошибками в моем коде; не думайте, что только потому, что это была «внутренняя ошибка» в среде выполнения .NET, в корне нет ошибки в коде. Всегда всегда всегда обвиняйте свой собственный код, прежде чем обвинять кого-то другого.

Надеемся, у вас есть информация о протоколировании и исключении / стеке, чтобы указать вам, с чего начать, или что вы можете повторить состояние системы до сбоя.

Для тех, кто прибыл сюда из Google, я в конце концов столкнулся с этим вопросом SO , и этот конкретный ответ решил мою проблему. Я связался с Microsoft для исправления через чат на сайте поддержки.microsoft.com, и они отправили мне ссылку на исправление по электронной почте.

Может быть ошибка с параллельным GC http://support.microsoft.com/kb/2679415

После нескольких лет борьбы с этой проблемой в ряде приложений оказалось, что Microsoft, наконец, приняла ее как ошибку в .NET 4 CLR, которая вызывает это. http://support.microsoft.com/kb/2640103 .

Я ранее «исправлял» его, заставляя сборщик мусора работать в режиме сервера (gcServer enabled = «true» в app.config), как описано в статье Microsoft, связанной с Think Before Coding. Это по существу заставляет все streamи приложения приостанавливать во время сбора, что устраняет возможность доступа других streamов к памяти, обрабатываемой GC. Я рад, что мои годы поиска в тщетном поиске «ошибки» в моем коде или других сторонних неуправляемых библиотеках были безрезультатными, потому что ошибка лежала в коде Microsoft, а не на моем.

В моем случае это исключение возникло, когда дисковое пространство было закончено, и .NET не может выделить память в виртуальной памяти Windows.

В журнале событий я увидел эту ошибку:

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

И предыдущая ошибка:

Дисковод C: находится на уровне или около него. Возможно, вам придется удалить некоторые файлы.

Framework Версия: v4.0.30319 Описание: Процесс был прерван из-за необработанного исключения. Информация об исключении: System.Reflection.TargetInvocationException

Я столкнулся с этой ошибкой, приложение отлично работало на некоторых ПК и на некоторых компьютерах, что давало указанную выше ошибку. Я удаляю Framework 4.5 и переустанавливаю эту проблему.

Не унывайте.

Я не уверен, что это может помочь каждому, но я мог обойти это, запустив

 devenv.exe /ResetSettings 

… на пути {Visual_Studio_root}\Common7\Ide

У меня были следующие ошибки в журнале событий, и VS просто рушился и перезапускался все время:

 Faulting application name: devenv.exe, version: 14.0.25123.0, time stamp: 0x56f22f32 Faulting module name: clr.dll, version: 4.7.2115.0, time stamp: 0x59af88f2 Exception code: 0xc0000005 Fault offset: 0x0015f90e Faulting process id: 0x3a7c Faulting application start time: 0x01d353463eaf0c36 Faulting application path: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe Faulting module path: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll Report Id: a232f984-6e80-4f61-9003-e18a035c8f93 Faulting package full name: Faulting package-relative application ID: 

В моем случае проблема была в библиотеке C ++ / CLI, в которой был вызов NtQuerySystemInformation ; по какой-то причине иногда (и при таинственных обстоятельствах ), когда он назывался, куча CLR была повреждена, и приложение разбилось.

Я решил проблему, используя «пользовательскую кучу», созданную с помощью HeapCreate, и выделив там буферы, используемые этой функцией.

В моем случае эта ошибка возникла при входе в приложение SAP Business One 9.1. В событиях Windows я мог найти еще одно событие ошибки в дополнение к сообщению, сообщаемому OP:

 Nome dell'applicazione che ha generato l'errore: SAP Business One.exe, versione: 9.10.160.0, timestamp: 0x551ad316 Nome del modulo che ha generato l'errore: clr.dll, versione: 4.0.30319.34014, timestamp: 0x52e0b784 Codice eccezione: 0xc0000005 Offset errore 0x00029f55 ID processo che ha generato l'errore: 0x1d7c Ora di avvio dell'applicazione che ha generato l'errore: 0x01d0e6f4fa626e78 Percorso dell'applicazione che ha generato l'errore: C:\Program Files (x86)\SAP\SAP Business One\SAP Business One.exe Percorso del modulo che ha generato l'errore: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll ID segnalazione: 3fd8e0e7-52e8-11e5-827f-74d435a9d02c Nome completo pacchetto che ha generato l'errore: ID applicazione relativo al pacchetto che ha generato l'errore: 

Машина работает под управлением Windows 8.1 с установленной платформой .NET Framework 4.0 и без версии 4.5. Как показалось в Интернете, это может быть также ошибка в .NET 4, я попытался установить .NET Framework 4.5.2, и я решил проблему.

Это может быть исключение, возникающее в финализаторе. Если вы делаете Pattern of ~ Class () {Dispose (false); } проверьте, что вы распоряжаетесь как неуправляемый ресурс. Просто поставьте попытку. Поймайте там, и вам все будет в порядке.

Мы обнаружили проблему, поскольку у нас был этот таинственный провал без журналов. Мы сделали обычную рекомендованную схему использования «void Dispose (bool disposing)».

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

Оказывается, где-то мы не размещали объект должным образом, поэтому финализатор взял на себя диполят неуправляемых ресурсов, таким образом, возникло исключение.

В этом случае использовался Kafka Rest API для очистки клиента от Kafka. Похоже, в какой-то момент это вызвало исключение, и эта проблема возникла.

Каждые 5-10 минут мой пул приложений продолжал сбой с этим кодом выхода. Я не хочу разрушать ваше доверие к Коллекционеру мусора, но для меня работало следующее решение.

Я добавил GC.GetTotalMemory(true) которое вызывает GC.GetTotalMemory(true) каждую минуту.

Я полагаю, что по какой-то причине GC не автоматически проверяет память достаточно часто для большого количества одноразовых объектов, которые я использую.

Interesting Posts

Хранить изображения в базе данных MongoDB

Как объединить два APK в один, чтобы оба приложения могли быть установлены одновременно

Как настроить сканирование файлов в приложении Spring Boot.exe

Elmah: Как получить тело запроса JSON HTTP из отчета об ошибке

Как проверить, что исключение не выбрасывается?

Как распознать жестов в веб-виде

Удаление дубликатов документов из поиска в Elasticsearch

Пакетное преобразование папки .mkv-файлов в файлы .m4v с использованием ffmpeg в MAC OS X

Может ли HTML5 взаимодействовать с периферийными устройствами, такими как сканеры и считыватели кредитных карт?

Может ли мой босс увидеть, какие сайты я посещаю, используя vpn из дома в офис?

Сравнивая небольшие образцы кода на C #, можно ли улучшить эту реализацию?

boto.exception.S3ResponseError: S3ResponseError: 403 Запрещено

Как найти MAC-адреса незащищенной сети в Windows, используя самые простые шаги?

Ячейка OpenSSL не скомпилирована в Mac OS X 10.11

Время ожидания HttpWebRequest при втором вызове

Давайте будем гением компьютера.