0

我正在运行带有 WAMP(Apache 2.2.8,php 5.2.6)的 Windows 2008 服务器,我收到此错误...

PHP 警告:file_get_contents( http://www.example.com/portal/ ) [function.file-get-contents]: failed to open stream: 由于系统缺乏足够的缓冲区空间或因为队列已满。

有没有人经历过类似的事情?

谢谢!

4

1 回答 1

1

此错误消息与 Winsock 错误相关WSAENOBUFS并且实际上来自 Windows 而不是直接来自 SQL Server,它有两个众所周知的根本原因。然而,它今天仍然难倒人们,可能是因为没有单一的来源可以解释根本原因并为两者提供解决方案。以下是您可能会看到此错误的两种常见情况的描述以及每种情况 的快速解决方案: OS run out memory for TCP buffers

当一台功能强大的客户端机器(尤其是具有大量 RAM 的机器)运行 x86 版本的 Windows 时,人们使用 c:\boot.ini 文件中的 /PAE 开关来允许该机器上的应用程序能够处理全部范围的记忆。另一个常用于为应用程序提供更多内存的/3gb开关是 boot.ini 文件中的开关。当这两者结合起来时,问题就来了:/3gb开关通过减少操作系统可用的内存量来为应用程序提供更多内存。当它在应用程序需要许多操作系统资源的强大机器上使用时,例如通过打开许多 TCP 连接,这可能导致操作系统耗尽内存来获取 TCP 缓冲区等资源。发生这种情况时,Winsock 会抛出错误WSAENOBUFS

解决方法/3gbC:\boot.ini. 在这种情况下,根本问题是操作系统的内存压力,因此移除/3gb开关将为操作系统提供更多内存并缓解此问题。操作系统用完了可用的 TCP “临时”端口

当客户端计算机打开许多 TCP 连接并运行 Windows Server 2003、Windows XP 或任何早期版本的 Windows 时,它可能会用完 TCP“临时”端口。在 Windows Server 2003、Windows XP 和更早的版本中,Windows 将计算机上可用的临时端口数限制为大约 5000 个。对于不使用连接池的应用程序来说,这个问题尤其常见。

解决方案:要使更多临时端口可用,请按照此 KB 中描述如何创建MaxUserPort 注册表项的说明进行操作:http: //support.microsoft.com/kb/196271

于 2013-10-24T08:58:58.377 回答