[问题还要解决]win2003环境下,httpd.exe占用内存越来越大,乃至系统出错

[问题还要解决]win2003环境下,httpd.exe占用内存越来越大,乃至系统出错

一、
The Apache service named  reported the following error:
>>> (OS 10055)由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作。  : make_sock: unable to listen for connections on address 0.0.0.0:80     .


二、错误应用程序 httpd.exe,版本 2.2.4.0,错误模块 ntdll.dll,版本 5.2.3790.1830,错误地址 0x00022583。



特别是第二条错误,是致命的,一发生就迫使APACHE停止工作


只是有一个问题特别难解,就是httpd.exe占用内存会越来越大,到底是什么原因致使内存无法回收呢?和我的apache配置有关吗?




只能设置监控程序定时检查重启Apache,没有好的方案。
唉,要转BSD了....
从其他地方转摘来的,不知道是否有帮助











windows socket error: 由于系统缓冲区空间不足或队列已满,不能执行套接字上的操作(10055),on API connect

解决方法:

1、重启电脑,最简单方法。

2、虚拟内存太小或者C盘满了。如果是这种,请加大虚拟内存量,并保证C盘还有充足的空间。

如果是这种,右键单击我的电脑——>属性——>高级——>性能设置——>高级——>将虚拟内存的值加大。

3、开始-运行依次输入以下命令,输完这些命令后重新启动windows,然后打开IE看看。

regsvr32 Shdocvw.dll
regsvr32 Shell32.dll
regsvr32 Oleaut32.dll
regsvr32 Actxprxy.dll
regsvr32 Mshtml.dll
regsvr32 Urlmon.dll

4、是你电脑里面某个软件的问题。
     这个错误可能是你计算机的Socket句柄资源用尽导致的,能够造成这种现象的一种情况就是你的计算机的某个程序不断的向某个连接发出连接申请,但是始终没能连上,没连上就会引发一个错误,如果软件编程的人没有写释放资源的代码,那么这个连接就始终占据着着一个句柄,于是由于不断的连接,最终导致 Socket句柄资源耗尽。

5、注册表中的以下二项出现错误
    HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Winsock
    HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Winsock2
解决办法:备份,然后找一台相同系统的机器,将以下注册表分支导出存为二个文件,  
    HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Winsock
      HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Services\\Winsock2

最后将这二个导出的注册表文件导入到有问题的机器中即可。

6、运行Hijackthis,选择do a system Scan only,在下列选项前打上勾,然后关闭其他程序和IE窗口,点“Fix Checked”,出现提示时一路点“是”让它继续:
O23 - Service: IEXPLORER - Unknown - C:\\WINNT\\IEXPLORER.exe  灰鸽子

重启电脑按F8进安全模式,打开我的电脑 工具 文件夹选项 查看 设置windows显示所有隐藏文件、受保护的系统文件和文件夹,然后手动删除:C:\\WINNT\\IEXPLORER.exe 及同一时间生成的.DLL文件。
顶一下...还 是没能解决



引用一篇文章看看



文件服务器的未分页内存
在某些情况下,由 IIS 报告的与 UNC 路径名相关的错误是由于文件服务器而不是 IIS 上的问题所引发的。如前面提到的,一个 UNC 连接可引入一个 SMB 连接。结果将创建一个或更多的工作项目 用于 SMB 连接。工作项目是 SMB 针对 I/O 操作所用的数据结构对象,可以在不同的时间以各种方式加以使用。例如,对文件执行一项操作,如:CreateFile 或 GetFileAttributes,仅在短时间内占用一个 I/O 工作项目,但在一个目录结构中查询一个变更通知将在对 IIS 服务器的整个连接期间占用一个工作项目。因此,工作项目所执行的这类工作能够影响用以维持 SMB 连接的工作项目的总体可用性。

工作项目在文件服务器的未分页 池式内存(通常称为未分页池)中进行创建。这种内存之所以成为未分页内存,是因为其无法对系统页面文件进行动态交换或分页。因此,您的服务器拥有可供正常使用的充足的空余未分页池是很重要的。

在一台文件服务器上的大量的工作项目可能导致未分页池式内存的分配超支。在这种情形下,您可能在事件查看器中看到下列错误信息:

没有足够的服务器存储空间用以处理此命令。

服务器无法从系统未分页池进行分配,因为池是空的。

服务器在最后的 60 秒时间内无法分配一个工作项目。

