惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Troy Hunt's Blog
Schneier on Security
Schneier on Security
N
News | PayPal Newsroom
Hacker News: Ask HN
Hacker News: Ask HN
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Google DeepMind News
Google DeepMind News
www.infosecurity-magazine.com
www.infosecurity-magazine.com
N
News and Events Feed by Topic
V
Vulnerabilities – Threatpost
Cyberwarzone
Cyberwarzone
K
Kaspersky official blog
P
Privacy & Cybersecurity Law Blog
P
Privacy International News Feed
WordPress大学
WordPress大学
U
Unit 42
PCI Perspectives
PCI Perspectives
S
Schneier on Security
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
I
Intezer
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
Martin Fowler
Martin Fowler
B
Blog
美团技术团队
T
The Blog of Author Tim Ferriss
C
Cisco Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
酷 壳 – CoolShell
酷 壳 – CoolShell
The Last Watchdog
The Last Watchdog
J
Java Code Geeks
博客园_首页
A
About on SuperTechFans
Vercel News
Vercel News
Attack and Defense Labs
Attack and Defense Labs
H
Heimdal Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
小众软件
小众软件
H
Help Net Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
T
The Exploit Database - CXSecurity.com
Y
Y Combinator Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Webroot Blog
Webroot Blog
T
Tenable Blog

博客园 - SamDragon

如何通过LangChain实现记忆功能的总结 基于LangChain的Ai应用开发平台 前端导出Excel和打印介绍 ApiTemplate:.net后端项目模板完善与总结 Jenkins之Nunit的应用 jenkins发布application且并运行 Jenkins基础系统之完整的.net项目编译 Jenkins基础系统之更换镜像源 记一次业余项目的敏捷开发实践 奉上简单的.Net后端开发模板 C#之委托如此简单 cordova环境搭建 Linux实现免密码登录 ElasticSearch安装及运行的坑 Autofac 应用于IIS托管的WEB程序,注册程序集被回收的问题 通过Thrift实现C#与Hbase交流 OpenLayer实现路径运动 对SVN的落地与实践总结 Jenkins配置从节点
.net CPU和内存爆高的分析与处理01
SamDragon · 2024-02-05 · via 博客园 - SamDragon

一、问题现象


从截图现象看,应用程序CPU和内存都上去了。并且还是导致程序崩溃了。这时我想到了在老师(一线码农)那里学到的分析办法,先抓取一个Dump。然后仔细分析。

二、分析Dump

通过Address -summary命令,查看内存确实偏高,并且都在托管堆中。

2.1 确认CPU是否真的存在跑高的的现象

通过!tp 查看CPU 确实偏高

三、分析内存泄漏问题

3.1 通过!dumpheap -stat 命令,看看内存中对象分配情况


从上图,不难看出Seismic.Core.TraceData的数量挺多的,837 546 144(8亿多个对象),有点恐怖。

3.2 查找Seismic.Core.TraceData对象的持有者

通过dumobj命令,可以看到对象的字段信息,是一个时间和一个浮点数。

3.3. 然后通过 !gcroot命令,查看对象的引用链


发现此对象被 "4B5C"线程持有,并且在做Clone处理

3.4 找到对应Dll的相关方法


发现在进行对象的深度复制。看上去代码也没什么问题。但和同事一沟通,他将传感器采集到最近25分钟数据,都进行了一个Clone。这么说一还可能就是问题了。我们传感器平均1秒钟4000条数据,25分钟有高达600W条数据,再对600W的对象进行一个深度复制,就将产生1200W的对象。可想内存开销还是可观的。由于外层逻辑也是定时分析,分析完成后也没有进行GC的清理。程序运行时长了,内存就上去了。

四、分析Cpu占用高的情况

4.1 通过!t -special 命令,查看是否存在GC加收的情况

4.2 转换到2b04线程,查看调用栈


从上述调用栈可以看出来,在进行反序列化的时候,触发的GC回收。

4.3 通过syncblk,查看是否存在锁的情况


从上述信息可以看出,当前存在一个锁。

也可以看出,正常在等等GC回收的完成。GC算是CPU密集信息操作,又回收大量数据,CPU上去也算是正常。

五、总结

1 小对象,数量多的情况下,进行深度复制,会导致内存爆高
2 GC在回收大量对象时,会导致CPU爆高