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-gcdump versi 10.0 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-gcdumpNuGet, gunakan perintah penginstalan alat dotnet:dotnet tool install --global dotnet-gcdumpPengunduhan langsung:
Unduh alat yang dapat dijalankan yang cocok dengan platform Anda:
Sistem operasi Plattform Windows 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 .gcdumpdan membukanya secara bersamaan di Visual Studio untuk mendapatkan pengalaman perbandingan.
Opsi
--versionMenampilkan versi
dotnet-gcdumputilitas.-h|--helpTampilkan bantuan baris perintah.
Perintah
| Perintah |
|---|
| dotnet-gcdump collect |
| dotnet-gcdump ps |
| laporan dotnet-gcdump |
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>] [--dsrouter <ios|ios-sim|android|android-emu>]
Opsi
-h|--helpTampilkan bantuan baris perintah.
-p|--process-id <pid>ID proses untuk mengumpulkan cadangan pengumpulan sampah.
Catatan
Di Linux dan macOS, menggunakan opsi ini memerlukan aplikasi target dan
dotnet-gcdumpuntuk berbagi variabel lingkungan yang samaTMPDIR. Jika tidak, perintah akan kehabisan waktu.-o|--output <gcdump-file-path>Jalur tempat crash dump pengumpulan sampah yang dikumpulkan harus ditulis. Default ke .\YYYYMMDD_HHMMSS_<pid>.gcdump.
-v|--verboseKeluarkan 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, menggunakan opsi ini memerlukan aplikasi target dan
dotnet-gcdumpuntuk berbagi variabel lingkungan yang samaTMPDIR. Jika tidak, perintah akan kehabisan waktu.--diagnostic-port <port-address[,(listen|connect)]>Mengatur port diagnostik yang digunakan untuk berkomunikasi dengan proses yang akan dibuang. dotnet-gcdump dan runtime .NET di dalam proses target harus menyetujui alamat port, dengan satu mendengarkan dan yang lainnya terhubung. dotnet-gcdump secara otomatis menentukan port yang benar saat melampirkan menggunakan
--process-idopsi atau--name. Biasanya hanya perlu menentukan port secara eksplisit saat berkomunikasi ke proses yang berjalan di dalam kontainer yang bukan bagian dari namespace proses saat ini.Perbedaannya
port-addressdengan OS:- Linux dan macOS - jalur ke soket domain Unix seperti
/foo/tool1.socket. - Windows - jalur ke pipa bernama seperti
\\.\pipe\my_diag_port1. - Android, iOS, dan tvOS - IP:port seperti
127.0.0.1:9000.
Secara default, dotnet-gcdump mendengarkan di alamat yang ditentukan. Anda dapat meminta dotnet-gcdump untuk terhubung sebagai gantinya dengan menambahkan
,connectsetelah alamat. Misalnya,--diagnostic-port /foo/tool1.socket,connectakan terhubung ke proses runtime .NET yang mendengarkan/foo/tool1.socketsoket domain Unix.- Linux dan macOS - jalur ke soket domain Unix seperti
--dsrouter <ios|ios-sim|android|android-emu>Memulai dotnet-dsrouter dan menyambungkannya. Memerlukan dotnet-dsrouter untuk diinstal. Jalankan
dotnet-dsrouter -huntuk informasi selengkapnya.
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.
Examples
Kumpulkan cadangan GC dari proses dengan ID proses 1902:
> dotnet-gcdump collect --process-id 1902 Writing gcdump to './20250601_121500_1902.gcdump'... Finished writing 5763432 bytes.Kumpulkan cadangan GC dari proses dengan ID proses 1902 dan simpan ke jalur kustom:
> dotnet-gcdump collect --process-id 1902 --output ./myapp-dump.gcdump Writing gcdump to './myapp-dump.gcdump'... Finished writing 5763432 bytes.Kumpulkan cadangan GC dari proses berdasarkan nama dengan output verbose:
> dotnet-gcdump collect --name my-aspnet-server --verbose [20:54:11] Starting gcdump collection... [20:54:11] Triggering GC... [20:54:12] Writing gcdump to './20250601_205412_4521.gcdump'... Finished writing 5763432 bytes.Kumpulkan cadangan GC dengan batas waktu kustom 60 detik:
> dotnet-gcdump collect --process-id 1902 --timeout 60 Writing gcdump to './20250601_121500_1902.gcdump'... Finished writing 5763432 bytes.
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|--helpTampilkan 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).
Examples
Buat laporan statistik timbunan dari file yang dibuat
.gcdumpsebelumnya:> dotnet-gcdump report ./20250601_121500_1902.gcdumpOutput menampilkan statistik jenis:
Size (Bytes) Count Type ============== ===== ==== 1,603,588,000 22,000,000 System.String 201,096,000 2,010,000 System.Byte[] 100,000,000 1,000,000 System.Char[] 50,000,000 500,000 System.Object[] 25,000,000 250,000 MyApp.CustomerHasilkan laporan statistik timbunan dari proses yang sedang berjalan dengan ID proses 1902:
> dotnet-gcdump report --process-id 1902
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-gcdumptidak dapat menghasilkan file.gcdumpkarena informasi yang hilang, misalnya, [Kesalahan] Pengecualian selama gcdump: System.ApplicationException: File ETL menunjukkan awal heap dump tetapi bukan penyelesaiannya.. Atau, file.gcdumptidak menyertakan seluruh tumpukan.dotnet-gcdumpbekerja 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-gcdumptampaknya menyebabkan masalah Kehabisan Memori di lingkungan yang dibatasi memori.dotnet-gcdumpbekerja 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-gcdumpsendiri juga menggunakan memori. Jika lingkungan Anda dibatasi memori, pastikan untuk memperhitungkan faktor-faktor ini saat mengumpulkan gcdump untuk mencegah kesalahan.