最近,我们的实时服务器出现了一个问题,导致我们的Web应用程序停止响应。我们得到的全部是503个错误,直到我们重新启动服务器,然后就没事了。最后,我追溯到httperr.log,发现了很多1_Connections_Refused错误。
进一步的调查似乎表明,我们已经达到了非分页池的极限。从那时起,我们就一直在使用Poolmon.exe监视非分页池内存,并且我们认为我们已经识别了导致问题的标记。
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,但是这总是返回错误:
unable to load msvcr70.dll/msvcp70.dll而且它也不会创建localtag.txt。我的同事不得不从网上下载pooltag.txt,因为我们不知道它在哪里。我们没有安装win调试器或win DDK (我可以看到)。也许上面的错误是因为我们没有安装这些,但我不知道。
最后,我尝试了:
C:\windows\system32\driver\findstr /m /l Even *.sys这返回了一个相当大的.sys文件列表,而且对当前的问题也没有任何帮助。
所以我的问题是:有没有其他方法来缩小内存泄漏的原因?
更新:
如下所示,最近一天,我一直在记录未分页的池Bytes,以查看是否有任何进程呈上升趋势。在大多数情况下,所有进程的使用似乎都是相当静态的。他们中有两个人看上去稍微有点起色。我会在未来数天继续监察这方面的情况。
我还忘了前面提到,没有一个进程似乎使用过多的句柄。
更新2:
在过去的几周里我一直在监控这件事。单独进程的非分页Bytes池和未分页的Bytes池在这段时间内都保持相对稳定。在此期间,Windows被更新,服务器重新启动,所以我想知道这是否解决了问题。我肯定没有看到在非传呼的拜特斯池的持续增长,因为我是在此之前。
发布于 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例程。显然,网络活动是泄漏的原因,即网络活动越多,=>越大。这似乎与我们的经验是一致的,因为随着我们的服务器变得越来越繁忙,泄漏变得更糟了。
https://serverfault.com/questions/336076
复制相似问题