您可以使用文件服务器打开任务管理器快速检查内存,选择执行选项卡和在核心内存框中检查未分页的值。有两种方法可解决这类问题:减少工作项目的数量或调整 IIS 和文件服务器以管理更多的工作项目。

在决定如何进行最佳处理前,您应该在模拟工作负载环境下将服务器运行几个小时,在文件服务器上检查下列计数器的性能监控计数器:

• “打开服务器\文件”提供了有助于估计正确的 SMB 设置的信息。

• “服务器\服务器会话”提供了有助于估计正确的 SMB 设置的信息。

• “服务器\工作项目缺乏”:如果该计数器增加,意味着需要更多的工作项目。

• “服务器\池式未分页字节” :如果计数器太少,服务器几乎耗尽其可用的未分页池。可能就需要减少 SMB 的工作项目。


当您调整服务器时监控这些设置,可以帮助您评估调整的效果。

重要须知: 在 x86 平台上,最大的未分页池式内存是 256 MB;然而,您的系统可能小于该数值,因为最大的内存数量是动态确定的。

减少工作项目数量
在页面服务器上通过减少分配的工作项目数量,可以影响在页面服务器上的未分页池式内存的消耗。这可以使用一些技巧来完成。

• 对 IIS 更改缓存算法;使用针对缓存更新的默认的最后一次修改时间方法,会导致所创建的工作项目减少。

• 减少连接到文件服务器的已验证的用户数量。对每个唯一的用户创建一个连接。如果您对连接指定一个用户,而不使用通行验证,连接数将减少。

• 减少使用远程资源的虚拟目录或 Web 站点的数量


调整服务器
对 IIS 服务器的调整会对文件服务器上的负载造成影响。因此,当调整这些参数时,在文件服务器上的设置就由 IIS 服务器上的设置决定。尤其,您可以控制文件服务器所需工作项目的数量,这可以通过在 IIS 服务器上调整注册表设置MaxCmds,然后在文件服务器上修改 MaxMpxCt 和 MaxWorkItems 来调节MaxCmds的设置加以实现。MaxCmds 决定允许从 IIS 服务器到文件服务器同时连接的 SMB 的数量,MaxMpxCt 在文件服务器上配置用以限制同时连接到那个服务器的数量,而 MaxWorkItems 指定一个文件服务器所能分配的接收缓冲区的最大数量。为 MaxCmds 确定正确的值是很重要的,旨在了解应该在文件服务器上将何值输入给 MaxMpxCt 和MaxWorkItems。在MaxCmds被确定后,在文件服务器上的MaxMpxCt设置,应该等同于在IIS服务器上的 MaxCmds设置。另外,MaxWorkItems的设置至少必须等于MaxCmds * IIS 服务器的数量。

表 1 显示了在 Windows Server 2003 中一些 SMB 设置的默认和最大注册表值(和 Windows 2000 一样):

表 1 SMB 注册表设置

注册表设置 默认值 最大值
HKLM\System\CurrentControlSet\Services\LanmanWorkstation
\Parameters\ MaxCmds
50
65535

HKLM\System\CurrentControlSet\Services\LanmanServer
\Parameters\MaxMpxCt.
50
65535 (Windows 2000 SP2+; max 125 on Windows 2000 pre-SP2)

HKLM\System\CurrentControlSet\Services\LanmanServer
\Parameters\MaxWorkItems
4096
65535 (see 232476 below)


为帮助确定设置了正确的值,这里提供一些关于工作项目设置的详细资料:

• 当使用通行验证访问远程内容时(如图 5 所示),对每一个唯一的已验证用户创建一个 SMB 连接。当指定一个用户访问远程内容时(如图 4 所示),仅有使用一个 SMB 连接。

• 使用文件变更通知作为缓冲更新算法,长期增加了工作项目数量的消耗,因为每个变更通知要求使用一个工作项目,直到连接中断为止。

• MaxWorkItems 在 远程文件服务器的本地注册表配置 HKLM\System\CurrentControlSet\Services\LanmanServer\参数。

• MaxCmds 和 MaxMpxCt 在IIS服务器上的本地注册表配置 HKLM\System\CurrentControlSet\Services\LanmanWorkstation\参数。

• 通常,MaxCmds不得超过 12,000,因为在 X86 平台上内存的上限为 512 MB。

• 要使 MaxWorkItems、 MaxCmds和 MaxMpxCt 注册表值生效,您必须分别在远程文件服务器和 IIS 服务器上停止和启动服务器服务和工作站服务。您可能需要重新启动独立的服务,但不需要重新启动服务器。


