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-gcdump
iki yolu vardır:
dotnet genel aracı:
NuGet paketinin en son sürüm sürümünü
dotnet-gcdump
yüklemek için dotnet tool install komutunu kullanın:dotnet tool install --global dotnet-gcdump
Doğrudan indirme:
Platformunuzla eşleşen araç yürütülebilir dosyasını indirin:
OS Platform Windows x86 | x64 | Arm | Arm64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Not
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 .gcdump
s 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ı.
Not
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ı.
Not
kullanarak dotnet-gcdump
bir 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 Release
kullanarak 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 stdout
yazı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.