Kami memiliki aplikasi yang ditulis terhadap .NET 4.0 yang selama akhir pekan mengalami crash, menempatkan pesan berikut ke dalam log peristiwa:
Aplikasi: Kerangka PnrRetrieverService.exe Versi: v4.0.30319
Deskripsi: Proses dihentikan karena kesalahan internal di .NET Runtime di IP 791F9AAA (79140000) dengan kode keluar 80131506.
Ini ada di kotak Windows Server 2003 R2 Edisi Standar. Googling kesalahan ini belum menemukan apapun yang berhubungan. Misalnya, ini tidak terjadi di VS Studio, melainkan di kotak produksi; ketika layanan akhirnya dimulai ulang, tidak ada masalah lagi.
Bagaimana cara mendiagnosis bug di .NET Runtime?
.net
runtime-error
executionengineexception
ALEXintlos
sumber
sumber
Jawaban:
Itu buruk, ExecutionEngineException. Dimulai dengan .NET 4.0, pengecualian ini segera menghentikan program. Penyebab umum adalah korupsi keadaan tumpukan sampah yang dikumpulkan. Yang pada gilirannya selalu disebabkan oleh kode yang tidak terkelola. Lokasi yang tepat dalam kode tempat pengecualian ini dimunculkan tidak membantu, kerusakan biasanya terjadi jauh sebelum kerusakan terdeteksi.
Menemukan penyebab pasti untuk ini akan sulit. Tinjau kode tidak terkelola yang mungkin digunakan layanan Anda. Curigai masalah lingkungan jika tidak ada kandidat yang jelas, pemindai malware yang berperilaku buruk terkenal kejam. Jika terulang dengan sangat buruk maka curigai masalah perangkat keras seperti kesalahan RAM lunak.
sumber
Bug dalam implementasi bersamaan dari Pengumpulan Sampah di x64 .Net 4 dapat menyebabkan ini seperti yang dinyatakan di entri microsoft KB berikut:
ExecutionEngineException terjadi selama Pengumpulan Sampah
Anda harus melakukan eksplorasi minidump dalam-dalam terlebih dahulu untuk memastikan bahwa masalah terjadi selama pengumpulan Sampah.
Lokasi minidump biasanya dapat ditemukan di entri Windows Error Reporting di event log setelah entri crash. Kemudian, bersenang-senanglah dengan WinDbg!
Dokumentasi terbaru tentang penggunaan
<gcConcurrent/>
elemen konfigurasi, untuk menonaktifkan pengumpulan sampah latar belakang bersamaan atau (di .NET 4 dan yang lebih baru), dapat ditemukan di sini .sumber
Saya telah mengalami "kesalahan internal" dalam runtime .NET yang ternyata disebabkan oleh bug dalam kode saya; jangan berpikir bahwa hanya karena itu adalah "kesalahan internal" dalam waktu proses .NET sehingga tidak ada bug dalam kode Anda sebagai penyebab utama. Selalu selalu menyalahkan kode Anda sendiri sebelum Anda menyalahkan kode orang lain.
Mudah-mudahan Anda memiliki informasi logging dan pengecualian / pelacakan tumpukan untuk mengarahkan Anda ke mana harus mulai mencari, atau bahwa Anda dapat mengulangi status sistem sebelum crash.
sumber
Bagi mereka yang tiba di sini dari google, saya akhirnya menemukan pertanyaan SO ini , dan jawaban khusus ini memecahkan masalah saya. Saya telah menghubungi Microsoft untuk hotfix melalui obrolan langsung di support.microsoft.com dan mereka mengirimi saya tautan ke hotfix melalui email.
sumber
Setelah bertahun-tahun bergumul dengan masalah ini di sejumlah aplikasi, tampaknya Microsoft akhirnya menerimanya sebagai bug di .NET 4 CLR yang menyebabkan hal ini terjadi. http://support.microsoft.com/kb/2640103 .
Saya sebelumnya telah "memperbaikinya" dengan memaksa pengumpul sampah untuk berjalan dalam mode server (gcServer enabled = "true" di app.config) seperti yang dijelaskan di artikel Microsoft yang ditautkan oleh Think Before Coding. Ini pada dasarnya memaksa semua utas dalam aplikasi untuk berhenti sementara selama pengumpulan menghapus kemungkinan utas lain mengakses memori yang dimanipulasi oleh GC. Saya senang menemukan bahwa bertahun-tahun saya sia-sia mencari "bug" dalam kode saya atau pustaka yang tidak dikelola pihak ke-3 lainnya tidak membuahkan hasil karena bug tersebut ada di kode Microsoft, bukan milik saya.
sumber
Bisa jadi bug dengan GC bersamaan http://support.microsoft.com/kb/2679415
sumber
Memiliki kesalahan yang sama persis pada kotak WinXP dengan build terbaru dari kode .NET 4 saya. Memeriksa bangunan sebelumnya - sekarang mereka juga mogok! Ok, jadi bukan aku :). Tidak ada saran di sini / di atas yang membantu.
Laporan yang jauh lebih baru (2018-05-09) dari masalah yang sama: Aplikasi Crash dengan kode keluar 80131506 .
Akar masalah masih belum diketahui (mesin tidak diperbarui dan hanya memiliki sedikit kegunaan), tetapi itu berhasil untuk saya !
sumber
Dalam kasus saya, pengecualian ini terjadi ketika ruang disk habis dan .NET tidak dapat mengalokasikan memori di Memori Virtual Windows.
Dalam event log saya melihat kesalahan ini:
Popup aplikasi: Windows - Memori Virtual Minimum Terlalu Rendah: Sistem Anda kekurangan memori virtual. Windows meningkatkan ukuran file paging memori virtual Anda. Selama proses ini, permintaan memori untuk beberapa aplikasi mungkin ditolak.
Dan kesalahan sebelumnya:
C: disk sudah mencapai atau mendekati kapasitas. Anda mungkin perlu menghapus beberapa file.
sumber
Dalam kasus saya, masalahnya adalah pustaka C ++ / CLI di mana ada panggilan ke NtQuerySystemInformation ; untuk beberapa jenis alasan kadang-kadang (dan dalam keadaan misterius ), ketika itu disebut tumpukan CLR rusak dan aplikasi macet.
Saya telah menyelesaikan masalah menggunakan "tumpukan khusus" yang dibuat dengan HeapCreate dan mengalokasikan buffer yang digunakan oleh fungsi itu di sana.
sumber
Saya tidak yakin ini dapat membantu semua orang, tetapi saya dapat menyiasatinya dengan berlari
... di jalan
{Visual_Studio_root}\Common7\Ide
Saya mengalami kesalahan berikut di event log dan VS baru saja mogok dan memulai ulang sepanjang waktu:
sumber
Dalam kasus saya, masalahnya adalah karena pengalihan pengikatan duplikat di web.config saya. Info selengkapnya di sini .
Saya berasumsi itu karena NuGet memodifikasi pengalihan pengikatan, tetapi misalnya terlihat seperti ini:
Menghapus semua duplikat menyelesaikan masalah.
sumber
Dalam kasus saya, kesalahan ini terjadi saat masuk ke aplikasi SAP Business One 9.1. Dalam acara Windows saya juga dapat menemukan acara kesalahan lain selain yang dilaporkan oleh OP:
Mesin menjalankan Windows 8.1, dengan .NET Framework 4.0 diinstal dan tanpa versi 4.5. Seperti yang terlihat dari internet bahwa ini juga bisa menjadi bug di .NET 4, saya mencoba menginstal .NET Framework 4.5.2 dan saya menyelesaikan masalah.
sumber
Versi Kerangka Kerja: v4.0.30319 Deskripsi: Proses dihentikan karena pengecualian yang tidak tertangani. Info Pengecualian: System.Reflection.TargetInvocationException
Saya telah menghadapi Kesalahan ini, Aplikasi berfungsi dengan baik pada beberapa PC dan pada beberapa PC yang memberikan kesalahan di atas. Saya menghapus Framework 4.5 dan menginstal ulang ini menyelesaikan masalah saya.
Bersorak.
sumber
Ini mungkin pengecualian yang terjadi di finalizer. Jika Anda melakukan Pola ~ Class () {Dispose (false); } periksa apa yang Anda buang sebagai sumber daya yang tidak terkelola. Coba saja .. tangkap di sana dan Anda akan baik-baik saja.
Kami menemukan masalah ini karena kami mengalami kegagalan misterius ini tanpa log. Kami melakukan pola yang biasa disarankan menggunakan "Void Dispose (bool disposing)".
Melihat jawaban atas pertanyaan tentang finalis ini, kami menemukan kemungkinan tempat di mana Pembuangan sumber daya yang tidak terkelola dapat menimbulkan pengecualian.
Ternyata di suatu tempat kami tidak membuang objek dengan benar sehingga finalizer mengambil alih diposal sumber daya yang tidak terkelola sehingga terjadi pengecualian.
Dalam hal ini menggunakan Kafka Rest API untuk membersihkan klien dari Kafka. Tampaknya itu melemparkan pengecualian di beberapa titik kemudian masalah ini terjadi.
sumber
Dalam kasus saya, masalahnya terkait dengan " Merujuk pustaka standar .NET di proyek asp.net klasik " dan dua masalah ini
https://github.com/dotnet/standard/issues/873
https://github.com/App-vNext/Polly/issues/628
dan menurunkan versi ke Polly v6 sudah cukup untuk mengatasinya
sumber
Saya tidak pernah tahu mengapa ini terjadi pada saya. Itu secara konsisten dapat direproduksi untuk salah satu aplikasi saya, tetapi hilang hanya setelah reboot.
Saya menjalankan Windows 2004 Build 19582.1001 (Insider Preview) dengan .net-4.8 dan saya juga tidak akan terkejut jika hal ini disebabkan oleh sesuatu seperti kesalahan memori perangkat keras. Selain itu, aplikasi saya memuat beberapa kode yang tidak dikelola dan menginisialisasinya, jadi saya tidak dapat membuktikan bahwa kerusakan bukan berasal dari itu.
sumber
Setiap 5-10 menit pool aplikasi saya terus mogok dengan kode keluar ini. Saya tidak ingin merusak kepercayaan Anda kepada Pengumpul Sampah, tetapi solusi berikut berhasil untuk saya.
Saya menambahkan Pekerjaan yang menelepon
GC.GetTotalMemory(true)
setiap menit.Saya kira, untuk beberapa alasan, GC tidak secara otomatis memeriksa memori cukup sering untuk sejumlah besar objek sekali pakai yang saya gunakan.
sumber