.NET服务CPU占用高问题排查

前言

近来系统从 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)活动、线程池使用情况等信息。

其他资料:

调试高 CPU 使用率 - .NET Core - .NET | Microsoft Learn

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