.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 ; ;loh gen2 ;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 開始提供。