Bagikan melalui


Metrik Runtime .NET

Artikel ini menjelaskan metrik bawaan untuk pustaka runtime .NET yang diproduksi menggunakan System.Diagnostics.Metrics API. Untuk daftar metrik berdasarkan API EventCounters yang lebih lama, lihat Penghitung yang tersedia.

Tip

Untuk informasi selengkapnya tentang cara mengumpulkan dan melaporkan metrik ini, lihat Mengumpulkan metrik.

System.Runtime

Meter System.Runtime melaporkan pengukuran dari bagian GC, JIT, AssemblyLoader, Threadpool, dan penanganan pengecualian dari runtime .NET serta beberapa metrik CPU dan memori dari OS. Metrik ini tersedia secara otomatis untuk semua aplikasi .NET.

Metrik: dotnet.process.cpu.time
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.process.cpu.time Counter<T> s Waktu CPU yang digunakan oleh proses.
Atribut Tipe Deskripsi Contoh Kehadiran
cpu.mode string The mode of the CPU. user; system Selalu

Metrik ini melaporkan nilai yang sama dengan mengakses properti System.Diagnostics.Process waktu prosesor untuk proses saat ini. system Mode sesuai dengan PrivilegedProcessorTime dan user mode sesuai denganUserProcessorTime

Tersedia mulai dari: .NET 9.

Metrik: dotnet.process.memory.working_set
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.process.memory.working_set UpDownCounter<T> By Jumlah byte memori fisik yang dipetakan ke konteks proses.

Metrik ini melaporkan nilai yang sama dengan properti panggilan Environment.WorkingSet .

Tersedia mulai dari: .NET 9.

Metrik: dotnet.gc.collections
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.gc.collections Counter<T> {collection} Jumlah pengumpulan sampah yang terjadi sejak proses dimulai.
Atribut Tipe Deskripsi Contoh Kehadiran
gc.heap.generation string Nama pembuatan timbunan terkelola maksimum yang dikumpulkan. gen0; gen1; gen2 Selalu

.NET GC adalah pengumpul sampah generasi. Setiap kali pengumpul sampah berjalan, ia menggunakan heuristik untuk memilih generasi maksimum dan kemudian mengumpulkan objek dalam semua generasi hingga maksimum yang dipilih. Misalnya, gen1 koleksi mengumpulkan semua objek dalam generasi 0 dan 1. Koleksi gen2 mengumpulkan semua objek dalam generasi 0, 1, dan 2. Untuk informasi selengkapnya tentang .NET GC dan pengumpulan sampah generasi, lihat panduan pengumpulan sampah .NET.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.gc.heap.total_allocated
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.gc.heap.total_allocated Counter<T> By Perkiraan jumlah byte yang dialokasikan pada tumpukan GC terkelola sejak proses dimulai. Nilai yang dikembalikan tidak menyertakan alokasi asli apa pun.

Metrik ini melaporkan nilai yang sama dengan memanggil GC.GetTotalAllocatedBytes. Untuk informasi selengkapnya tentang .NET GC, lihat panduan pengumpulan sampah .NET.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.gc.last_collection.memory.committed_size
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.gc.last_collection.memory.committed_size UpDownCounter<T> By Jumlah memori virtual yang diterapkan yang digunakan oleh .NET GC, seperti yang diamati selama pengumpulan sampah terbaru.

Metrik ini melaporkan nilai yang sama dengan memanggil GCMemoryInfo.TotalCommittedBytes. Memori virtual yang diterapkan mungkin lebih besar dari ukuran timbunan karena mencakup kedua memori untuk menyimpan objek yang ada (ukuran timbunan) dan beberapa memori tambahan yang siap untuk menangani objek yang baru dialokasikan di masa mendatang. Untuk informasi selengkapnya tentang .NET GC, lihat panduan pengumpulan sampah .NET.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.gc.last_collection.heap.size
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.gc.last_collection.heap.size UpDownCounter<T> By Ukuran tumpukan GC terkelola (termasuk fragmentasi), seperti yang diamati selama pengumpulan sampah terbaru.
Atribut Tipe Deskripsi Contoh Kehadiran
gc.heap.generation string Nama pengumpul sampah yang dikelola pembuatan tumpukan. gen0; gen1; ; gen2loh; poh Selalu

