程序网络访问出错:lacked sufficient buffer space

之前在用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.codeweblog.com/waknow/blog/293852

就是打开的http连接,http.Response需要Close掉:

resp.Body.Close()

分类:Google Go 时间:2015-03-05 人气:438
本文关键词: tcp Golang close_wait
分享到:

相关文章

iOS 开发

Android 开发

Python 开发

JAVA 开发

开发语言

PHP 开发

Ruby 开发

搜索

前端开发

数据库

开发工具

开放平台

Javascript 开发

.NET 开发

云计算

服务器

Copyright (C) codeweblog.com, All Rights Reserved.

CodeWeblog.com 版权所有 闽ICP备15018612号

processed in 0.058 (s). 13 q(s)