程序网络访问出错:lacked sufficient buffer space
2015-03-05 00:00
537 查看
之前在用Go语言做一个批量程序时出现在下错误
dial tcp 127.0.0.1:80: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
环境:程序操作是一直模拟访问网站,不断Get一些网页或Post一些数据,运行在服务器上,刚开始正常,一会数据过大之后就出现如上错误了。
网上查找资料后了解到,这并不是Go特有的,这是由于程序不断打开关闭连接,有些操作完成后没有正常手动关闭,导致大量连接处于CLOSE_WAIT状态,直到计算机再也找不到可供使用的端口,程序就出错了。
解决:解决的最优方法当然是优化程序代码,把所有的错误都处理掉,连接正常关闭。实在不行就是通过修改服务器配置,来加大可用端口数量或减少CLOSE_WAIT等待时间(CLOSE_WAIT状态默认会保持120秒):
打开注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
建一个DWORD项,名字为MaxUserPort,值为十进制65534(十六进制0000FFFE),表示最大可用端口为65534
建一个DWORD项,名字为TCPTimedWaitDelay,值为十进制30(十六进制0000001e),表示TCP连接等待时间30秒
我重启之后问题解决了,不过这方法冶标不冶本,建议有条件还是优化您的代码吧。
========== 不羁的分割线 =========
优化方法可以参考:http://my.oschina.net/waknow/blog/293852
就是打开的http连接,http.Response需要Close掉:
resp.Body.Close()
dial tcp 127.0.0.1:80: An operation on a socket could not be performed because the system lacked sufficient buffer space or because a queue was full.
环境:程序操作是一直模拟访问网站,不断Get一些网页或Post一些数据,运行在服务器上,刚开始正常,一会数据过大之后就出现如上错误了。
网上查找资料后了解到,这并不是Go特有的,这是由于程序不断打开关闭连接,有些操作完成后没有正常手动关闭,导致大量连接处于CLOSE_WAIT状态,直到计算机再也找不到可供使用的端口,程序就出错了。
解决:解决的最优方法当然是优化程序代码,把所有的错误都处理掉,连接正常关闭。实在不行就是通过修改服务器配置,来加大可用端口数量或减少CLOSE_WAIT等待时间(CLOSE_WAIT状态默认会保持120秒):
打开注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
建一个DWORD项,名字为MaxUserPort,值为十进制65534(十六进制0000FFFE),表示最大可用端口为65534
建一个DWORD项,名字为TCPTimedWaitDelay,值为十进制30(十六进制0000001e),表示TCP连接等待时间30秒
我重启之后问题解决了,不过这方法冶标不冶本,建议有条件还是优化您的代码吧。
========== 不羁的分割线 =========
优化方法可以参考:http://my.oschina.net/waknow/blog/293852
就是打开的http连接,http.Response需要Close掉:
resp.Body.Close()
相关文章推荐
- 运行android程序访问网络,出错,需要加上权限
- vs2008 SmartDevice 程序 访问Internet时出错 提示:未能建立与网络的连接。解决方案
- 运行android程序访问网络,出错,需要加上权限
- IIS建立新网站出错-另一个程序正在使用此文件,进程无法访问
- 无任何网络提供程序接受指定的网络路径 网上邻居无法访问
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL
- IIS建立新网站出错-另一个程序正在使用此文件,进程无法访问
- 程序访问物理地址之MmMapIoSpace 与 OALPAtoVA
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL
- 访问网络:提示"无任何网络提供程序接受指定的网络路径"
- 无任何网络提供程序接受指定的网络路径 网上邻居无法访问
- Web报表导出与“.rpt 内出错:拒绝访问报表文件。其他程序可能正在使用它”之我解
- VS2005+ACCESS WEB程序出错数据访问权限错误的解决方法
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)
- C#网络编制程序初探(可参照网络访问不同方式)
- VS2005+ACCESS WEB程序出错数据访问权限错误的解决方法
- window服务程序突破限制访问网络共享资源总结
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。 (provider: 命名管道提供程序, error: 40 - 无法打开到 SQL Server 的连接)