从伪代码中很容易看出来由于设备上线的时候往字典2中添加了内容但是设备离网以及设备创建重复连接的时候并没有更新字典2中的内容导致了同一个设备会存在很多无用的socket对象。而这些对象没有业务上的意义而且还因为具有root而无法被清除。
总结内存泄漏问题是后台服务中比较常见的一类故障,在发生内存泄漏事故时,如果单纯从服务运行场景的角度来分析往往得不到太好的效果而且耗时长并且难以找到准确的故障点。借助于windbg及sos插件的功能,综合使用gcroot、dumpheap和finalizequeue等指令快速定位内存泄漏的准确位置,并在此基础上结合一些业务方面的知识和一些代码上的分析,就可以快速分析出内存泄漏的场景和原因,并针对性的制定出相应的修复计划。
参考文献抓取Dump文件的方法和工具介绍
清理未托管资源
SOS.dll(SOS 调试扩展)
垃圾回收的基本知识