内存泄漏问题分析之非托管资源泄漏( 四 )

  • else
  • 字典1.Add(ID,socket1);
  • 字典2.Add(socket1,业务对象);

  • //设备离线
  • if(字典1中存在设备特征码ID)
  • 字典1.Remove(ID);
  • 从伪代码中很容易看出来由于设备上线的时候往字典2中添加了内容但是设备离网以及设备创建重复连接的时候并没有更新字典2中的内容导致了同一个设备会存在很多无用的socket对象 。而这些对象没有业务上的意义而且还因为具有root而无法被清除 。
    总结内存泄漏问题是后台服务中比较常见的一类故障,在发生内存泄漏事故时,如果单纯从服务运行场景的角度来分析往往得不到太好的效果而且耗时长并且难以找到准确的故障点 。借助于windbg及sos插件的功能,综合使用 gcrootdumpheapfinalizequeue等指令快速定位内存泄漏的准确位置,并在此基础上结合一些业务方面的知识和一些代码上的分析,就可以快速分析出内存泄漏的场景和原因,并针对性的制定出响应的修复计划 。
    了解更多云主机托管联系我们(微信):kinnah33

    推荐阅读