首页 > 系统相关 >.net CPU和内存爆高的分析与处理01

.net CPU和内存爆高的分析与处理01

时间:2024-02-05 16:55:50浏览次数:28  
标签:01 查看 爆高 对象 GC 内存 net CPU

一、问题现象


从截图现象看,应用程序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爆高

标签:01,查看,爆高,对象,GC,内存,net,CPU
From: https://www.cnblogs.com/cqhaibin/p/18008423

相关文章

  • 服务器-Kubernetes (K8S)单机部署实战 -- 001
       本篇博文是centos7系统安装kubernetes单机master节点操作。一:查看服务器配置信息   1.执行命令查看服务器cpu信息。安装kubernetes服务,cpu核心数必须大于2,内存大于2G。lscpu   2. 修改服务器设置信息,避免安装出现问题。    a.......
  • Netsuite 官方解答渠道
    https://nlcorp.extforms.netsuite.com/app/site/crm/externalcasepage.nl?compid=NLCORP&formid=203&h=AAFdikaIO4S1EChHN12RnhSbV6RPuAQyeH7t77JPbej9kLQm8_E&custentity73=8801598&companyname=8801598+%25u5510%25u52BF%25uFF08%25u4E0A%25u6D77%25uFF09%......
  • pycharm 2018.2+ 激活码
    I2A0QUY8VU-eyJsaWNlbnNlSWQiOiJJMkEwUVVZOFZVIiwibGljZW5zZWVOYW1lIjoiVU5JVkVSU0lEQURFIEVTVEFEVUFMIERFIENBTVBJTkFTIiwiYXNzaWduZWVOYW1lIjoiVGFvYmFv77yaSkVU5YWo5a625qG25r+AIOa0u+W3peS9nOWupCAgcmVuIHpodW4gZGlhbiBtaW5n77yBIiwiYXNzaWduZWVFbWFpbCI6IlJvYmJ5X1dlbmln......
  • Kubernetes 服务类型详解
    Kubernetes服务类型详解如今,Kubernetes已成为管理和扩展云原生应用程序的强大工具。组织需要利用高度可扩展且始终可用的功能来保持零停机时间,快速部署他们的软件。随着越来越多的应用程序被容器化和部署,容器的管理也变得越来越复杂。因此,软件的扩展成为一个问题,而这正是Kuber......
  • 洛谷题单指南-递推与递归-P1028 [NOIP2001 普及组] 数的计算
    原题链接:https://www.luogu.com.cn/problem/P1028题意解读:给定n,构造数列,可以用递归或者递推。解题思路:1、递归定义count(n)返回数列的个数  n==1时,count(n)=1  n!=1时,count(n)=1+count(1)+count(2)+...+count(n/2)注意,递归会导致大量重复计算,需要用一个hash......
  • .NET 7 MAUI 使用基于 REST 的 Web 服务过程中本地开发的问题
    .NET7MAUI使用基于REST的Web服务过程中本地开发的问题微软文档:https://learn.microsoft.com/zh-cn/dotnet/maui/data-cloud/rest?view=net-maui-7.0错误代码Java.Security.Cert.CertificateException:'TheremotecertificatewasrejectedbytheprovidedRemoteCert......
  • 在我的VS2019中重新配置2017项目生成的google test 项目
    原来的项目是其他版本的VS配置的,自己下载下来时候,本机也没有装GoogleTest所以用不起。如果重建项目在一个个引入工程代码太麻烦(文件多),所以我就想着有没有什么办法快捷配置,不用重建工程以下是我的一个配置方法,供大家交流学习:1.首先你本机要安装上GoogleTest,安装方法自查;2.如......
  • Quartz.net启动后不立即执行
    Quartz.net启动后不立即执行看了好多帖子说加这一句,多番尝试后还是立即执行了。((CronTriggerImpl)jobTrigger).MisfireInstruction=MisfireInstruction.CronTrigger.DoNothing; 经过测试后,还需要加一行代码:_scheduler.ResumeTrigger(jobTrigger.Key).Wait(); 完整......
  • .net通过共享文件方式读取SQLLite数据库整理两种方案
    项目环境:win10,框架.net6.0问题描述:客户现场有一台测量设备,测量数据存放在测量设备本地SQLLite中,应用服务器存在另一台电脑上,客户希望通过共享文件方式读取SQLLite中的数据定时同步到应用服务器上进行查询展示。解决方案:网上搜了一下资料整理了一下大概两种方法:1.没有账号密......
  • netty内存分配
    https://www.cnblogs.com/s686zhou/p/15714858.htmlhttps://www.jianshu.com/p/1ce3bc2d7c5e https://blog.csdn.net/wangwei19871103/category_9681495_2.htmlnetty4.1.50版本rss分配内存链路PooledByteBufAllocator#ioBuffer(intinitialCapacity,intmaxCapacity)=>Ab......