GC .NET membagi tumpukan menjadi beberapa generasi. Selain generasi bernomor standar, GC juga menempatkan beberapa objek ke dalam dua generasi khusus:

  • Tumpukan objek besar (LOH) menyimpan objek .NET yang sangat besar dibandingkan dengan objek umum.
  • Timbunan objek yang disematkan (POH) menyimpan objek yang dialokasikan menggunakan GC.AllocateArray API saat pinned parameter benar.

Kedua generasi khusus ini dikumpulkan selama gen2 koleksi GC. Untuk informasi selengkapnya tentang .NET GC, lihat panduan pengumpulan Sampah .NET.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.gc.last_collection.heap.fragmentation.size
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.gc.last_collection.heap.fragmentation.size UpDownCounter<T> By Fragmentasi tumpukan, seperti yang diamati selama pengumpulan sampah terbaru.
Atribut Tipe Deskripsi Contoh Kehadiran
gc.heap.generation string Nama pengumpul sampah yang dikelola pembuatan tumpukan. gen0; gen1; ; gen2loh; poh Selalu

Metrik ini melaporkan nilai yang sama dengan memanggil GCGenerationInfo.FragmentationAfterBytes.

Ketika objek .NET dialokasikan, awalnya objek cenderung ditata secara berdekatan dalam memori. Namun, jika beberapa objek tersebut kemudian dikumpulkan oleh GC, ini menciptakan celah memori yang tidak digunakan antara objek langsung yang tersisa. Celah ini mewakili bagian dari tumpukan GC yang saat ini tidak digunakan untuk menyimpan objek, sering disebut "fragmentasi." GC dapat menggunakan kembali byte fragmentasi di masa depan untuk alokasi objek baru jika ukuran objek cukup kecil agar pas di salah satu celah. GC juga dapat melakukan pengumpulan sampah khusus yang menggerakkan objek langsung yang tersisa di samping satu sama lain selama objek belum disematkan di tempat.

Untuk informasi selengkapnya tentang cara kerja .NET GC, menganalisis performa GC, dan peran apa yang dimainkan fragmentasi peran, lihat analisis performa memori .NET.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.gc.pause.time
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.gc.pause.time Counter<T> s Jumlah total waktu yang dijeda di GC sejak proses dimulai.

Metrik ini melaporkan nilai yang sama dengan memanggil GC.GetTotalPauseDuration().

Setiap kali .NET GC melakukan koleksi yang diperlukan untuk menjeda semua utas yang menjalankan kode terkelola secara singkat untuk menentukan objek mana yang masih dirujuk. Metrik ini melaporkan jumlah semua waktu jeda ini sejak proses dimulai. Anda dapat menggunakan metrik ini untuk menentukan sebagian kecil dari utas waktu yang dihabiskan dijeda untuk GC versus waktu mereka dapat menjalankan kode terkelola.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.jit.compiled_il.size
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.jit.compiled_il.size Counter<T> By Jumlah byte bahasa perantara yang telah dikompilasi sejak proses dimulai.

Metrik ini melaporkan nilai yang sama dengan memanggil JitInfo.GetCompiledILBytes.

Saat Anda membuat aplikasi .NET, kode terkelola awalnya dikompilasi dari bahasa tingkat tinggi seperti C#, VB, atau F# ke dalam bahasa perantara (IL). Kemudian ketika program dijalankan, kompilator .NET just-in-time (JIT) mengonversi IL menjadi kode mesin.

Karena kompilasi JIT terjadi pertama kali metode berjalan, sebagian besar kompilasi JIT cenderung terjadi selama startup aplikasi. Mengurangi jumlah IL yang dikompilasi JIT dapat meningkatkan waktu startup aplikasi.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.jit.compiled_methods
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.jit.compiled_methods Counter<T> {method} Berapa kali pengkompilasi JIT (re)metode yang dikompilasi sejak proses dimulai.

Metrik ini melaporkan nilai yang sama dengan memanggil JitInfo.GetCompiledMethodCount.

Saat Anda membuat aplikasi .NET, kode terkelola awalnya dikompilasi dari bahasa tingkat tinggi seperti C#, VB, atau F# ke dalam bahasa perantara (IL). Kemudian ketika program dijalankan, kompilator .NET just-in-time (JIT) mengonversi IL menjadi kode mesin.

