Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
EventPipe, ETW veya perf_events benzer şekilde izleme verilerini toplamak için kullanılabilen bir çalışma zamanı bileşenidir. EventPipe'in amacı, .NET geliştiricilerinin ETW veya perf_events gibi platforma özgü yüksek ayrıcalıklı bileşenlere güvenmek zorunda kalmadan .NET uygulamalarını kolayca izlemesine olanak sağlamaktır.
EventPipe, tanılama araçlarının birçoğunun arkasındaki mekanizmadır ve hem çalışma zamanı tarafından yayılan olayları hem de EventSource ile yazılmış özel olayları kullanmak için kullanılabilir.
Bu makale, EventPipe'e üst düzey bir genel bakıştır. EventPipe'in ne zaman ve nasıl kullanılacağını ve ihtiyaçlarınıza en uygun şekilde nasıl yapılandırıldığı açıklanır.
EventPipe ile ilgili temel bilgiler
EventPipe, çalışma zamanı bileşenleri (örneğin, Tam Zamanında derleyicisi veya çöp toplayıcı) tarafından yayılan olayları ve kitaplıklardaki ve kullanıcı kodundaki EventSource örneklerinden yazılan olayları toplar.
Olaylar daha sonra .nettrace dosya formatında seri hale getirilir ve işlem dışı kullanım için doğrudan bir dosyaya yazılabilir veya bir tanılama portağı üzerinden akış halinde iletilebilir.
NetTrace biçimi hakkında daha fazla bilgi edinmek için NetTrace biçimi belgelerine bakın.
EventPipe ile ETW/perf_events karşılaştırması
EventPipe, .NET çalışma zamanının bir parçasıdır ve .NET Core'un desteklediği tüm platformlarda aynı şekilde çalışacak şekilde tasarlanmıştır. Bu, , dotnet-countersve dotnet-gcdumpgibi dotnet-traceEventPipe tabanlı izleme araçlarının platformlar arasında sorunsuz bir şekilde çalışmasını sağlar.
Ancak EventPipe bir çalışma zamanı yerleşik bileşeni olduğundan kapsamı yönetilen kodla ve çalışma zamanının kendisiyle sınırlıdır. Diğer izleme araçları olmadan EventPipe olayları yalnızca yönetilen kod çerçevesi bilgilerine sahip yığın izlemelerini içerir. Diğer yönetilmeyen kullanıcı modu kitaplıklarından, yerel kod için CPU örneklemesinden veya çekirdek olaylarından olay almak için ETW veya perf_events gibi işletim sistemine özgü izleme araçlarını kullanın. Linux'ta perfcollect aracı , perf_events ve LTTng kullanarak otomatikleştirmeye yardımcı olur.
.NET 10'dan başlayarak Linux üzerinde EventPipe olayları user_events olarak yayarak yönetilen olayların, işletim sistemi/çekirdek olaylarının ve yerel çağrı yığınlarının tek bir birleşik izlemede toplanmasını sağlayabilir. Bu mod yönetici/kök ayrıcalıkları ve Linux çekirdeği 6.4+ gerektirir. Daha fazla bilgi için bkz. dotnet-trace collect-linux.
EventPipe ile ETW/perf_events arasındaki bir diğer önemli fark yönetici/kök ayrıcalık gereksinimidir. ETW veya perf_events kullanarak bir uygulamayı izlemek için yönetici/kök olmanız gerekir. Standart EventPipe kullanarak, izleyici (örneğin, dotnet-trace) uygulamayı başlatan kullanıcıyla aynı kullanıcı olarak çalıştırıldığı sürece uygulamaları izleyebilirsiniz. Daha önce açıklanan EventPipe (user_events) modu, işletim sistemi düzeyinde izleme altyapısıyla etkileşimde olduğundan yönetici/kök ayrıcalıkları gerektirir.
Aşağıdaki tabloda EventPipe ile ETW/perf_events arasındaki farkların bir özeti yer alır.
| Özellik | EventPipe | EventPipe (kullanıcı_etkinlikleri) | ETW | performans olayları |
|---|---|---|---|---|
| Platformlar arası | Evet | Hayır (yalnızca desteklenen Linux dağıtımlarında) | Hayır (yalnızca Windows'ta) | Hayır (yalnızca desteklenen Linux dağıtımlarında) |
| Yönetici/root ayrıcalığı gerektirir | Hayır | Evet | Evet | Evet |
| İşletim sistemi/çekirdek olayları alabilir | Hayır | Evet | Evet | Evet |
| Yerel çağrı yığınlarını çözümleyebilir | Hayır | Evet | Evet | Evet |
.NET uygulamanızı izlemek için EventPipe kullanma
.NET uygulamanızı izlemek için EventPipe'i birçok şekilde kullanabilirsiniz:
EventPipe üzerinde oluşturulan tanılama araçlarından birini kullanın.
EventPipe oturumlarını yapılandırmak ve başlatmak için kendi aracınızı yazmak için Microsoft.Diagnostics.NETCore.Client kitaplığını kullanın.
EventPipe'i başlatmak için ortam değişkenlerini kullanın.
EventPipe olaylarınızı içeren bir nettrace dosya ürettikkten sonra, dosyayı PerfView veya Visual Studio'da görüntüleyebilirsiniz. Windows olmayan platformlarda, dotnet-trace convert komutunu kullanarak dosyayı bir nettrace veya speedscope izleme biçimine dönüştürebilir Chromium ve speedscope veya Chrome DevTools ile görüntüleyebilirsiniz.
TraceEvent ile EventPipe izlemelerini program aracılığıyla da analiz edebilirsiniz.
EventPipe kullanan araçlar
Uygulamanızı izlemek için EventPipe kullanmanın en kolay yolu budur. Bu araçların her birini kullanma hakkında daha fazla bilgi edinmek için her aracın belgelerine bakın.
dotnet-counters , .NET çalışma zamanı ve çekirdek kitaplıkları tarafından yayılan çeşitli ölçümleri ve yazabileceğiniz özel ölçümleri izlemenize ve toplamanıza olanak tanır.
dotnet-gcdump , bir uygulamanın yönetilen yığınını analiz etmek için canlı işlemlerin GC yığın dökümlerini toplamanıza olanak tanır.
dotnet-trace , performans analizi için uygulamaların izlemelerini toplamanıza olanak tanır.
Ortam değişkenlerini kullanarak izleme
EventPipe kullanmak için tercih edilen mekanizma dotnet-trace veya Microsoft.Diagnostics.NETCore.Client kitaplığını kullanmaktır.
Ancak, bir uygulamada EventPipe oturumu ayarlamak ve izlemeyi doğrudan bir dosyaya yazmasını sağlamak için aşağıdaki ortam değişkenlerini kullanabilirsiniz. İzlemeyi durdurmak için uygulamadan çıkın.
DOTNET_EnableEventPipe: Doğrudan bir dosyaya yazan bir EventPipe oturumu başlatmak için bunu1olarak ayarlayın. Varsayılan değer şudur:0.DOTNET_EventPipeOutputPath:DOTNET_EnableEventPipearacılığıyla çalıştırılacak şekilde yapılandırıldığında, çıkış EventPipe izleme dosyasının yolu. Varsayılan değer,trace.nettraceuygulamanın çalıştığı dizinde oluşturulacak olan değeridir.Not
.NET 6'dan bu yana içindeki dize
{pid}DOTNET_EventPipeOutputPathörnekleri, izlenen işlemin işlem kimliğiyle değiştirilir.DOTNET_EventPipeCircularMB: EventPipe iç arabelleğinin boyutunu megabayt cinsinden temsil eden bir onaltılık değer. Bu yapılandırma değeri, yalnızca EventPipe aracılığıylaDOTNET_EnableEventPipeçalıştırılacak şekilde yapılandırıldığında kullanılır. Varsayılan arabellek boyutu 1024 MB'tır; bu nedenle, ortam değişkeni400,0x400==1024olarak ayarlanır.Not
Hedef işlem olayları çok sık yazıyorsa, bu arabellek taşabilir ve bazı olaylar kaybolabilir. Çok fazla olay kaybediliyorsa, düşen olay sayısının azalıp azalmadığını görmek için arabellek boyutunu artırın. Bırakılan olayların sayısı daha büyük bir arabellek boyutuyla azalmıyorsa, bunun nedeni, hedef işlemin arabelleklerinin boşaltılmasını engelleyen yavaş bir okuyucu olabilir.
DOTNET_EventPipeProcNumbers: EventPipe olay üst bilgilerinde işlemci numaralarını yakalamayı etkinleştirmek için bunu1olarak ayarlayın. Varsayılan değer şudur:0.DOTNET_EventPipeConfig:DOTNET_EnableEventPipeile bir EventPipe oturumu başlatırken EventPipe oturum yapılandırmasını ayarlar. Söz dizimi şu şekildedir:<provider>:<keyword>:<level>Birden çok sağlayıcıyı virgülle birleştirerek de belirtebilirsiniz:
<provider1>:<keyword1>:<level1>,<provider2>:<keyword2>:<level2>Bu ortam değişkeni ayarlanmadıysa ancak EventPipe tarafından
DOTNET_EnableEventPipeetkinleştirildiyse, aşağıdaki sağlayıcılar aşağıdaki anahtar sözcükler ve düzeylerle etkinleştirilerek izlemeye başlar:Microsoft-Windows-DotNETRuntime:4c14fccbd:5Microsoft-Windows-DotNETRuntimePrivate:4002000b:5Microsoft-DotNETCore-SampleProfiler:0:5
.NET'teki bazı iyi bilinen sağlayıcılar hakkında daha fazla bilgi edinmek için bkz. İyi bilinen Olay Sağlayıcıları.