我怀疑我的C#服务器应用程序(在win server 2012上运行)有本机内存泄漏,可能来自我正在使用的一个本机库。运行约2周后,我的应用程序达到~2.5GB的内存。使用WinDbg查看转储,我看到1.9GB的本机内存(不断增加)。管理内存没有超过±600MB-ish阈值。
运行!heap -s命令我看到两个段占用了1.7GB的堆内存,但是用!heap -stat -h检查这些段(基本上跟随https://www.codeproject.com/Articles/31382/Memory-Leak-Detection-Using-Windbg的流程)向我展示了两者的繁忙字节数大约为30MB,这让我不知道可能导致泄漏的原因。
我暂时没有选择实时调试应用程序(连接分析器等),因为它在生产中运行,性能下降是不可能的。不幸的是,这种行为在我可用的任何其他环境中也无法重现。
我最初的猜测之一是,这不是泄漏,而是操作系统懒惰的内存回收(因为没有其他进程需要此内存)。我可以通过调整占用大量内存的进程来验证这一点,但如果我错了,我的应用程序会崩溃,这对我来说不太可能:)
还有其他方法可以理解转储中发生的事情吗?还是其他任何工具? 任何帮助将不胜感激!