共用方式為


.NET 運行時間計量

本文說明使用 System.Diagnostics.Metrics API 產生的 .NET 運行時間連結庫內建計量。 如需以舊版 EventCounters API 為基礎的計量清單,請參閱可用的計數器

提示

如需如何收集和報告這些計量的詳細資訊,請參閱 收集計量

System.Runtime

計量 System.Runtime 會報告來自 GC、JIT、AssemblyLoader、Threadpool 和 .NET 運行時間部分的例外狀況處理部分,以及來自OS的一些 CPU 和記憶體計量。 所有 .NET 應用程式都會自動使用這些計量。

計量:dotnet.process.cpu.time
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.process.cpu.time 計數器 s 進程所使用的CPU時間。
屬性 類型 描述 範例 目前狀態
cpu.mode 字串 CPU 的模式。 user; system 永遠

此計量會報告與存取目前進程的處理器時間屬性 System.Diagnostics.Process 相同的值。 模式 system 對應至 PrivilegedProcessorTime ,而 user 模式對應至 UserProcessorTime

從 :.NET 9.0 開始提供。

計量:dotnet.process.memory.working_set
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.process.memory.working_set UpDownCounter By 對應至進程內容的實體記憶體位元組數目。

此計量會報告與呼叫 Environment.WorkingSet 屬性相同的值。

從 :.NET 9.0 開始提供。

計量:dotnet.gc.collections
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.gc.collections 計數器 {collection} 自進程啟動以來發生的垃圾收集數目。
屬性 類型 描述 範例 目前狀態
dotnet.gc.heap.generation 字串 收集的最大 Managed 堆積產生名稱。 gen0; gen1; gen2 永遠

.NET GC 是代代垃圾收集行程。 每次垃圾收集行程執行時,都會使用啟發學習法來選取最大世代,然後將所有世代中的物件收集到選取的最大值為止。 例如, gen1 集合會收集層代 0 和 1 中的所有物件。 gen2集合會收集層代 0、1 和 2 中的所有物件。 如需 .NET GC 和世代垃圾收集的詳細資訊,請參閱 .NET 垃圾收集指南

從 :.NET 9.0 開始提供。

計量:dotnet.gc.heap.total_allocated
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.gc.heap.total_allocated 計數器 By 自進程啟動后,在Managed GC 堆積上配置的大約位元元數目。 傳回的值不包含任何原生配置。

此計量會報告與呼叫 GC.GetTotalAllocatedBytes相同的值。 如需 .NET GC 的詳細資訊,請參閱 .NET 垃圾收集指南

從 :.NET 9.0 開始提供。

計量:dotnet.gc.last_collection.memory.committed_size
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.gc.last_collection.memory.committed_size UpDownCounter By .NET GC 所使用的認可虛擬記憶體數量,如最新的垃圾收集期間所觀察到。

此計量會報告與呼叫 GCMemoryInfo.TotalCommittedBytes相同的值。 認可虛擬記憶體可能大於堆積大小,因為它包含用來儲存現有物件的記憶體(堆積大小),以及未來可處理新配置之物件的一些額外記憶體。 如需 .NET GC 的詳細資訊,請參閱 .NET 垃圾收集指南

從 :.NET 9.0 開始提供。

計量:dotnet.gc.last_collection.heap.size
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.gc.last_collection.heap.size UpDownCounter By 在最新的垃圾收集期間觀察到的Managed GC 堆積大小(包括片段)。
屬性 類型 描述 範例 目前狀態
dotnet.gc.heap.generation 字串 垃圾收集行程Managed堆積產生的名稱。 gen0;gen1; ;lohgen2;poh 永遠

.NET GC 會將堆積分割成世代。 除了標準編號層代之外,GC 也會將一些物件放入兩個特殊世代:

  • 大型物件堆積 (LOH) 會儲存與一般物件相比非常大的 .NET 物件。
  • 釘選的物件堆積 (POH) 會在參數為 true 時pinned,儲存使用 GC.AllocateArray API 配置的物件。

這兩個特殊世代都會在 GC 集合期間 gen2 收集。 如需 .NET GC 的詳細資訊,請參閱 .NET 垃圾收集指南

從 :.NET 9.0 開始提供。

計量:dotnet.gc.last_collection.heap.fragmentation.size
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.gc.last_collection.heap.fragmentation.size UpDownCounter By 堆積片段,如最新的垃圾收集期間所觀察到。

此計量會報告與呼叫 GCGenerationInfo.FragmentationAfterBytes相同的值。

配置 .NET 物件時,一開始它們通常會在記憶體中連續配置。 不過,如果 GC 稍後會收集其中一些物件,這會在剩餘的即時對象之間建立未使用的記憶體間距。 這些間距代表目前未用來儲存物件的 GC 堆積部分,通常稱為「片段」。如果物件大小小到足以容納其中一個間距,GC 就可以在未來重複使用新的物件配置片段位元組。 只要物件尚未就地釘選,GC 也可以執行特殊的壓縮垃圾收集,以將剩餘的即時物件移到彼此旁邊。

如需 .NET GC 的運作方式、分析 GC 效能,以及扮演哪些角色的詳細資訊,請參閱 .NET 記憶體效能分析

從 :.NET 9.0 開始提供。

計量:dotnet.gc.pause.time
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.gc.pause.time 計數器 s 自進程啟動以來,GC 中暫停的總時間量。

此計量會報告與呼叫 GC.GetTotalPauseDuration()相同的值。

