求助:我的linux服务器tcp链接不能超过9000个!
发布于 3 年前 作者 meiwhu 1888 次浏览 来自 问答

服务器:用node写了个helloworld,直接监听81端口。 客户端:用node的net模块发起发起一万个tcp链接。

结果:只有8000多个链接建立了,剩下的都超时了。

我已经修改了: ulimit -n 20480 cat /proc/sys/fs/file-max 100000

请问怎样修改才可以突破这个限制?

11 回复

客户端代码

const net = require('net')

for (let i = 0; i < 10000; i++) {
  makeSocket()
}

let tcpActive = 0
let tcpClosed = 0
let tcpError = 0

function printInfo() {
  console.log(`active: ${tcpActive}, closed: ${tcpClosed}, error: ${tcpError}`)
}

function makeSocket() {
  const socket = net.createConnection(80, 'baidu.com')

  socket.on('connect', () => {
    tcpActive += 1
    printInfo()
  })

  socket.on('close', (hadError) => {
    if (!hadError) {
      tcpActive -= 1
      tcpClosed += 1
    }
    printInfo()
  })

  socket.on('error', (err) => {
    tcpError += 1
    printInfo()
  })
}

@liangtongzhuo 不是的,八千多个。

@meiwhu 是不是带宽不够用了?

@liangtongzhuo 只是建立连接,没有发送数据啊。

链接百度也是8000多个链接就不行了。

是不是 worker 太少了。 我只想知道 nginx 怎么应对这种半连接攻击。。。。 limit_conn_zone 没用啊。

也有可能是客户端的问题。同时测试看一下。

@MiYogurt @liangtongzhuo 我登录另外一台服务器测试了下,全部连接成功的。应该是我电脑所在的网络问题吧

错误报的是 dns

谢谢各位参与,应该是我这边的网络问题,只能发起8000多个链接,然后网页都打不开了。 我登录另外一台服务器作为客户端,可以发起10000链接的,不是服务端的问题。

回到顶部