求助:我的linux服务器tcp链接不能超过9000个!
服务器:用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()
})
}
@meiwhu 整数 9000 吗?
@liangtongzhuo 不是的,八千多个。
@meiwhu 是不是带宽不够用了?
@liangtongzhuo 只是建立连接,没有发送数据啊。
链接百度也是8000多个链接就不行了。
是不是 worker 太少了。 我只想知道 nginx 怎么应对这种半连接攻击。。。。 limit_conn_zone 没用啊。
也有可能是客户端的问题。同时测试看一下。
@MiYogurt @liangtongzhuo 我登录另外一台服务器测试了下,全部连接成功的。应该是我电脑所在的网络问题吧
错误报的是 dns
谢谢各位参与,应该是我这边的网络问题,只能发起8000多个链接,然后网页都打不开了。 我登录另外一台服务器作为客户端,可以发起10000链接的,不是服务端的问题。