Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini berlaku untuk: ✔️ dotnet-dump versi 3.0.47001 dan versi yang lebih baru
Catatan
dotnet-dump untuk macOS hanya didukung dengan .NET 5 dan versi yang lebih baru.
Instal
Ada dua cara untuk mengunduh dan menginstal dotnet-dump:
perangkat global dotnet:
Untuk menginstal versi rilis terbaru dari
dotnet-dumppaket NuGet, gunakan perintah dotnet tool install:dotnet tool install --global dotnet-dumpPengunduhan langsung:
Unduh alat yang dapat dijalankan yang cocok dengan platform Anda:
Sistem operasi Plattform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Lengan | Arm64 | musl-x64 | musl-Arm64
Catatan
Untuk menggunakan dotnet-dump pada aplikasi x86, Anda memerlukan alat versi x86 yang sesuai.
Sinopsis
dotnet-dump [-h|--help] [--version] <command>
Deskripsi
Alat global dotnet-dump adalah cara untuk mengumpulkan dan menganalisis cadangan di Windows, Linux, dan macOS tanpa debugger asli yang terlibat. Alat ini penting pada platform seperti Alpine Linux di mana lldb yang bekerja secara penuh tidak tersedia. Alat dotnet-dump ini memungkinkan Anda menjalankan perintah SOS untuk menganalisis crash dan pengumpul sampah (GC), tetapi ini bukan debugger asli sehingga hal-hal seperti menampilkan bingkai tumpukan asli tidak didukung.
Opsi
--versionMenampilkan versi utilitas dotnet-dump.
-h|--helpTampilkan bantuan baris perintah.
Perintah
| Perintah |
|---|
| dotnet-dump kumpulkan |
| Analisis dotnet-dump |
| dotnet-dump ps |
dotnet-dump kumpulkan
Mengambil cadangan dari proses.
Sinopsis
dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]
Opsi
-h|--helpTampilkan bantuan baris perintah.
-p|--process-id <PID>Menentukan nomor ID proses untuk mengumpulkan crash dump.
-n|--name <name>Menentukan nomor ID proses untuk mengumpulkan crash dump.
--type <Full|Heap|Mini>Menentukan jenis crash dump, yang menentukan jenis informasi yang dikumpulkan dari proses. Terdapat tiga jenis:
-
Full- Crash dump terbesar yang berisi semua memori termasuk gambar modul. -
Heap- Crash dump besar dan relatif komprehensif yang berisi daftar modul, daftar utas, semua tumpukan, informasi pengecualian, menangani informasi, dan semua memori kecuali untuk gambar yang dipetakan. -
Mini- Crash dump kecil yang berisi daftar modul, daftar utas, informasi pengecualian, dan semua tumpukan. -
Triage- Cadangan kecil yang berisi daftar modul, daftar utas, informasi pengecualian, semua tumpukan, dan PII dihapus.
Jika tidak ditentukan,
Fulladalah default.-
-o|--output <output_dump_path>Jalur lengkap dan nama file tempat crash dump yang dikumpulkan harus ditulis. Pastikan bahwa pengguna tempat proses dotnet berjalan memiliki izin tulis ke direktori yang ditentukan.
Jika tidak ditentukan:
- Default ke .\dump_YYYYMMDD_HHMMSS.dmp pada Windows.
- Default ke ./core_YYYYMMDD_HHMMSS di Linux dan macOS.
YYYYMMDD adalah Tahun/Bulan/Hari dan HHMMSS adalah Jam/Menit/Detik.
--diagMengaktifkan pembuatan log diagnostik pengumpulan crash dump.
--crashreportMengaktifkan pembuatan laporan crash.
Catatan
Di Linux dan macOS, perintah ini mengharapkan aplikasi target dan dotnet-dump untuk membagikan variabel lingkungan TMPDIR yang sama. Jika tidak, perintah akan kehabisan waktu.
Catatan
Untuk mengumpulkan crash dump menggunakan dotnet-dump, metrik perlu dijalankan sebagai pengguna yang sama dengan pengguna yang menjalankan proses target atau sebagai akar. Jika tidak, alat akan gagal membuat koneksi dengan proses target.
Catatan
Mengumpulkan cadangan penuh atau timbunan dapat menyebabkan OS ke halaman dalam memori virtual yang substansial untuk proses target. Jika proses target berjalan dalam kontainer dengan batas memori yang diberlakukan, peningkatan penggunaan memori dapat menyebabkan OS mengakhiri kontainer jika batas terlampaui. Sebaiknya uji untuk memastikan batas memori diatur cukup tinggi. Opsi lain adalah mengubah atau menghapus batas sementara sebelum pengumpulan cadangan jika lingkungan Anda mendukungnya.
Analisis dotnet-dump
Memulai shell interaktif untuk menjelajahi cadangan. Shell menerima berbagai perintah SOS.
Sinopsis
dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]
Argumen
<dump_path>Menentukan jalur ke file crash dump untuk dianalisis.
Opsi
-c|--command <debug_command>Menjalankan perintah saat mulai. Beberapa instans parameter ini dapat digunakan dalam pemanggilan untuk menautkan perintah. Perintah akan dijalankan dalam urutan yang disediakan pada baris perintah. Jika Anda ingin dotnet dump keluar setelah perintah, perintah terakhir Anda harus 'exit'.
Menganalisis perintah SOS
| Perintah | Fungsi |
|---|---|
analyzeoom |
Menampilkan info OOM terakhir yang terjadi pada permintaan alokasi ke tumpukan GC. |
clrmodules |
Mencantumkan modul terkelola dalam proses. |
clrstack |
Menyediakan jejak tumpukan kode terkelola saja. |
clrthreads |
Mencantumkan utas terkelola yang sedang berjalan. |
clru |
Menampilkan pembongkaran yang dianotasi dari metode terkelola. |
d atau readmemory |
Mencadangkan isi memori. |
dbgout |
Mengaktifkan/menonaktifkan (-off) pengelogan SOS internal. |
dso |
Menampilkan semua objek terkelola yang ditemukan di dalam batas tumpukan saat ini. |
dumpalc |
Menampilkan detail tentang AssemblyLoadContext yang dikumpulkan tempat objek yang ditentukan dimuat. |
dumparray |
Menampilkan detail tentang array terkelola. |
dumpasync |
Menampilkan info tentang mesin status asinkron pada tumpukan yang dikumpulkan sampah. |
dumpassembly |
Menampilkan detail tentang rakitan. |
dumpclass |
Menampilkan informasi tentang struktur EEClass pada alamat yang ditentukan. |
dumpconcurrentdictionary |
Menampilkan isi kamus bersamaan. |
dumpconcurrentqueue |
Menampilkan isi antrean bersamaan. |
dumpdelegate |
Menampilkan informasi tentang delegasi. |
dumpdomain |
Menampilkan informasi tentang semua rakitan dalam semua AppDomains atau yang ditentukan. |
dumpgcdata |
Menampilkan informasi tentang data GC. |
dumpgen |
Menampilkan isi timbunan untuk pembuatan yang ditentukan. |
dumpheap |
Menampilkan informasi tentang tumpukan sampah dan statistik pengumpulan tentang objek. |
dumpil |
Menampilkan bahasa perantara umum (CIL) yang terkait dengan metode terkelola. |
dumplog |
Menulis konten log tekanan dalam memori ke file yang ditentukan. |
dumpmd |
Menampilkan informasi tentang struktur MethodDesc pada alamat yang ditentukan. |
dumpmodule |
Menampilkan informasi tentang modul pada alamat yang ditentukan. |
dumpmt |
Menampilkan informasi tentang tabel metode pada alamat yang ditentukan. |
dumpobj |
Menampilkan info objek pada alamat yang ditentukan. |
dumpruntimetypes |
Menemukan semua objek System.RuntimeType di tumpukan GC dan mencetak nama jenis dan MethodTable yang mereka rujuk juga. |
dumpsig |
Mencadangkan tanda tangan metode atau bidang yang ditentukan oleh <sigaddr> <moduleaddr>. |
dumpsigelem |
Mencadangkan satu elemen objek tanda tangan. |
dumpstackobjects |
Menampilkan semua objek terkelola yang ditemukan di dalam batas tumpukan saat ini. |
dumpvc |
Menampilkan info tentang bidang kelas nilai. |
eeheap |
Menampilkan informasi tentang memori proses yang digunakan oleh struktur data runtime bahasa umum internal. |
eestack |
Menjalankan dumpstack pada semua utas dalam proses. |
eeversion |
Menampilkan informasi tentang versi runtime dan SOS. |
ehinfo |
Menampilkan blok penanganan pengecualian dalam metode JIT-ed. |
exit atau quit |
Keluar dari mode interaktif. |
finalizequeue |
Menampilkan semua objek yang terdaftar untuk finalisasi. |
findappdomain |
Mencoba mengatasi AppDomain objek GC. |
gchandles |
Menampilkan statistik tentang handel pengumpul sampah dalam prosesnya. |
gcheapstat |
Menampilkan statistik tentang pengumpul sampah. |
gcinfo |
Menampilkan pengodean JIT GC untuk metode . |
gcroot |
Menampilkan info tentang referensi (atau akar) ke objek pada alamat yang ditentukan. |
gcwhere |
Menampilkan lokasi dalam tumpukan GC dari alamat yang ditentukan. |
histclear |
Merilis sumber daya apa pun yang digunakan oleh keluarga perintah Hist. |
histinit |
Menginisialisasi struktur SOS dari log tekanan yang disimpan dalam debuggee. |
histobj |
Memeriksa semua catatan relokasi log tekanan dan menampilkan rantai relokasi pengumpulan sampah yang mungkin menyebabkan alamat yang diteruskan sebagai argumen. |
histobjfind |
Menampilkan semua entri log yang mereferensikan objek pada alamat yang ditentukan. |
histroot |
Menampilkan informasi yang terkait dengan promosi dan relokasi akar yang ditentukan. |
histstats |
Menampilkan statistik log stres. |
ip2md |
Menampilkan MethodDesc struktur pada alamat yang ditentukan dalam kode yang telah dikompilasi JIT. |
listnearobj |
Menampilkan objek sebelumnya dan menggantikan alamat yang ditentukan. |
logopen |
Mengaktifkan pengelogan file konsol. |
logclose |
Menonaktifkan pengelogan file konsol. |
logging |
Mengaktifkan/menonaktifkan pengelogan SOS internal. |
lm atau modules |
Menampilkan modul asli dalam proses. |
name2ee |
Menampilkan struktur MethodTable dan EEClass untuk jenis atau metode yang ditentukan dalam modul yang ditentukan. |
objsize |
Menampilkan ukuran objek yang ditentukan. |
parallelstacks |
Menampilkan tumpukan utas gabungan yang mirip dengan panel 'Tumpukan Paralel' Visual Studio. |
pathto |
Menampilkan jalur GC dari <root> ke <target>. |
pe atau printexception |
Menampilkan dan memformat bidang dari objek apa pun yang berasal dari kelas Exception pada alamat yang ditentukan. |
r atau registers |
Menampilkan daftar utas. |
runtimes |
Mencantumkan runtime dalam target atau mengubah runtime default. |
setclrpath |
Mengatur jalur untuk memuat file coreclr dac/dbi menggunakan setclrpath <path>. |
setsymbolserver |
Mengaktifkan dukungan server simbol. |
sos |
Menjalankan berbagai perintah debugging coreclr. Gunakan sintaks sos <command-name> <args>. Untuk informasi selengkapnya, lihat 'soshelp'. |
soshelp atau help |
Menampilkan semua perintah yang tersedia. |
soshelp <command> atau help <command> |
Menampilkan perintah yang ditentukan. |
syncblk |
Menampilkan info pemegang SyncBlock. |
taskstate |
Menampilkan status Tugas dalam format yang dapat dibaca manusia. |
threadpool |
Menampilkan info tentang kumpulan utas runtime. |
threadpoolqueue |
Menampilkan item kerja kumpulan utas yang diantrekan. |
threadstate |
Cukup mencetak arti dari status utas. |
threads <threadid> atau setthread <threadid> |
Mengatur atau menampilkan ID utas saat ini untuk perintah SOS. |
timerinfo |
Menampilkan informasi tentang timer yang sedang berjalan. |
token2ee |
Menampilkan struktur MethodTable dan struktur MethodDesc untuk token dan modul yang ditentukan. |
traverseheap |
Menulis informasi tumpukan ke file dalam format yang dipahami oleh CLR Profiler. |
verifyheap |
Memeriksa tumpukan GC untuk tanda-tanda kerusakan. |
verifyobj |
Memeriksa objek yang diteruskan sebagai argumen untuk tanda-tanda kerusakan. |
Catatan
Detail tambahan dapat ditemukan di Ekstensi Debugging SOS untuk .NET.
dotnet-dump ps
Mencantumkan proses dotnet tempat crash dump dapat dikumpulkan.
Versi 6.0.320703 dotnet-dump dan versi yang lebih baru juga menampilkan argumen baris perintah yang digunakan setiap proses, jika tersedia.
Sinopsis
dotnet-dump ps [-h|--help]
Contoh
Misalkan Anda memulai aplikasi yang berjalan lama menggunakan perintah dotnet run --configuration Release. Di jendela lain, Anda menjalankan perintah dotnet-dump ps. Output yang akan Anda lihat adalah sebagai berikut. Argumen baris perintah, jika ada, ditampilkan di versi 6.0.320703 dotnet-dump dan yang lebih baru.
> dotnet-dump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Menggunakan dotnet-dump
Langkah pertama adalah mengumpulkan cadangan. Langkah ini dapat dilewati jika cadangan inti telah dibuat. Sistem operasi atau fitur pembuatan dump bawaan runtime .NET Core masing-masing dapat membuat cadangan inti.
$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete
Sekarang analisis crash dump inti dengan perintah analyze:
$ dotnet-dump analyze ./core_20190226_135850
Loading core dump: ./core_20190226_135850
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Tindakan ini memunculkan sesi interaktif yang menerima perintah seperti:
> clrstack
OS Thread Id: 0x573d (0)
Child SP IP Call Site
00007FFD28B42C58 00007fb22c1a8ed9 [HelperMethodFrame_PROTECTOBJ: 00007ffd28b42c58] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[]) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
00007FFD28B43210 00007fb22aa9cedf [GCFrame: 00007ffd28b43210]
00007FFD28B43610 00007fb22aa9cedf [GCFrame: 00007ffd28b43610]
Untuk melihat pengecualian yang tidak tertangani yang mematikan aplikasi Anda:
> pe -lines
Exception object: 00007fb18c038590
Exception type: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
InnerException: System.Exception, Use !PrintException 00007FB18C038368 to see more.
StackTrace (generated):
SP IP Function
00007FFD28B42DD0 0000000000000000 System.Private.CoreLib.dll!System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Private.CoreLib.dll!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xa7 [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.dll!SymbolTestApp.Program.Foo2(Int32, System.String)+0x34 [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.dll!SymbolTestApp.Program.Foo1(Int32, System.String)+0x3a [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.dll!SymbolTestApp.Program.Main(System.String[])+0x6e [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
StackTraceString: <none>
HResult: 80131604
Menganalisis kebocoran dan alokasi memori
Kebocoran memori terjadi ketika aplikasi Anda menyimpan referensi ke objek yang tidak lagi diperlukan, mencegah pengumpul sampah mengklaim kembali memori. Gunakan dotnet-dump untuk mengidentifikasi kebocoran memori, menemukan objek terbesar, dan memahami di mana memori sedang digunakan.
Untuk panduan lengkap men-debug kebocoran memori, lihat Debug kebocoran memori di .NET.
Mengidentifikasi objek terbesar
dumpheap Gunakan perintah dengan -stat opsi untuk melihat ringkasan objek pada timbunan, diurutkan menurut ukuran total:
> dumpheap -stat
Statistics:
MT Count TotalSize Class Name
00007f6c1eeefba8 576 59904 System.Reflection.RuntimeMethodInfo
00007f6c1dc021c8 1749 95696 System.SByte[]
00000000008c9db0 3847 116080 Free
00007f6c1e784a18 175 128640 System.Char[]
00007f6c1dbf5510 217 133504 System.Object[]
00007f6c1dc014c0 467 416464 System.Byte[]
00007f6c21625038 6 4063376 testwebapi.Controllers.Customer[]
00007f6c20a67498 200000 4800000 testwebapi.Controllers.Customer
00007f6c1dc00f90 206770 19494060 System.String
Total 428516 objects
Output ini menunjukkan jenis mana yang paling banyak mengonsumsi memori. Dalam contoh ini, System.String objek mengonsumsi sekitar 19 MB, dan Customer objek mengonsumsi sekitar 4,8 MB.
Mengidentifikasi objek menurut namespace layanan atau rakitan
Untuk menemukan modul atau namespace layanan mana yang menggunakan memori, gunakan -type opsi dengan nama jenis parsial untuk memfilter hasil:
> dumpheap -type MyCompany.Data -stat
Statistics:
MT Count TotalSize Class Name
00007f6c21625038 15000 3600000 MyCompany.Data.CustomerRecord
00007f6c21625040 8000 2560000 MyCompany.Data.OrderHistory
00007f6c21625048 2000 960000 MyCompany.Data.ProductCache
Total 25000 objects, 7120000 bytes
Pendekatan ini membantu Anda mengidentifikasi bagian mana dari basis kode Anda yang bertanggung jawab atas konsumsi memori.
Menemukan jumlah instansiasi tertinggi
Untuk melihat jenis mana yang memiliki instans terbanyak, terlepas dari ukuran total, lihat kolom Hitung dalam dumpheap -stat output. Objek dengan jumlah instans tinggi mungkin menunjukkan masalah pembuatan atau penembolokan objek yang tidak efisien:
> dumpheap -stat
Statistics:
MT Count TotalSize Class Name
00007f6c1dc00f90 206770 19494060 System.String
00007f6c20a67498 200000 4800000 testwebapi.Controllers.Customer
00007f6c1dc021c8 1749 95696 System.SByte[]
Contoh ini menunjukkan 206.770 String instans dan 200.000 Customer instans.
Menganalisis referensi objek dengan gcroot
Setelah mengidentifikasi objek besar atau banyak, gunakan gcroot untuk mengetahui mengapa objek tidak dikumpulkan.
gcroot Perintah menunjukkan rantai referensi dari akar GC ke objek tertentu:
> dumpheap -mt 00007f6c20a67498
Address MT Size
00007f6ad09421f8 00007f6c20a67498 24
...
> gcroot 00007f6ad09421f8
Thread 3f68:
00007F6795BB58A0 00007F6C1D7D0745 testwebapi.Controllers.CustomerCache.GetAll()
rbx: (interior)
-> 00007F6BDFFFF038 System.Object[]
-> 00007F69D0033570 testwebapi.Controllers.Processor
-> 00007F69D0033588 testwebapi.Controllers.CustomerCache
-> 00007F69D00335A0 System.Collections.Generic.List`1[[testwebapi.Controllers.Customer]]
-> 00007F6C000148A0 testwebapi.Controllers.Customer[]
-> 00007F6AD0942258 testwebapi.Controllers.Customer
Found 1 root.
Output ini menunjukkan bahwa Customer objek dipegang oleh CustomerCache objek, yang membantu Anda mengidentifikasi sumber kebocoran dalam kode Anda.
Menganalisis memori menurut ukuran objek
-min Gunakan opsi dan -max untuk memfilter objek menurut ukuran:
> dumpheap -min 100000 -stat
Statistics:
MT Count TotalSize Class Name
00007f6c21625038 6 4063376 testwebapi.Controllers.Customer[]
00007f6c1dc014c0 12 416464 System.Byte[]
Total 18 objects
Perintah ini hanya menunjukkan objek yang lebih besar dari 100.000 byte, membantu Anda fokus pada konsumen memori terbesar.
Menemukan kebuntuan
Gunakan dotnet-dump untuk mendiagnosis situasi kebuntuan di mana utas diblokir menunggu sumber daya. Untuk panduan penelusuran kesalahan kebuntuan lengkap, lihat Debug kebuntuan di .NET.
Mencantumkan semua utas
threads Gunakan perintah untuk melihat semua utas terkelola:
> threads
*0 0x1DBFF (121855)
1 0x1DC01 (121857)
2 0x1DC02 (121858)
...
Memeriksa tumpukan utas
Gunakan clrstack -all untuk melihat tumpukan panggilan semua utas:
> clrstack -all
Cari pola di mana beberapa utas diblokir atau Monitor.Enter primitif sinkronisasi serupa.
Menemukan pemilik kunci
syncblk Gunakan perintah untuk melihat utas mana yang menahan kunci dan utas mana yang menunggu:
> syncblk
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner
43 00000246E51268B8 603 1 0000024B713F4E30 5634 28 00000249654b14c0 System.Object
44 00000246E5126908 3 1 0000024B713F47E0 51d4 29 00000249654b14d8 System.Object
Kolom MonitorHeld memperlihatkan jumlah utas yang menunggu kunci. Kolom Info Alur Pemilik menunjukkan utas mana yang memiliki kunci.
Skenario analisis memori tingkat lanjut
Membandingkan beberapa cadangan
Untuk memahami pertumbuhan memori dari waktu ke waktu, kumpulkan beberapa cadangan dan bandingkan:
- Kumpulkan cadangan garis besar:
dotnet-dump collect -p <pid> -o baseline.dmp - Biarkan aplikasi Anda berjalan dan mengonsumsi lebih banyak memori.
- Kumpulkan cadangan kedua:
dotnet-dump collect -p <pid> -o after.dmp - Analisis kedua cadangan dan bandingkan hasilnya
dumpheap -stat.
Cari jenis yang memiliki instans yang jauh lebih banyak atau ukuran total yang lebih besar di cadangan kedua.
Menganalisis memori untuk jenis objek tertentu
Untuk mencadangkan semua instans dari jenis tertentu:
> dumpheap -type Customer
Address MT Size
00007f6ad09421f8 00007f6c20a67498 24
00007f6ad0942210 00007f6c20a67498 24
...
Kemudian gunakan dumpobj untuk memeriksa objek individual:
> dumpobj 00007f6ad09421f8
Name: testwebapi.Controllers.Customer
MethodTable: 00007f6c20a67498
EEClass: 00007f6c21625000
Size: 24(0x18) bytes
File: /app/testwebapi.dll
Fields:
MT Field Offset Type VT Attr Value Name
00007f6c1dc00f90 4000001 8 System.String 0 instance 00007f6ad09421f0 Name
00007f6c1dbf4c18 4000002 10 System.Int32 1 instance 42 Id
Mengumpulkan cadangan dalam kontainer Docker
dotnet-dump
ptrace membutuhkan kemampuan dalam kontainer. Cara umum untuk memberikannya adalah dengan memulai kontainer dengan --cap-add=SYS_PTRACE. Bergantung pada lingkungan Anda, Anda mungkin juga perlu menyesuaikan profil seccomp kontainer. Lihat Dumps: FAQ untuk bantuan mendiagnosis masalah konfigurasi keamanan kontainer.
Untuk menginstal
Pemecahan masalah pengumpulan cadangan
Pengumpulan cadangan mengharuskan proses untuk dapat memanggil ptrace. Jika Anda menghadapi masalah saat mengumpulkan cadangan, lingkungan yang Anda jalankan dapat dikonfigurasi untuk membatasi panggilan tersebut.
Lihat Dumps: FAQ kami untuk tips pemecahan masalah dan solusi potensial untuk masalah umum.