好的,问题解决了。这是每个Linux服务器都会出现的问题。因此,如果您正在使用其中之一,则需要阅读本文。
原因是 Linux 服务器每个进程拥有的文件的默认限制。
似乎单个 Linux 服务器都有每个进程打开 1024 个文件的限制,您可以通过以下方式检查您的限制:
# ulimit -n
增加这个数字
# ulimit -n 5000 (for example)
每个套接字都会创建一个新的虚拟文件。
由于某种原因,我的服务器没有显示任何错误,服务器只是被冻结,停止日志并且没有任何信号或证据。当我在另一台机器上设置服务器的副本时,它开始发送
warn: error raised: Error: accept EMFILE
warn: error raised: Error: accept EMFILE
warn: error raised: Error: accept EMFILE
...
请小心,因为如果您不是 root,您只会为当前会话更改此设置,而不是永久更改。
技巧:如果您想计算文件数量,在本例中是节点进程打开的文件数量,请记下您的进程 ID 并调用此命令。
# ls -l /proc/XXXXX/fd | wc -l
其中 XXXXX 是进程 ID。这将帮助您知道这是否是您的问题,一旦您启动节点服务器,您可以使用此命令来检查它是否达到顶部,并且在冻结后停止增长。 (默认为 1024 或“ulimit -n”)。
如果您只想检查进程打开了哪些文件:
# ls -l /proc/XXXXX/fd
希望这可以帮到你。无论如何,如果你正在设置一个 Node js 服务器,我很确定你想要这样做以确保它不会融化。
最后,如果您在未来没有日志的错误中需要帮助,您可以尝试strace
ing or dtruss
加工过程
# strace -p <process-id>
应该做这项工作。