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:

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

  • --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).

Pemecahan 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.