macos - 无法连接到超过 140 个连接的 tcp 服务器?

标签 macos sockets go tcp

我正在用 golang 构建一个 TCP 套接字服务器。它适用于少于 ~140 个客户端连接。但是,如果我尝试将最大连接数设置为 500,则在第 140 个客户端不连接到服务器后。

我将文件描述符计数增加到 1048576,但它仍然不起作用。

$ulimit -n
1048576

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

Mac OS 10.12 Sierra 64 bit.

有谁知道为什么我不能增加 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")
    }
}

关于macos - 无法连接到超过 140 个连接的 tcp 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42257588/

相关文章:

go - 如何在 Godoc 中隐藏标准库?

去-redis : TTL returns a negative duration when the key does not exist

Android (Pixel 2) 在不重启计算机的情况下无法通过 USB 连接到 MacBook Pro

c - C 中涉及套接字和客户端-服务器通信的程序问题

node.js - 通过 file.createWriteStream() 流式传输到 GCP 时,获取 ESOCKETTIMEOUT、ECONNRESET 或套接字挂起大文件

java - 出现错误 "java.net.SocketException: Connection reset"

go - Firestore 云函数 : Get DocumentSnapshot from the event

linux - 在一个命令中动态终止多个 Mac OS 进程?

linux - 如何使用 Bash 中的变量检查文件夹是否相同?

macos - 如何在 OSX 中使用 Swift 发送 api key 进行身份验证?