4

我在 Ubuntu 服务器上使用带有 Forever 模块的 Nodemon。

我使用这个命令来启动我的节点服务器:

forever start -c nodemon app.js  --exitcrash

它可以正常工作几个小时(大约 48 小时),但之后我的服务器停止处理这些错误:

Error: getaddrinfo EMFILE   
TypeError: Cannot call method 'indexOf' of undefined
Error: Handshake inactivity timeout

这些错误是由于Exceeding Limit of Open Files/Sockets引起的。

现在我的问题是:

我可以使用 -m (在我的操作系统中设置为无限制):

max memnory size   (kbytes, -m) unlimited

我应该将上述命令与 -m 一起使用吗?有什么缺点吗?

或者有没有其他有效的解决方案来修复服务器崩溃?

4

2 回答 2

2

如果您有大量用户,则很可能您正在达到系统排队监听套接字的最大请求数。如果您确定您的服务器可以处理负载,您可以从默认的 128 增加到 1024。

是的,增加 ulimit,以便系统可以处理更多负载,但不要设置为无限制,只需检查足以处理当前负载的内容。

也通过这个增加 linux 中 tcp/ip 连接的最大数量 也会得到一些有用的信息

于 2015-04-09T12:49:27.983 回答
0

这可能不是理想的答案,但是将永远服务与 nodemon 一起使用将确保您的服务器在崩溃后重新启动。

这是对我有用的命令。我将其包括在内是因为要让永远服务和 nodemon 运行良好可能会很棘手。

它执行以下操作:每次修改应用程序 dist/assets 文件夹中的 json 或 raml 文件时,等待 10 秒,然后重新启动节点应用程序(server.js 脚本):

$ forever-service install raml --script server.js -f " -c nodemon" -o " --delay 10 --watch dist/assets -e json,raml --exitcrash" -e "PATH=/usr/local/bin:$PATH"

然后我可以运行:

$ service raml start|stop|restart|status

我还可以使用 chkconfig 实用程序在服务器重新启动时启动服务:

$ chkconfig --add raml
$ chkconfig raml on
于 2015-04-15T21:14:06.937 回答