一、问题现象


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

posted @ 2024-02-05 16:47 小龙女先生 阅读(566) 评论(0) 推荐(0) 编辑
摘要: 开发后台管理系统时,都需要实现打印、导出Excel这两项功能,在前后台分离的开发模式,你是否想找一个前端解决方案。这样后端开发人员就不用为每个报表功能附加一个导出Excel的接口了,那我们进入主题吧。 核心问题-导出Excel是个麻烦 打印不用多说,前端很容易搞定,因为浏览器自带;主要是导出Exce 阅读全文
posted @ 2020-11-29 12:02 小龙女先生 阅读(741) 评论(0) 推荐(0) 编辑
摘要: ApiTemplate后端项目开发模板,发布也有一段时间了。为了补充应用场景,以及详细说明本人总结的一些开发经验,现已常见的《用户/登录权限验证》功能模块来进行详细的讲解。我会以为开发此模拟的实现路径为主线进行说明,希望能帮助到某些开发朋友。一、模块分解模块分析是按照《C4-架构图》理念做的,主要分 阅读全文
posted @ 2020-06-27 18:08 小龙女先生 阅读(645) 评论(0) 推荐(0) 编辑
摘要: 一、在Jenkins中安装Nunit插件进入jenkins的插件管理模块,下载Nunit插件。此步骤不做截图说明二、引用nunit.console的nuget包通过项目引用Nunit.console包 然后可以packages\NUnit.ConsoleRunner.3.11.1\tools文件夹查 阅读全文
posted @ 2020-05-10 20:42 小龙女先生 阅读(509) 评论(0) 推荐(0) 编辑
摘要: 一、发布配置差异配置:编译内容编译目标NetWorkClient/KJ90NetClient.csproj编译命令/t:build/p:Configuration=Release /p:OutputPath=../UploadRelease运行外部程序二、配置jenkins启动外部程序不报错通过参数配置key: BUILD_IDvalue: dontKillMe设置全局变量配置Go to Jen... 阅读全文
posted @ 2020-05-10 20:39 小龙女先生 阅读(362) 评论(0) 推荐(0) 编辑
摘要: 一、目标 搭建jenkins服务器以及配置一台.net编译的slave客户端 完整跑通一个asp.net项目的发布 二、搭建jenkins环境 2.1 安装jenkins 1. 根据官网提示安装 进入jenkins官网下载==最新(如果不是最新的包,可能会存在推荐插件不能安装的现象)==的稳定包,我 阅读全文
posted @ 2020-04-11 21:45 小龙女先生 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 清华大学镜像地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json操作步骤:进入jenkins系统管理进入插件管理点击高级,修改升级站点的地址为清华大学镜像地址二、更换源配置1. 关闭对 update-center.json 的安全检查将下列属性添加到 Jenkins 启动参数hudson.model.D... 阅读全文
posted @ 2020-04-11 19:53 小龙女先生 阅读(3487) 评论(0) 推荐(0) 编辑
摘要: 本次是在原有ApiTemplate项目之上,增加一个用户登录权限控制模块,用于验证ApiTemplate项目在面对一些简单问题时,如何抽象并支持未来的扩展。用户登录权限控制模块看上去很简单,但由于业余时间总是有限的。所以借助此机会实践一次用户敏捷开发。首先拆分模块,本次只实现用户登录和登出。apit 阅读全文
posted @ 2020-03-15 19:33 小龙女先生 阅读(979) 评论(3) 推荐(2) 编辑
摘要: 假定一个场景,开始做开发的你,领导走到你的面前说道:“小伙子,看了简历和最近的工作表现,很不错,现在交给一个任务,开发一个简单的CMS后端接口吧,前端有人配合你”,当时你内心读白:“CMS什么东西,还好我可以百度,但我要在哪个项目上开搞啊”,这时的领导又说道:“项目你自己建立,然后上传git就行了” 阅读全文
posted @ 2020-03-04 16:37 小龙女先生 阅读(5058) 评论(15) 推荐(16) 编辑
摘要: 近期和几位做嵌入式开发的朋友闲聊过程中,一位朋友抱怨到:这C#太难用了,我想在N个窗体(或者是N个用户组件之间)传递值都搞不定,非得要定义一个全局变量来存储,然后用定时器来刷新值,太Low了。我急切的回答道:这很简单,不就是委托的事嘛。那你来一个示例啊:朋友道。此为这篇博客的起因,所以此篇博客对于有 阅读全文
posted @ 2019-11-10 20:21 小龙女先生 阅读(1993) 评论(0) 推荐(9) 编辑
点击右上角即可分享
微信分享提示