Сбой приложения с «внутренней ошибкой в ​​среде выполнения .NET» - PullRequest
102 голосов
/ 06 декабря 2010

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

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

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

Как можно диагностировать ошибку в .NET Runtime?

Ответы [ 16 ]

112 голосов
/ 06 декабря 2010

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

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

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

36 голосов
/ 13 апреля 2012

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

ExecutionEngineException возникает во время сборки мусора

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

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

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

9 голосов
/ 06 декабря 2010

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

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

6 голосов
/ 09 января 2013

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

4 голосов
/ 03 сентября 2013

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

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

4 голосов
/ 28 ноября 2012

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

2 голосов
/ 20 ноября 2018

Была та же самая ошибка на коробке WinXP с последней сборкой моего кода .NET 4. Проверял предыдущие сборки - теперь они тоже рушатся! Итак, это не я :). Никакие предложения здесь / выше не помогли.

Гораздо более свежий (2018-05-09) отчет об этой же проблеме: Сбой приложения с кодом выхода 80131506 .

A : Мы получили аналогичную ошибку, но мы считаем, что наша была вызвана оптимизатором памяти Citrix.
Было решено принудительно восстановить основные библиотеки .Net на хостах, где возникла проблема:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\ngen.exe update /force

Основная причина до сих пор неизвестна (машина не обновляется и мало используется), но , которая сделала это для меня !

2 голосов
/ 07 августа 2012

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

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

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

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

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

1 голос
/ 01 ноября 2017

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

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: 
0 голосов
/ 24 апреля 2019

В моем случае проблема была связана с " ссылкой на стандартную библиотеку .NET в классических проектах asp.net " и этими двумя проблемами

https://github.com/dotnet/standard/issues/873

https://github.com/App-vNext/Polly/issues/628

и понижения до Полли v6 было достаточно, чтобы обойти это

...