前言
近来系统从 net framework472 升级到 net8,同事部署测试环境后,发现 CPU 占用较高。
它这个现象,就一个用户在访问,点一下,发了几个请求而已,CPU 就怼上去了。
乍一看代码也没发现问题,那就祭出
dotnet-trace 诊断工具 – .NET CLI – .NET | Microsoft Learn
这玩意抓包然后在VS打开,能直观看到热代码、热路径 相关CPU占用情况,灰常银杏。
上图感受下:
准备
下载,两种方式挑一种,我用的是直接下载。
抓包
如图
# 先找出net的进程ID
dotnet-trace ps
# 开始收集,注意21008是进程ID
# 会显示抓包的时长和大小
# 还有很多参数,有需要可以自己看官方文档
dotnet-trace collect --process-id 21008
# 按回车结束收集,自动保存到当前目录
# xxxxxx.nettrace
我这里是先开始抓包,然后操作一下能触发高 CPU 的动作,等 CPU 降下来立马结束抓包。
分析
拿到包拷回本地,用VS打开,双击热路径,查看调用树,点击展开热路径。
我找到了一条我们的项目的方法,且 CPU 较高的。
看了下逻辑,发现每个请求都走了一遍这个中间件,而且逻辑是多余且序列化量很大的,去掉后,CPU马上降下来了。
结论
dotnet-trace 是一个命令行工具,用于收集和分析 .NET 应用程序的性能和诊断数据。它可以帮助你监控 .NET 应用的 CPU 使用率、垃圾回收(GC)活动、线程池使用情况等信息。
其他资料:
发表回复