Alat analisis heap (dotnet-gcdump)
Artikel ini berlaku untuk: ✔️ dotnet-gcdump
versi 3.1.57502 dan versi yang lebih baru
Instal
Ada dua cara untuk mengunduh dan menginstal dotnet-gcdump
:
alat global dotnet:
Untuk menginstal versi rilis terbaru paket
dotnet-gcdump
NuGet, gunakan perintah penginstalan alat dotnet:dotnet tool install --global dotnet-gcdump
Pengunduhan langsung:
Unduh alat yang dapat dijalankan yang cocok dengan platform Anda:
OS Platform Windows Arm Arm64 x86 x64 | | | Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Catatan
Untuk menggunakan dotnet-gcdump
pada aplikasi x86, Anda memerlukan alat versi x86 yang sesuai.
Sinopsis
dotnet-gcdump [-h|--help] [--version] <command>
Deskripsi
Alat dotnet-gcdump
global mengumpulkan crash dump GC (Pengumpul Sampah) dari proses .NET langsung menggunakan EventPipe. Crash dump pengumpulan sampah dibuat dengan memicu pengumpulan sampah dalam proses target, mengaktifkan peristiwa khusus, dan meregenerasi grafik akar objek dari aliran peristiwa. Proses ini memungkinkan crash dump pengumpulan sampah dikumpulkan saat proses berjalan dan dengan overhead minimal. Crash dump ini berguna untuk beberapa skenario:
- Membandingkan jumlah objek pada timbunan pada beberapa titik waktu.
- Menganalisis akar objek (menjawab pertanyaan seperti, "apa yang masih memiliki referensi ke jenis ini?").
- Mengumpulkan statistik umum tentang jumlah objek pada heap.
Lihat crash dump pengumpulan sampah yang diambil dari dotnet-gcdump
Di Windows, file .gcdump
dapat dilihat di PerfView untuk analisis atau di Visual Studio. Saat ini, tidak ada cara untuk membuka .gcdump
pada platform non-Windows.
Anda dapat mengumpulkan beberapa .gcdump
dan membukanya secara bersamaan di Visual Studio untuk mendapatkan pengalaman perbandingan.
Opsi
--version
Menampilkan versi
dotnet-gcdump
utilitas.-h|--help
Tampilkan bantuan baris perintah.
Perintah
Perintah |
---|
dotnet-gcdump collect |
dotnet-gcdump ps |
dotnet-gcdump report |
dotnet-gcdump collect
Mengumpulkan crash dump pengumpulan sampah dari proses yang sedang berjalan.
Peringatan
Untuk berjalan di tumpukan pengumpulan sampah, perintah ini memicu pengumpulan sampah generasi 2 (penuh), yang dapat menangguhkan runtime untuk waktu yang lama, terutama ketika tumpukan pengumpulan sampah besar. Jangan gunakan perintah ini di lingkungan yang sensitif terhadap performa saat tumpukan pengumpulan sampah besar.
Sinopsis
dotnet-gcdump collect [-h|--help] [-p|--process-id <pid>] [-o|--output <gcdump-file-path>] [-v|--verbose] [-t|--timeout <timeout>] [-n|--name <name>]
Opsi
-h|--help
Tampilkan bantuan baris perintah.
-p|--process-id <pid>
ID proses untuk mengumpulkan cadangan pengumpulan sampah.
-o|--output <gcdump-file-path>
Jalur tempat crash dump pengumpulan sampah yang dikumpulkan harus ditulis. Default ke .\YYYYMMDD_HHMMSS_<pid>.gcdump.
-v|--verbose
Keluarkan log saat mengumpulkan crash dump pengumpulan sampah.
-t|--timeout <timeout>
Menyerahlah untuk mengumpulkan crash dump pengumpulan sampah jika membutuhkan waktu lebih lama dari detik ini. Nilai default adalah 30.
-n|--name <name>
Nama dari proses untuk mengumpulkan crash dump pengumpulan sampah.
Catatan
Di Linux dan macOS, perintah ini mengharapkan aplikasi target dan dotnet-gcdump
untuk membagikan variabel lingkungan TMPDIR
yang sama. Jika tidak, perintah akan kehabisan waktu.
Catatan
Untuk mengumpulkan crash dump pengumpulan sampah menggunakan dotnet-gcdump
, 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.
dotnet-gcdump ps
Mencantumkan proses dotnet tempat crash dump pengumpulan sampah dapat dikumpulkan. dotnet-gcdump 6.0.320703 dan yang lebih baru, juga menampilkan argumen baris perintah yang dimulai setiap proses, jika tersedia.
Sinopsis
dotnet-gcdump ps [-h|--help]
Contoh
Misalkan Anda memulai aplikasi yang berjalan lama menggunakan perintah dotnet run --configuration Release
. Di jendela lain, Anda menjalankan perintah dotnet-gcdump ps
. Output yang akan Anda lihat adalah sebagai berikut. Argumen baris perintah, jika ada, ditampilkan menggunakan versi 6.0.320703 dotnet-gcdump
dan yang lebih baru.
> dotnet-gcdump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-gcdump report <gcdump_filename>
Buat laporan dari crash dump pengumpulan sampah yang dihasilkan sebelumnya atau dari proses yang sedang berjalan, dan tulis ke stdout
.
Sinopsis
dotnet-gcdump report [-h|--help] [-p|--process-id <pid>] [-t|--report-type <HeapStat>]
Opsi
-h|--help
Tampilkan bantuan baris perintah.
-p|--process-id <pid>
ID proses untuk mengumpulkan cadangan pengumpulan sampah.
-t|--report-type <HeapStat>
Jenis laporan yang akan dihasilkan. Opsi yang tersedia: heapstat (default).
Pecahkan masalah
Tidak ada informasi jenis dalam gcdump.
Sebelum .NET Core 3.1, ada masalah di mana cache jenis tidak dibersihkan antara gcdump ketika dipanggil dengan EventPipe. Hal ini mengakibatkan peristiwa yang diperlukan untuk menentukan informasi jenis yang tidak dikirim untuk gcdump kedua dan berikutnya. Ini diperbaiki di .NET Core 3.1-preview2.
COM dan jenis statis tidak ada di crash dump pengumpulan sampah.
Sebelum .NET Core 3.1, ada masalah tempat jenis statis dan COM tidak dikirim ketika crash dump pengumpulan sampah dipanggil melalui EventPipe. Ini telah diperbaiki di .NET Core 3.1.
dotnet-gcdump
tidak dapat menghasilkan file.gcdump
karena informasi yang hilang, misalnya, [Kesalahan] Pengecualian selama gcdump: System.ApplicationException: File ETL menunjukkan awal heap dump tetapi bukan penyelesaiannya.. Atau, file.gcdump
tidak menyertakan seluruh tumpukan.dotnet-gcdump
bekerja dengan mengumpulkan jejak peristiwa yang dipancarkan oleh pengumpul sampah selama pengumpulan generasi 2 yang diinduksi. Jika heap cukup besar, atau tidak ada cukup memori untuk menskalakan buffer peristiwa, maka peristiwa yang diperlukan untuk merekonstruksi grafik tumpukan dari jejak dapat dihilangkan. Dalam hal ini, untuk mendiagnosis masalah dengan tumpukan, disarankan untuk mengumpulkan crash dump dari proses.dotnet-gcdump
tampaknya menyebabkan masalah Kehabisan Memori di lingkungan yang dibatasi memori.dotnet-gcdump
bekerja dengan mengumpulkan jejak peristiwa yang dipancarkan oleh pengumpul sampah selama pengumpulan generasi 2 yang diinduksi. Buffer untuk kumpulan peristiwa dimiliki oleh aplikasi target dan dapat tumbuh hingga 256 MB.dotnet-gcdump
sendiri juga menggunakan memori. Jika lingkungan Anda dibatasi memori, pastikan untuk memperhitungkan faktor-faktor ini saat mengumpulkan gcdump untuk mencegah kesalahan.