下列公式可以帮助您为 MaxCmds 估算起始值。为了清楚地应用这些信息,这些公式将在下一节中应用于几个方案中,即扩展 SMB 的 IIS 和文件服务器配置方案。

在使用文件变更通知时评估 MaxCmds
当对缓冲使用文件变更通知时,评估MaxCmds的公式如下:(IIS 需要针对变更通知监测的确切的物理目录数) * (1 [如果静态文件存在] + 1 [如果 ASP 内容存在] + 1 [如果 ASP.NET 内容存在]) + 50 (并行的缺省/常规文件 I/O )。

这个公式提供的值假定 100% 的 IIS 服务器连接在给定的时间内处于活动状态。一般来说,不存在这种情况,因此MaxCmds可能减少 25% 或 50%,具体情况根据您的活动的特征而定。

重要须知: 这些计算只是一个粗略估计。利用上面推荐的性能监控计数器研究,您可以进行更多的调整。

在使用最后一次修改时间时评估 MaxCmds
当为缓存使用最后一次修改时间时,评估 MaxCmds的公式如下:(每秒请求量峰值 / 用时) * 2。 用时指 IIS 检查文件变更的频率,默认为 5 秒。这个公式提供的值假定在任何时候 IIS 资源的使用比率都很高。如果不是这种情况,您可以MaxCmds降低 50% 到 75%,具体情况根据您的活动的特征而定。

重要须知: 这些计算只是一个粗略估计。利用上面推荐的性能监控计数器研究,您可以进行更多的调整。

计算 MaxWorkItems 和所用的未分页池式内存
在确定MaxCmds 的值后,您应该设置 MaxWorkItems 的值,与( MaxCmds 的值相同* [连接到文件服务器的 IIS 服务器的数量)。 如果您使用 IIS 服务器,那么 MaxWorkItems 将等同于 MaxCmds。如果您有 4 个 IIS 服务器,那么 MaxWorkItems = 4 * MaxCmds。

在一个内存为 512MB 或更多的 Windows 2003 Server 上,每个工作项目占用 20 K 的未分页池式内存。如果在服务器上的内存不足 512 MB,每个工作项目占用 8 K 的未分页池式内存。其目的在于确保有足够的未分页池式内存供其他服务器资源使用,并试图最小化工作项目占用未分页池式内存的总量。

重要须知: 在 X86 平台上未分页池式内存的最大值是 256 MB。然而,由于物理内存容量等因素,您的服务器实际可以分配量会小于该值。设置之后,可以根据系统硬件配置,包括物理内存和已安装的设备,动态调整未分页池式内存容量。您可以使用系统工具 PerfMon 观察两个计数器监控未分页池内存的使用情况:内存\未分页字节和内存\池 未分页 Alloc,可指出有多少未分页池式内存当前正在使用。有两种方法可用以间接确定什么时候未分页池式内存使用已经超过了最大值。其一,当分配未分页池式内存失效时,服务器服务会在系统事件日志中记录该事件。其二,服务器计数器工具 PerfMon\未分页池峰值表明在服务器的一生中任何时间分配的未分页池式内存的最大值。如果您认为您的服务器的未分页池式内存消耗已经达到实际的最大值,就可以粗略地表示出最大可用的未分页池式内存。

在某些情况下,您可能发现您需要大量的工作项目。但每个工作项目占用 20K,您消耗了太多的未分页池式内存。如果您的服务器有 512 MB 内存或更多,您可以配置工作项目的占用内存是8K而不是 20 K。在文件服务器中,将注册表键SizReqBuf, REG_DWORD 位于HKLM\System\CurrentControlSet\Services\LanmanServer\Parameters设为:0x1104 (4356d)。 这就允许在文件服务器上使用更多的工作项目,而不需要消耗大量的未分页池式内存。这种解决方法的代价是:对于大量目录的枚举减少,并能降低网络性能。

注意:按照本文的意图,我们假定服务器有 512 MB 或更多的内存,最大的未分页池式内存是 256 MB,一个工作项目占用 20 K 的空间。
更奇怪的是我的服务器是双CPU的

启动时 进程里有两个 httpd.exe ,但是不管并发量多少,却只有一个httpd.exe是活动的,另一个进程根本没有被调用

而我的FreeBSD6.1下的 apache 能同时启动数十个 httpd.exe的进程,并同时有4个以上是活动状态,速度也明显比win2003快

我都快气晕了
我顶啊
再顶一下

就是因为 apache 无法释放内存就引起资源耗尽而死
httpd.conf:
MaxRequestsPerChild=500
php什么版本?