Karena kompilasi JIT terjadi pertama kali metode berjalan, sebagian besar kompilasi JIT cenderung terjadi selama startup aplikasi. Mengurangi jumlah metode yang perlu dikompilasi JIT dapat meningkatkan waktu startup aplikasi.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.jit.compilation.time
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.jit.compilation.time Counter<T> s Jumlah waktu yang dihabiskan kompilator JIT untuk mengkompilasi metode sejak proses dimulai.

Metrik ini melaporkan nilai yang sama dengan memanggil JitInfo.GetCompilationTime.

Saat Anda membuat aplikasi .NET, kode terkelola awalnya dikompilasi dari bahasa tingkat tinggi seperti C#, VB, atau F# ke dalam bahasa perantara (IL). Kemudian ketika program dijalankan, kompilator .NET just-in-time (JIT) mengonversi IL menjadi kode mesin.

Karena kompilasi JIT terjadi pertama kali metode berjalan, sebagian besar kompilasi JIT cenderung terjadi selama startup aplikasi. Mengurangi waktu yang dihabiskan untuk kompilasi JIT dapat meningkatkan waktu startup aplikasi.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.thread_pool.thread.count
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.thread_pool.thread.count UpDownCounter<T> {thread} Jumlah utas kumpulan utas yang saat ini ada.

Metrik ini melaporkan nilai yang sama dengan memanggil ThreadPool.ThreadCount.

.NET menggunakan kumpulan utas untuk menjadwalkan item kerja ke utas lain. Metrik ini menyediakan jumlah utas pekerja yang saat ini dikelola oleh kumpulan utas tersebut.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.thread_pool.work_item.count
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.thread_pool.work_item.count Counter<T> {work_item} Jumlah item kerja yang telah diselesaikan kumpulan utas sejak proses dimulai.

Metrik ini melaporkan nilai yang sama dengan memanggil ThreadPool.CompletedWorkItemCount.

.NET menggunakan kumpulan utas untuk menjadwalkan item kerja ke utas lain. Metrik ini menyediakan jumlah item kerja yang telah dijalankan oleh utas kumpulan utas.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.thread_pool.queue.length
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.thread_pool.queue.length UpDownCounter<T> {work_item} Jumlah item kerja yang saat ini diantrekan untuk diproses oleh kumpulan utas.

Metrik ini melaporkan nilai yang sama dengan memanggil ThreadPool.PendingWorkItemCount.

.NET menggunakan kumpulan utas untuk menjadwalkan item kerja ke utas lain. Metrik ini menyediakan jumlah item kerja yang saat ini diantrekan untuk dijalankan oleh salah satu utas kumpulan utas.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.monitor.lock_contentions
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.monitor.lock_contentions Counter<T> {contention} Frekuensi terjadi ketidakcocokan saat mencoba memperoleh kunci monitor sejak proses dimulai.

Metrik ini melaporkan nilai yang sama dengan memanggil Monitor.LockContentionCount.

.NET mendukung penggunaan objek terkelola apa pun sebagai kunci, baik dengan API seperti Monitor.Enter atau dengan pernyataan kunci. Jika satu utas sudah memegang kunci sementara utas kedua mencoba memperolehnya, ini disebut pertikaian kunci.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.timer.count
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.timer.count UpDownCounter<T> {timer} Jumlah instans timer yang saat ini aktif.

Metrik ini melaporkan nilai yang sama dengan memanggil Timer.ActiveCount.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.assembly.count
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.assembly.count UpDownCounter<T> {assembly} Jumlah rakitan .NET yang saat ini dimuat.

Metrik ini melaporkan nilai yang sama dengan panggilan AppDomain.GetAssemblies() lalu memeriksa panjang array yang dikembalikan.

Tersedia mulai dari: .NET 9.

Metrik: dotnet.exceptions
Nama Jenis Instrumen Unit (UCUM) Deskripsi
dotnet.exceptions Counter<T> {exception} Jumlah pengecualian yang telah dilemparkan dalam kode terkelola.
Atribut Tipe Deskripsi Contoh Kehadiran
error.type string Jenis pengecualian yang dilemparkan. System.OperationCanceledException; Contoso.MyException Required

Metrik ini melaporkan nilai yang sama dengan menghitung panggilan ke AppDomain.FirstChanceException peristiwa.

Tersedia mulai dari: .NET 9.