У нас есть приложение, написанное для .NET 4.0, которое на выходных вылетело из строя, и в журнал событий было занесено следующее сообщение:
Приложение: PnrRetrieverService.exe Версия Framework: v4.0.30319
Описание: Процесс был прерван из-за внутренней ошибки в среде выполнения .NET по IP 791F9AAA (79140000) с кодом выхода 80131506.
Это в коробке Windows Server 2003 R2 Standard Edition. Поиск в Google этой ошибки не дал ничего подходящего. Например, это происходит не в VS Studio, а в производственной коробке; когда служба была в конечном итоге перезапущена, проблем больше не возникло.
Как можно диагностировать ошибку в среде выполнения .NET?
.net
runtime-error
executionengineexception
ALEXintlsos
источник
источник
Ответы:
Это неприятное исключение ExecutionEngineException. Начиная с .NET 4.0 это исключение немедленно завершает работу программы. Общая причина - повреждение состояния кучи со сборкой мусора. Что, в свою очередь, неизменно вызвано неуправляемым кодом. Точное место в коде, в котором возникает это исключение, бесполезно, повреждение обычно происходило задолго до обнаружения повреждения.
Найти точную причину этого будет сложно. Просмотрите любой неуправляемый код, который может использовать ваша служба. Если нет очевидного кандидата, подозревают проблемы с окружающей средой, плохо себя ведут сканеры вредоносных программ. Если он повторяется очень плохо, тогда подозревайте проблемы с оборудованием, такие как программные ошибки RAM.
источник
Ошибка в параллельной реализации сборки мусора в x64 .Net 4 может вызвать это, как указано в следующей записи базы знаний Майкрософт:
ExecutionEngineException возникает во время сборки мусора
Сначала вы должны глубоко изучить минидамп, чтобы убедиться, что проблема возникла во время сборки мусора.
Расположение минидампа обычно можно найти в записи отчета об ошибках Windows в журнале событий после записи о сбое. Тогда веселитесь с WinDbg!
Последнюю документацию по использованию
<gcConcurrent/>
элемента конфигурации для отключения параллельной или (в .NET 4 и новее) фоновой сборки мусора можно найти здесь .источник
Я столкнулся с «внутренними ошибками» в среде выполнения .NET, которые, как оказалось, были вызваны ошибками в моем коде; не думайте, что в вашем коде нет ошибки как основной причины только потому, что это была "внутренняя ошибка" в среде выполнения .NET. Всегда всегда всегда обвиняйте свой собственный код, прежде чем обвинять кого-то другого.
Надеюсь, у вас есть информация о журналах и трассировке исключений / стека, которая укажет вам, с чего начать поиск, или что вы можете повторить состояние системы до сбоя.
источник
Для тех, кто прибыл сюда из Google, я в конце концов столкнулся с этим вопросом SO , и этот конкретный ответ решил мою проблему. Я связался с Microsoft по поводу исправления через чат на support.microsoft.com, и они прислали мне ссылку на исправление по электронной почте.
источник
После многих лет борьбы с этой проблемой в ряде приложений, похоже, что Microsoft, наконец, приняла ее как ошибку в .NET 4 CLR, которая вызывает это. http://support.microsoft.com/kb/2640103 .
Раньше я «исправлял» это, заставляя сборщик мусора работать в серверном режиме (gcServer enabled = «true» в app.config), как описано в статье Microsoft, на которую ссылается Think Before Coding. Это, по сути, заставляет все потоки в приложении приостанавливаться во время сбора, устраняя возможность доступа других потоков к памяти, управляемой сборщиком мусора. Я счастлив обнаружить, что мои годы тщетных поисков «ошибки» в моем коде или других сторонних неуправляемых библиотеках оказались бесплодными только потому, что ошибка заключалась в коде Microsoft, а не в моем.
источник
Может быть ошибка с одновременным GC http://support.microsoft.com/kb/2679415
источник
Была такая же точная ошибка в окне WinXP с последней сборкой моего кода .NET 4. Проверял предыдущие сборки - теперь они тоже вылетают! Ладно, значит, это не я :). Никакие предложения здесь / выше не помогли.
Гораздо более свежий (2018-05-09) отчет о той же проблеме: сбой приложения с кодом выхода 80131506 .
Основная причина до сих пор неизвестна (машина не обновляется и мало используется), но это сделало это для меня !
источник
В моем случае это исключение произошло, когда дисковое пространство закончилось, и .NET не может выделить память в виртуальной памяти Windows.
В журнале событий я увидел эту ошибку:
Всплывающее окно приложения: Windows - Слишком низкий минимум виртуальной памяти: вашей системе не хватает виртуальной памяти. Windows увеличивает размер файла подкачки виртуальной памяти. Во время этого процесса запросы памяти для некоторых приложений могут быть отклонены.
И предыдущая ошибка:
Диск C: почти заполнен. Возможно, вам придется удалить некоторые файлы.
источник
В моем случае проблема заключалась в библиотеке C ++ / CLI, в которой был вызов NtQuerySystemInformation ; иногда по какой-то причине (и при загадочных обстоятельствах ), когда она вызывалась, куча CLR была повреждена и приложение аварийно завершило работу.
Я решил проблему, используя "настраиваемую кучу", созданную с помощью HeapCreate, и разместив там буферы, используемые этой функцией.
источник
Я не уверен, что это может помочь всем, но я мог бы обойти это, запустив
... на пути
{Visual_Studio_root}\Common7\Ide
У меня были следующие ошибки в журнале событий, и VS просто все время падал и перезагружался:
источник
В моем случае проблема была связана с дублированием перенаправления привязки в моем файле web.config. Больше информации здесь .
Я предполагаю, что это произошло из-за того, что NuGet изменил перенаправления привязки, но, например, это выглядело так:
Удаление всех дубликатов решило проблему.
источник
В моем случае эта ошибка возникла при входе в приложение SAP Business One 9.1. В событиях Windows я мог найти еще одно событие ошибки в дополнение к тому, о котором сообщил OP:
Машина работает под управлением Windows 8.1 с установленной .NET Framework 4.0 и без версии 4.5. Поскольку в Интернете показалось, что это также может быть ошибка в .NET 4, я попытался установить .NET Framework 4.5.2 и решил проблему.
источник
Версия Framework: v4.0.30319 Описание: Процесс был прерван из-за необработанного исключения. Информация об исключении: System.Reflection.TargetInvocationException
Я столкнулся с этой ошибкой, приложение работало нормально на некоторых компьютерах и на некоторых компьютерах, давая указанную выше ошибку. Я удалил Framework 4.5 и переустановил, это решило мою проблему.
Не унывайте.
источник
Это может быть исключение, происходящее в финализаторе. Если вы выполняете шаблон ~ Class () {Dispose (false); } проверьте, что вы выбрасываете как неуправляемый ресурс. Просто попробуйте ... поймать там, и все будет в порядке.
Мы обнаружили проблему, так как у нас была таинственная ошибка без журналов. Мы использовали обычный рекомендуемый шаблон использования «void Dispose (bool dispose)».
Просматривая ответы на этот вопрос о финализаторе, мы нашли возможное место, где удаление неуправляемых ресурсов может вызвать исключение.
Оказывается, где-то мы не удалили объект должным образом, поэтому финализатор взял на себя распределение неуправляемых ресурсов, таким образом, произошло исключение.
В этом случае использовался API Kafka Rest для очистки клиента от Kafka. Похоже, что в какой-то момент это вызвало исключение, когда возникла эта проблема.
источник
В моем случае проблема была связана с « Ссылка на стандартную библиотеку .NET в классических проектах asp.net », и эти две проблемы
https://github.com/dotnet/standard/issues/873
https://github.com/App-vNext/Polly/issues/628
и перехода на Polly v6 было достаточно, чтобы обойти это
источник
Я так и не понял, почему это со мной происходит. Он постоянно воспроизводился для одного из моих приложений, но исчез после простой перезагрузки.
Я использую Windows 2004 Build 19582.1001 (Insider Preview) с .net-4.8, и я также не удивлюсь, если бы это было связано с чем-то вроде аппаратной ошибки памяти. Кроме того, мое приложение загружает неуправляемый код и инициализирует его, поэтому я не могу доказать, что сбой произошел не из-за этого.
источник
Каждые 5-10 минут мой пул приложений продолжал давать сбой с этим кодом выхода. Я не хочу подорвать ваше доверие к сборщику мусора, но у меня сработало следующее решение.
Я добавил задание, которое звонит
GC.GetTotalMemory(true)
каждую минуту.Я полагаю, что по какой-то причине GC автоматически не проверяет память достаточно часто для большого количества одноразовых объектов, которые я использую.
источник