首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定哪个应用程序正在泄漏未分页内存?

如何确定哪个应用程序正在泄漏未分页内存?
EN

Server Fault用户
提问于 2011-11-30 04:34:14
回答 1查看 18.7K关注 0票数 8

最近,我们的实时服务器出现了一个问题,导致我们的Web应用程序停止响应。我们得到的全部是503个错误,直到我们重新启动服务器,然后就没事了。最后,我追溯到httperr.log,发现了很多1_Connections_Refused错误。

进一步的调查似乎表明,我们已经达到了非分页池的极限。从那时起,我们就一直在使用Poolmon.exe监视非分页池内存,并且我们认为我们已经识别了导致问题的标记。

代码语言:javascript
复制
Tag   Type    Allocs       Frees       Diff       Bytes      Per Alloc
Even  Nonp  51,231,806   50,633,533   684,922   32,878,688      48

如果我们使用poolmon.exe /g,它将映射的驱动程序显示为<未知>事件对象。

这根本帮不上忙。我的团队花了相当长的时间研究这个问题,还没有找到一个进程来将其缩小到特定的应用程序或服务。我感觉到大多数人似乎是通过在机器上杀死进程来解决这个问题的,直到他们看到了非分页内存重置。在生产机器上工作时,这并不是您想要看到的。

如果我打开任务管理器并查看进程列表。我看到MailService.exe的NP池值为105 K,这比第二位列出的进程的值高36K。由于我们过去在邮件服务器上遇到了一些问题(这可能与这个问题有关,也可能与此无关),我的直觉是,这是造成问题的原因。

然而,在我们停止重新启动服务之前,我希望有一点确定性,而不仅仅是一种“直觉”。

我也尝试过使用poolmon.exe /c,但是这总是返回错误:

代码语言:javascript
复制
unable to load msvcr70.dll/msvcp70.dll

而且它也不会创建localtag.txt。我的同事不得不从网上下载pooltag.txt,因为我们不知道它在哪里。我们没有安装win调试器或win DDK (我可以看到)。也许上面的错误是因为我们没有安装这些,但我不知道。

最后,我尝试了:

代码语言:javascript
复制
C:\windows\system32\driver\findstr /m /l Even *.sys

这返回了一个相当大的.sys文件列表,而且对当前的问题也没有任何帮助。

所以我的问题是:有没有其他方法来缩小内存泄漏的原因?

更新:

如下所示,最近一天,我一直在记录未分页的池Bytes,以查看是否有任何进程呈上升趋势。在大多数情况下,所有进程的使用似乎都是相当静态的。他们中有两个人看上去稍微有点起色。我会在未来数天继续监察这方面的情况。

我还忘了前面提到,没有一个进程似乎使用过多的句柄。

更新2:

在过去的几周里我一直在监控这件事。单独进程的非分页Bytes池和未分页的Bytes池在这段时间内都保持相对稳定。在此期间,Windows被更新,服务器重新启动,所以我想知道这是否解决了问题。我肯定没有看到在非传呼的拜特斯池的持续增长,因为我是在此之前。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2012-01-19 03:38:53

我已经对此进行了大约6-7周的监测,并最终能给出一个明确的答案。

首先,针对单个进程的非分页Bytes并没有真正告诉我任何有用的东西,因为它们在使用上看起来都是相当静态的。有尖峰,但使用总是回到基线之后。

没有寻呼的拜特斯记忆总量也有一段时间是静态的,但随后开始逐渐增加,然后急剧上升。经过一个高峰,大约一半的内存被释放,然后它又保持静止(在更高的水平)一段时间,直到模式重复。看了看图表,我注意到这些尖峰似乎是相当有规律的间隔,结果发现它们发生在两个星期之间,而且总是在一个星期天。

因此,下一个问题是:什么是双周刊在星期日?我去看了一下事件查看器( Event ),每次出现尖峰时,McAfee都在运行。我还认为,通过频繁登录服务器来监视问题,我们无意中使问题变得更糟,因为McAfee有一个实时扫描器,我相信这是导致我们看到的小幅度增加的原因。

我认为,正在计划中的任务扫描也解释了为什么我们看到NP内存增加到PoolMon中的事件对象标记,而不是McAfee特定的标记。这是我们真正走上花园小径的主要原因。

现在我们终于知道是什么导致了泄漏,我们可以做些什么来解决它。令人难以置信的是,它花了这么长时间才找到它。

更新:作为最后的注意事项。McAfee在周末进行了更新,这完全解决了我们的非分页内存问题。

更新2:由于我刚刚获得了支持这一票,我将添加一个进一步的更新。最初,McAfee的更新确实解决了我们的问题,即我们不再定期看到NP内存中的大量尖峰。我还注意到,自更新以来,McAfee似乎不再默认地将日志写入事件查看器,事件查看器在主动扫描时隐藏日志。

但是我们仍然看到NP内存的使用在逐渐增加。现在我们需要每两周左右重新启动一次服务器。糟糕的是,我们最近收购了一台新服务器,希望更新的硬件和软件能够解决这个问题,但我们的全新服务器只有Windows 2008、server 2008 R2和已安装的McAfee仍然显示出NP内存泄漏。直到我完全删除了McAfee之后,泄漏才停止,甚至在我们用我们所有的软件准备切换到服务器之后,它仍然是静态的。

我已经读过了,我不知道这是不是真的,问题不在McAfee,而是McAfee使用的一些导致NP内存泄漏的Windows例程。显然,网络活动是泄漏的原因,即网络活动越多,=>越大。这似乎与我们的经验是一致的,因为随着我们的服务器变得越来越繁忙,泄漏变得更糟了。

票数 6
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/336076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档