IIS7 Windows 2008 R2 w3wp.exe无法释放内存

时间:2018-04-24 11:06:33

标签: asp.net windows web-services iis-7.5 w3wp

因此,我们在运行带有最新更新的IIS 7的Windows 2008 R2生产服务器上运行ASP.NET Web服务。最近我们注意到内存消耗很高。

在实施垃圾处理技术后,内存似乎得到了很好的控制。但是,当应用程序池(w3wp.exe)在指定时间后回收时,它所占用的内存不会释放回系统。如果我们手动回收,会观察到相同的现象,并且消耗的内存似乎丢失了。

在任务管理器中看到新的w3wp.exe实例,内存使用率低@几百MB,但系统内存不断上升到不合理的级别。

我们有一台32 gig的服务器,在几天之内就会达到20-25GB的内存,机器变得迟钝。只有完整的Windows重启似乎才有效。

有关为什么即使在应用程序池终止后内存未释放的任何见解也会有所帮助。我们在哪里看?

即使在大扫描之后,DebugDiag也没有任何异常。此外,无法从DebugDiag获取堆栈转储。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:0)

请指出你在说什么记忆。如果是虚拟内存,则它独立于RAM。

如果您在更改代码后观察到高系统内存且w3wp内存不高,那么我不认为问题出在w3wp中。此外,由于重启服务器解决了这个问题,我不认为w3wp是罪魁祸首。

如果你假设当应用程序池回收时,它占用的内存可以被其他人使用,那就不正确了。每个进程独立运行并在其自己的虚拟空间内运行。

例如,32位计算机上的32位应用程序可以爬行最多4 GB的虚拟内存(2 GB用户模式和2 GB内核模式)。 64位计算机上的32位应用程序可以爬升到8GB(4GB用户模式和4 GB内核模式)。 64位计算机上的64位应用程序可以爬升到8 TB(4TB用户模式和4 TB内核模式)。这完全独立于你的RAM。

根据您的情况,您可以尝试某些事情。

  1. 禁用所有第三方服务并检查行为。
  2. 观察整个系统处于高内存时占用最多内存的组件(进程)
  3. 捕获perfmon以了解内部究竟发生了什么。
  4. 我认为您可能需要转储整个系统,然后确定发生了什么。 (我不是这方面的专家)
  5. 如果您有任何跟进问题,请与我们联系。