异常连接导致的内存泄漏排查
背景 在生产环境中,部署在客户的程序在运行了将近两个月后发生了闪退。而且两个服务器的程序先后都出现了闪退现象。通过排查windows日志发现是OOM异常导致的闪退。本文记录了该异常事件完整的排查过程与解决方案。 在本篇文章中会涉及到以下技术知识点:使用windbg对dump文件进行内存分析、使用wireshark抓包分析、powershell脚本编写、完成端口及重叠I/O原理等。 详细流程 程序崩溃后,我们要求客户导出一个dump文件供我们分析,并提供程序相关的运行日志。同时查看了windows的相关日志确定了是由于OOM(Out Of Memory)异常导致的。 使用windbg分析dump文件 启动windbg打开dump文件 由于我们的程序是基于 .net framework 3.5 开发的,因此我们使用 SOS 的相关扩展命令进行分析。需要在windbg中导入 mscorwks .loadby sos mscorwks 想对windbg进行深入学习,可以查看《使用WinDbg》讲解的非常详细。 通过 !dumpheap -stat 对内存占用情况进行汇总统计。 ! dumpheap -stat .. . 00007ff7ffbc0d50 536240 17159680 NetMQ.Core.Utils.Proactor+Item 00007ff7ffbca7f8