WebSocket 连接数上限突破:Node.js 服务中调整文件描述符限制的方法
·
WebSocket 连接数上限突破:Node.js 服务中调整文件描述符限制的方法
WebSocket 连接数受限于操作系统的文件描述符(File Descriptor)限制。在 Linux 系统中,每个网络连接(包括 WebSocket)都会占用一个文件描述符。突破此限制需从三个层面调整:
1. 检查当前限制
# 查看系统全局限制
cat /proc/sys/fs/file-max
# 查看用户级限制
ulimit -n
# Node.js 进程实时占用
ls -l /proc/$(pgrep node)/fd | wc -l
2. 调整系统级限制
修改 /etc/sysctl.conf:
# 增加系统总文件描述符上限
fs.file-max = 1000000
# 应用配置
sysctl -p
3. 调整用户级限制
修改 /etc/security/limits.conf:
* soft nofile 100000
* hard nofile 1000000
重启后生效,或通过 ulimit -n 100000 临时生效。
4. Node.js 应用层优化
启动脚本设置:
# 启动时显式设置描述符限制
ulimit -n 100000 && node app.js
使用 cluster 模块负载均衡:
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
} else {
require('./websocket-server'); // 你的 WebSocket 服务
}
5. 内核参数调优
修改 /etc/sysctl.conf:
# 增加 TCP 连接队列
net.core.somaxconn = 65535
# 加快 TIME-WAIT 回收
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_fin_timeout = 30
6. 验证调整结果
// 在 Node.js 中输出当前限制
const process = require('process');
console.log(`文件描述符限制: ${process.getrlimit().rlim_cur}`);
注意事项:
- 调整后需重启 Node.js 服务
- 物理内存限制:每 1,000 连接约需 1MB 内存
- 使用 PM2 时,需在配置中设置
max_memory_restart和ulimit- 监控工具推荐:
htop,ss -s,netstat
通过上述步骤,可将单机 WebSocket 连接数从默认的 1024 提升至 10 万级以上,具体数值取决于服务器配置。
更多推荐



所有评论(0)