无法连接到 TCP 服务器超过 140 个连接?



我正在Golang构建TCP插座服务器。它的效果很好,小于〜140个客户连接。但是,如果我尝试将最大连接号设置为500,则在第140个客户端未连接到服务器之后。

我将文件描述符计数增加到1048576,但仍无法使用。

$ulimit -n
1048576

我认为问题来自操作系统。(服务器和客户在同一台计算机上工作),所以OS信息:

Mac OS 10.12 Sierra 64位。

有人知道为什么我不能增加TCP连接号码?

github

我和您在同一操作系统上,但我无法复制您的问题。我正在使用GO版本1.7.4。我尚未在Go 1.8上测试,但今天早些时候发布了。

我创建了两个文件,server.go和client.go(下面复制)。当我运行它们时,我将获得超过140个连接。在运行之前,我切换到root并像这样设置Ulimit:

$ sudo -s
$ ulimit -n 10000

客户端输出:

Established 1 connections
...
Established 2971 connections
panic: dial tcp 127.0.0.1:1337: socket: too many open files in system

服务器输出的东西非常相似。

这是client.go:

package main
import (
    "fmt"
    "net"
)
func main() {
    var numConns int
    for {
        _, err := net.Dial("tcp", "127.0.0.1:1337")
        if err != nil {
            panic(err)
        }
        numConns++
        fmt.Println("Established", numConns, "connections")
    }
}

和server.go:

package main
import (
    "fmt"
    "net"
)
func main() {
    listener, err := net.Listen("tcp", ":1337")
    if err != nil {
        panic(err)
    }
    var numConns int
    for {
        _, err := listener.Accept()
        if err != nil {
            panic(err)
        }
        numConns++
        fmt.Println("Got", numConns, "connections")
    }
}

这不是操作系统的问题,而是硬件。路由器可能是一个问题。进入该范围时,商业路由器确实会失败。我的猜测是,亚历克斯(Alex)正在大型公司或大学的商业级路由器进行测试,但您正在家里进行测试。

最新更新