如何诊断 dotnet 进程消耗高 CPU 的情况?

Ant*_*rov 2 .net c# .net-core asp.net-core

我有一个在 Kubernetes 中运行的 ASP.NET Core 进程。突然出现问题,CPU 使用率从 8% 跃升至 100%,并稳定在该水平。内存使用情况没有改变,因此看起来像是线程中的无限循环。

我可以使用哪些工具来诊断过程中发生的情况?

我应该怎么做才能将来诊断出此类问题?

D-S*_*hih 6

.net core 支持一些命令,让我们诊断 CPU 高或内存问题。

一、安装工具

dotnet tool install --global dotnet-trace
dotnet tool install --global dotnet-counters
Run Code Online (Sandbox Code Playgroud)

然后我们可以用来dotnet-trace ps获取我们想要跟踪的进程ID。

然后使用dotnet-counters命令我们可以看到进程使用资源的情况。

dotnet-counters monitor -p 22884 --refresh-interval 1
Run Code Online (Sandbox Code Playgroud)
  • -p:您要跟踪哪个进程ID
  • --refresh-interval:从命令行窗口刷新监视器屏幕的频率(单位是秒)

如果你只想关注 cpu-usage 你可以尝试添加这个参数--counters System.Runtime[cpu-usage]

当我们使用上面的命令时,我们将获得大量运行时信息,可以帮助我们从您的进程中进行诊断。

[System.Runtime]
% Time in GC since last GC (%)                          
Allocation Rate (B / 1 sec)                             
CPU Usage (%)                                           
Exception Count (Count / 1 sec)                         
GC Committed Bytes (MB)                                 
GC Fragmentation (%)                                    
GC Heap Size (MB)                                       
Gen 0 GC Count (Count / 1 sec)                          
Gen 0 Size (B)                                          
Gen 1 GC Count (Count / 1 sec)                          
Gen 1 Size (B)                                        
Gen 2 GC Count (Count / 1 sec)                        
Gen 2 Size (B)                                        
IL Bytes Jitted (B)                                   
LOH Size (B)                                           
Monitor Lock Contention Count (Count / 1 sec)           
Number of Active Timers                                 
Number of Assemblies Loaded                             
Number of Methods Jitted                                
POH (Pinned Object Heap) Size (B)                       
ThreadPool Completed Work Item Count (Count / 1 sec)    
ThreadPool Queue Length                                 
ThreadPool Thread Count                                 
Time spent in JIT (ms / 1 sec)                          
Working Set (MB)                                        
Run Code Online (Sandbox Code Playgroud)

更多详细信息,您可以查看调试 .NET Coredotnet-counters中的高 CPU 使用率

  • 花了一些时间后,我确实在我的 Pod 中安装了 dotnet 工具,并且 dotnet-trace 非常适合我。我发现了一个导致无限循环的错误。 (2认同)