每次 .NET GC 執行集合時,它都需要短暫暫停所有執行 Managed 程式代碼的線程,以判斷哪些物件仍會受到參考。 此計量會報告自程序開始以來所有這些暫停時間的總和。 您可以使用此計量來判斷線程針對 GC 暫停的時間,以及其執行 Managed 程式代碼的時間。

從 :.NET 9.0 開始提供。

計量:dotnet.jit.compiled_il.size
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.jit.compiled_il.size 計數器 By 自進程啟動以來已編譯之中繼語言的位元組計數。

此計量會報告與呼叫 JitInfo.GetCompiledILBytes相同的值。

當您建置 .NET 應用程式時,Managed 程式代碼一開始會從 C#、VB 或 F# 等高階語言編譯為 中繼語言 (IL)。 然後當程序執行時,.NET Just-In-Time (JIT) 編譯程式會將 IL 轉換成機器程式代碼。

由於 JIT 編譯會在方法第一次執行時發生,因此大多數 JIT 編譯通常會在應用程式啟動期間發生。 減少 JIT 編譯的 IL 數量可以改善應用程式啟動時間。

從 :.NET 9.0 開始提供。

計量:dotnet.jit.compiled_methods
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.jit.compiled_methods 計數器 {method} 自進程啟動後 JIT 編譯程式 (re)編譯方法的次數。

此計量會報告與呼叫 JitInfo.GetCompiledMethodCount相同的值。

當您建置 .NET 應用程式時,Managed 程式代碼一開始會從 C#、VB 或 F# 等高階語言編譯為 中繼語言 (IL)。 然後當程序執行時,.NET Just-In-Time (JIT) 編譯程式會將 IL 轉換成機器程式代碼。

由於 JIT 編譯會在方法第一次執行時發生,因此大多數 JIT 編譯通常會在應用程式啟動期間發生。 減少需要 JIT 編譯的方法數目可以改善應用程式啟動時間。

從 :.NET 9.0 開始提供。

計量:dotnet.jit.compilation.time
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.jit.compilation.time 計數器 s 自進程啟動以來,JIT 編譯程式花費在編譯方法的時間量。

此計量會報告與呼叫 JitInfo.GetCompilationTime相同的值。

當您建置 .NET 應用程式時,Managed 程式代碼一開始會從 C#、VB 或 F# 等高階語言編譯為 中繼語言 (IL)。 然後當程序執行時,.NET Just-In-Time (JIT) 編譯程式會將 IL 轉換成機器程式代碼。

由於 JIT 編譯會在方法第一次執行時發生,因此大多數 JIT 編譯通常會在應用程式啟動期間發生。 減少 JIT 編譯所花費的時間可以改善應用程式啟動時間。

從 :.NET 9.0 開始提供。

計量:dotnet.thread_pool.thread.count
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.thread_pool.thread.count UpDownCounter {thread} 目前存在的線程集區線程數目。

此計量會報告與呼叫 ThreadPool.ThreadCount相同的值。

.NET 會使用 線程集 區將工作專案排程到其他線程上。 此計量提供該線程集區目前管理的背景工作線程數目。

從 :.NET 9.0 開始提供。

計量:dotnet.thread_pool.work_item.count
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.thread_pool.work_item.count 計數器 {work_item} 線程集區自進程啟動後已完成的工作項目數目。

此計量會報告與呼叫 ThreadPool.CompletedWorkItemCount相同的值。

.NET 會使用 線程集 區將工作專案排程到其他線程上。 此計量提供線程集區線程已執行的工作項目數目。

從 :.NET 9.0 開始提供。

計量:dotnet.thread_pool.queue.length
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.thread_pool.queue.length UpDownCounter {work_item} 線程集區目前排入佇列要處理的工作項目數目。

此計量會報告與呼叫 ThreadPool.PendingWorkItemCount相同的值。

.NET 會使用 線程集 區將工作專案排程到其他線程上。 此計量提供目前由其中一個線程集區線程執行的佇列工作項目數目。

從 :.NET 9.0 開始提供。

計量:dotnet.monitor.lock_contentions
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.monitor.lock_contentions 計數器 {contention} 自進程啟動以來,嘗試取得監視鎖定時發生爭用的次數。

此計量會報告與呼叫 Monitor.LockContentionCount相同的值。

.NET 支援使用任何 Managed 物件做為鎖定,例如 或 搭配 lock 語句APIMonitor.Enter。 如果一個線程在第二個線程嘗試取得鎖定時已保留鎖定,這稱為 鎖定爭用

從 :.NET 9.0 開始提供。

計量:dotnet.timer.count
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.timer.count UpDownCounter {timer} 目前作用中的定時器實例數目。

此計量會報告與呼叫 Timer.ActiveCount相同的值。

從 :.NET 9.0 開始提供。

計量:dotnet.assembly.count
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.assembly.count UpDownCounter {assembly} 目前載入的 .NET 元件數目。

此計量會報告與呼叫 AppDomain.GetAssemblies() 相同的值,然後檢查傳回數位列的長度。

從 :.NET 9.0 開始提供。

計量:dotnet.exceptions
名稱 金融工具類型 單位 (UCUM) 描述
dotnet.exceptions 計數器 {exception} 在 Managed 程式代碼中擲回的例外狀況數目。
屬性 類型 描述 範例 目前狀態
error.type 字串 擲回的例外狀況類型。 System.OperationCanceledException; Contoso.MyException Required

此計量會報告與計算事件呼叫 AppDomain.FirstChanceException 相同的值。

從 :.NET 9.0 開始提供。