Aracılığıyla paylaş


Yığın çözümleme aracı (dotnet-gcdump)

Bu makale şunlar için geçerlidir: ✔️ dotnet-gcdump sürüm 3.1.57502 ve sonraki sürümler

Yükleme

İndirmenin ve yüklemenin dotnet-gcdumpiki yolu vardır:

Dekont

Bir x86 uygulamasında kullanmak dotnet-gcdump için aracın ilgili x86 sürümünü kullanmanız gerekir.

Özet

dotnet-gcdump [-h|--help] [--version] <command>

Açıklama

Genel araç, dotnet-gcdump EventPipe kullanarak canlı .NET işlemlerinin GC (Çöp Toplayıcı) dökümlerini toplar. GC dökümleri, hedef işlemde bir GC tetiklenerek, özel olaylar etkinleştirilerek ve olay akışından nesne köklerinin grafiği yeniden oluşturularak oluşturulur. Bu işlem, işlem çalışırken ve minimum ek yükle GC dökümlerinin toplanmasına olanak tanır. Bu dökümler çeşitli senaryolar için kullanışlıdır:

  • Yığındaki nesnelerin sayısını zaman içinde birkaç noktada karşılaştırma.
  • Nesnelerin köklerini analiz etme ("bu türe hala başvuruda bulunan nedir?") gibi soruları yanıtlama.
  • Yığındaki nesnelerin sayısıyla ilgili genel istatistikleri toplama.

dotnet-gcdump'tan yakalanan GC dökümünü görüntüleme

Windows'da dosyalar .gcdump analiz için PerfView'da veya Visual Studio'da görüntülenebilir. Şu anda Windows dışı platformlarda açmanın bir .gcdump yolu yoktur.

Karşılaştırma deneyimi elde etmek için birden çok .gcdumps toplayabilir ve bunları Visual Studio'da aynı anda açabilirsiniz.

Seçenekler

  • --version

    Yardımcı programın sürümünü dotnet-gcdump görüntüler.

  • -h|--help

    Komut satırı yardımlarını gösterir.

Komutlar

Command
dotnet-gcdump collect
dotnet-gcdump ps
dotnet-gcdump raporu

dotnet-gcdump collect

Şu anda çalışan bir işlemden GC dökümü toplar.

Uyarı

GC yığınında gezinmek için bu komut, özellikle GC yığını büyük olduğunda çalışma zamanını uzun süre askıya alabilen 2. nesil (tam) bir çöp toplama işlemini tetikler. GC yığını büyük olduğunda performansa duyarlı ortamlarda bu komutu kullanmayın.

Özet

dotnet-gcdump collect [-h|--help] [-p|--process-id <pid>] [-o|--output <gcdump-file-path>] [-v|--verbose] [-t|--timeout <timeout>] [-n|--name <name>]

Seçenekler

  • -h|--help

    Komut satırı yardımlarını gösterir.

  • -p|--process-id <pid>

    GC dökümünü toplamak için işlem kimliği.

  • -o|--output <gcdump-file-path>

    Toplanan GC dökümlerinin yazılması gereken yol. Varsayılan olarak .\YYYYMMDD_HHMMSS_<pid.gcdump> olarak gösterilir.

  • -v|--verbose

    GC dökümü toplanırken günlüğün çıktısını alma.

  • -t|--timeout <timeout>

    Bu kadar saniyeden uzun sürerse GC dökümünü toplamaktan vazgeçin. Varsayılan değer 30’dur.

  • -n|--name <name>

    GC dökümünü toplama işleminin adı.

Dekont

Linux ve macOS'ta bu komut hedef uygulamanın ve dotnet-gcdump aynı TMPDIR ortam değişkenini paylaşmasını bekler. Aksi takdirde, komut zaman aşımına uğradı.

Dekont

kullanarak dotnet-gcdumpbir GC dökümü toplamak için hedef işlemi çalıştıran kullanıcıyla aynı kullanıcı veya kök olarak çalıştırılması gerekir. Aksi takdirde araç hedef işlemle bağlantı kuramaz.

dotnet-gcdump ps

GC dökümlerinin toplanabileceği dotnet işlemlerini listeler. dotnet-gcdump 6.0.320703 ve üzeri, varsa her işlemin başlatıldığı komut satırı bağımsız değişkenlerini de görüntüler.

Özet

dotnet-gcdump ps [-h|--help]

Örnek

komutunu dotnet run --configuration Releasekullanarak uzun süre çalışan bir uygulama başlattığınızı varsayalım. Başka bir pencerede komutunu çalıştırırsınız dotnet-gcdump ps . Göreceğiniz çıkış aşağıdaki gibidir. Varsa, komut satırı bağımsız değişkenleri sürüm 6.0.320703 ve üzeri kullanılarak dotnet-gcdump gösterilir.

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

Önceden oluşturulmuş bir GC dökümü veya çalışan bir işlemden bir rapor oluşturun ve öğesine stdoutyazın.

Özet

dotnet-gcdump report [-h|--help] [-p|--process-id <pid>] [-t|--report-type <HeapStat>]

Seçenekler

  • -h|--help

    Komut satırı yardımlarını gösterir.

  • -p|--process-id <pid>

    GC dökümünü toplamak için işlem kimliği.

  • -t|--report-type <HeapStat>

    Oluşturulacak rapor türü. Kullanılabilir seçenekler: heapstat (varsayılan).

Sorun giderme

  • gcdump içinde tür bilgisi yok.

    .NET Core 3.1'in öncesinde, EventPipe ile çağrıldıklarında gcdumps arasında tür önbelleğinin temizlenmediği bir sorun vardı. Bu, ikinci ve sonraki gcdumps için tür bilgilerinin gönderilmediğini belirlemek için gereken olaylarla sonuçlandı. Bu, .NET Core 3.1-preview2 sürümünde düzeltildi.

  • COM ve statik türler GC dökümü içinde değildir.

    .NET Core 3.1'in öncesinde, GC dökümü EventPipe aracılığıyla çağrıldığında statik ve COM türlerinin gönderilmediği bir sorun vardı. Bu, .NET Core 3.1'de düzeltilmiştir.

  • dotnet-gcdump eksik bilgiler nedeniyle dosya .gcdump oluşturamıyor; örneğin, [Error] Gcdump sırasında özel durum: System.ApplicationException: ETL dosyası yığın dökümünün başlangıcını gösterir, ancak tamamlanmaz.. .gcdump Ya da dosya yığının tamamını içermez.

    dotnet-gcdump oluşturulan bir 2. nesil koleksiyonu sırasında çöp toplayıcı tarafından yayılan olayların bir izlemesini toplayarak çalışır. Yığın yeterince büyükse veya olay arabelleklerini ölçeklendirmek için yeterli bellek yoksa, yığın grafiğini izlemeden yeniden yapılandırmak için gereken olaylar bırakılabilir. Bu durumda yığınla ilgili sorunları tanılamak için işlemin dökümünün toplanması önerilir.

  • dotnet-gcdump , bellek kısıtlanmış bir ortamda Bellek Yetersiz sorununa neden oluyor gibi görünüyor.

    dotnet-gcdump oluşturulan bir 2. nesil koleksiyonu sırasında çöp toplayıcı tarafından yayılan olayların bir izlemesini toplayarak çalışır. Olay koleksiyonu için arabellek hedef uygulamaya aittir ve 256 MB'a kadar büyüyebilir. dotnet-gcdump kendisi de bellek kullanır. Ortamınız bellek kısıtlanmışsa, hataları önlemek için gcdump toplarken bu faktörleri hesaba eklediğinizden emin olun.