我有一个正在运行的NodeJS脚本,该脚本没有关闭套接字文件描述符。这是我正在使用的代码的过度简化版本:
const socketServer = createServer(socket => {
socket.on("close", () => {
socket.destroy()
console.log("Socket destroyed")
})
socket.on("data", () => {
// do whatever needs to be done
socket.end("blah blah")
})
})
socketServer.listen(5000)
如果我运行服务器并让其执行任务,则文件描述符开始累加:
ll /proc/{pid}/fd | wc -l
客户端是一个Java tomcat应用程序,它将不时轮询该服务器,打开套接字并关闭。我看到了这种情况,因为“套接字已关闭”被打印到stdout(最终打印到PM2日志),但是文件描述符仍然保留。
我正在使用节点6.14.1
为什么会这样?