Windows Server – “没有足够的可用存储空间错误”

我们有两台IIS 7服务器在networking上运行。 每台服务器上都有一个站点的副本。 文件使用DFS同步(仅源文件)。 图片和大文件使用共享位于不同的服务器上。

每周至less几次,当读取任何文件或处理服务器代码时,我们会收到错误"Not enough storage available" 。 IIS服务器无法将path映射到本地磁盘(不仅仅是与DFS同步的path),加载组策略权限(我们收到各种错误)似乎也存在问题,我们无法在任何服务器上打开任何共享在lan上。 从其他自定义应用程序读取文件时也有I / O错误。 磁盘速度和延迟在这个秋季都可以。 如果我们试图复制一个文件或testing一个驱动器的速度,通常工作。 有时,我们甚至无法运行“我的电脑”或任何其他软件(例如性能监视器)。 只有“以pipe理员身份运行”才能启动。 每个磁盘上都有足够的存储空间。

大多数网站停止工作(但不是全部)。 服务器重新启动后,一切正常工作几天,然后问题重新出现。

服务器使用VMWARE进行虚拟化,每个服务器上有50个IIS池(一些是mem限制的)和大约200个正在运行的站点。 两台服务器都有16GB的内存(只有80%左右)。 CPU一直在30 – 60%之间。

我们尝试将IRPStackSizeregistry属性更改为更高的数字,但没有任何更改。 问题依然存在。 我们试图禁用防病毒(NOD) – 没有成功。

任何提示? 也许我们接近IIS限制(对很多网站/池)? 也许32位操作系统和16GB的内存? 也许有一些“秘密”的registry设置…我们不认为每天重新启动是长期的解决scheme。

Not enough storage available错误与磁盘存储无关。 这是关于内部记忆。

这个错误很容易重现。 只需select一堆大文件(图像或DLL或其他),右键单击并使用open-with选项使用记事本打开它们。 这应该吃掉内存的分配。 当交换文件接近最大容量时,随机服务将开始logging事件日志中Not enough storage available 。 他们通常会一直处于故障状态,直到重新启动。

我遇到过我自己的服务,并且必须添加一些额外的error handling来强制服务进程退出,当一个线程发生这样的错误。 这样服务将以自动方式重启和恢复。

IIS通常很好地处理这种情况(与一般的Windows服务相比)。

为了find导致这种情况的进程(通常是内存泄漏),应该使用性能监视器 mmcpipe理单元,并logging正在运行的进程的内存使用情况(在决定要logging的内容时有select性,因为这些日志文件可能变得相当大)。 另一种select是使用xperf ,它实际上更适合于debugging低级驱动程序,所以在这种情况下也可以有所帮助。

如果事实certificatew3wc服务正在占用所有内存,那么可以使用微软全新的Application Insights (或任何其他IIS监控工具)等工具来确定哪个应用程序池,Web应用程序或网站负责。 然后,您可以限制该特定池的内存使用情况,或者安排它优雅地回收。

IIS通常可以以一种没有人会注意到的方式循环一个池(取决于应用程序如何处理会话,如果是定制的,当所有静态variables被刷新时可能会丢失会话)。 通常这样的解决方法已经足够好了,而且可以避免昂贵的bug修复(声明:这不是解决问题的“我的风格”,但是大多数利益相关者都喜欢这种方式)。

32位操作系统与16Gb RAM将有效地离开12Gb的未使用。 升级到64位操作系统应该被认为是值得考虑的。

使用PAE开关(物理地址扩展)可以提供临时修复。

有关操作系统可以使用的最大内存以及PAE开关信息,请参阅:

http://msdn.microsoft.com/en-us/library/windows/hardware/gg487503.aspx

问候,

可能是内存泄漏? 可能与这个数量的IIS池,这取决于他们在做什么。

轻松使用来自Microsoft的POOLMON.EXE进行监控(可以从官方的2003支持工具中获取,也可以从我自己的空间下载:www.dfdfdf.eu/poolmon.exe)

Powershell脚本我在“重启 – >崩溃”期间每小时运行一次。

 $date = get-date -Format ddMMyy-hhmm .\poolmon.exe -b -n Output-$date.log #send-mailmessage -smtpserver 10.1.1.11 -to patrick@mail.co.uk -from poolmon@mail.co.uk -subject "Poolmon output $date" -attachments "Output-$date.log" #Extract top offender $TAG = (Get-Content Output-$date.log)[3] $Code = $((($TAG -replace '\s+', ' ').split(" "))[1]) $Byte = $((($TAG -replace '\s+', ' ').split(" "))[6]) ECHO "$Code,$Byte" >>chart.csv 

Chart.CSV会显示最高的TAG及其字节分配值。

Output-$date.log将向您显示一切。

如果你有一个单一的罪犯在顶部,并保持在顶部,直到崩溃,你有一个可能的候选人的原因。

还可以查看系统中的Eventvwr以了解来自SRV事件,提到“资源不足”

首先,在32位操作系统上有很多IIS工作进程正在运行。 正如其他用户所提到的,64位操作系统肯定会缓解性能问题。

其次,您收到存储错误,但没有提供有关存储空间的任何信息。 您是否检查过所有服务器上的驱动器,以确保有足够的存储空间? 你有没有检查你的虚拟内存设置,并validation页面文件所在的驱动器有足够的空间? 在VMWare中,虚拟硬盘驱动器在本地或共享networking存储上如何存储?

第三,没有操作系统的信息,但IIS 7正在运行我假设Server 2008.你检查是否有服务器可用的服务包和修补程序,并阅读发行说明? 其中之一可能有一个修复。

我还build议在所有服务器上运行PerfMon,并查找长物理磁盘队列,CPU使用率,分页文件%使用率和内存页错误数/秒。 另外看看你的VMWare监控,看看数据存储是否有任何问题,如高延迟。

这个问题可能是由许多因素造成的,包括与存储器的通信丢失,页面文件超出驱动器限制或其他许多事情。 如果您可以在事件查看器中发布事件的确切文本以及其他一些有助于诊断的信息。 因为你在组策略加载时遇到问题,以及在不加载应用程序的情况下加载其他问题,所以我不会完全排除在这个时候损坏的操作系统。