我正在使用WAMP运行Windows 2008 Server(Apache 2.2.8,php 5.2.6),我收到此错误...
PHP警告:file_get_contents(http://www.example.com/portal/)[function.file-get-contents]:无法打开流:无法执行对套接字的操作,因为系统缺少足够的缓冲区空间或因为队列是满。
有没有人经历过类似的事情?
谢谢!
答案 0 :(得分:1)
此错误消息与Winsock错误WSAENOBUFS
相关联,实际上来自Windows而不是SQL Server,它有两个众所周知的根本原因。然而,今天它仍然让人们感到困惑,可能是因为没有单一来源可以解释两者的根本原因并为两者提供解决方案。以下是对两种常见情况的描述,您可能会看到以下错误和快速解决方案:
操作系统内存耗尽TCP缓冲区
当功能强大的客户端计算机(尤其是具有大量RAM的计算机)运行x86版本的Windows时,人们使用c:\ boot.ini文件中的/ PAE开关来允许该计算机上的应用程序能够解决全方位的记忆。通常用于为应用程序提供更多内存的另一个开关是boot.ini文件中的/3gb
开关。当这两者结合使用时会出现问题:/3gb
开关通过减少操作系统可用的内存量为应用程序提供更多内存。当它在应用程序需要许多OS资源的强大机器上使用时,例如通过打开许多TCP连接,这可能导致操作系统耗尽内存以获取TCP缓冲区等资源。当发生这种情况时,Winsock会抛出错误WSAENOBUFS
。
解决方案:从/3gb
移除C:\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