client:
| package main import ( "net" "fmt" "time" "strconv" "runtime" ) func Connect(host string, port int) { _, err := net.Dial("tcp", host+":"+strconv.Itoa(port)) if err != nil { fmt.Printf("Dial to %s:%d failedn", host, port) return } for { time.Sleep(30 * 1000 * time.Millisecond) } } func main() { count := 0 for { go Connect("192.168.63.128", 8080) count++; fmt.Printf("Gorutue num:%dn", runtime.NumGoroutine()) time.Sleep(100 * time.Millisecond) } } |
二、开始测试
第一次:
先说结果,连接数达到1031时accept失败了,当时还没有对errno做判断,所以只打印输出了accept失败。

然后首先想到的是ulimit -n的限制,查看了一下,默认值1024,然后就是修改这个值,在/etc/security/limits.conf中添加一下内容:
| 1 * soft nofile 102400 2 * hard nofile 102400 |
然后关闭当前xshell连接,重新连接即生效,现在看ulimit -n就是102400了。
这两行的意思就是将每个进程能打开的文件描述符个数的soft、hard限制调整为102400,
注:ulimit -n 102400也可以生效,但是这个修改是临时的。
然后进行第二次测试。
第二次:
逗比了,其实连接数只有2000+,我之前还在奇怪为啥Windows的默认连接数能有这么高呢,原来有些连接已经断了,但是因为我没有做处理,所以以为还在呢,看来我得再安装一个虚拟机了[二哈]
待继续。。。
安装虚拟机去,
时间:2017-12-31 00:09:00
虚拟机安装好了,接着搞,
这次是真的超过10K了。


连接数还在增加,不知道能不能最终达到10万呢,小小的期待ing
时间:2017-12-31 00:41:00,最终上限卡在28232,golang一直报dial失败,由于忘了打印出具体错误信息了,所以无从知道为什么dial失败,所以只能再跑一次T_T

时间:2017-12-31 01:01:00,添加打印dial失败的错误信息的,又跑了一遍,还是在28232时出现dial失败,错误信息:

golang的标准库文档中么有对错误信息的解释,从错误信息来看,是分配地址失败,于是想是不是端口地址范围限制了。








