注意:请参阅帖子末尾的我的编辑。
我有一个 node.js (Express) 服务器,每秒处理大约 15-30 个请求。我正在提供一堆简单的 JADE 模板和一个 Durandal SPA 应用程序,其中大部分请求都是针对简单 JADE 模板的。几分钟后一切正常,但是服务器在一段时间后开始出现 EMFILE 错误并最终崩溃。经过一番故障排除后,我发现lsof -i -n -P | grep node
一段时间后的输出包含大量此类行:
node 8800 my_user 13u IPv4 906628 0t0 TCP 172.x.x.x:3000->x.x.x.x:44654 (ESTABLISHED)
node 8800 my_user 14u IPv4 908407 0t0 TCP 172.x.x.x:3000->x.x.x.x:13432 (ESTABLISHED)
node 8800 my_user 15u IPv4 908409 0t0 TCP 172.x.x.x:3000->x.x.x.x:38814 (ESTABLISHED)
node 8800 my_user 19u IPv4 906622 0t0 TCP 172.x.x.x:3000->x.x.x.x:56743 (ESTABLISHED)
node 8800 my_user 20u IPv4 907221 0t0 TCP 172.x.x.x:3000->x.x.x.x:46897 (ESTABLISHED)
...
Run Code Online (Sandbox Code Playgroud)
我是 node.js 的初学者,但它似乎无法解除已完成的连接,最终导致 EMFILE 和崩溃。 …