我在Ubuntu服务器上使用Nodemon和Forever模块。
我使用此命令启动我的节点服务器:
forever start -c nodemon app.js --exitcrash
它可以正常工作几个小时(大约48小时),但之后我的服务器停止处理这些错误:
Error: getaddrinfo EMFILE
TypeError: Cannot call method 'indexOf' of undefined
Error: Handshake inactivity timeout
这些错误是由超出打开文件/套接字限制引起的。
现在我的问题是:
我可以使用-m(在我的操作系统中设置为无限制):
max memnory size (kbytes, -m) unlimited
我应该将上述命令与-m一起使用吗?有什么缺点吗?
或者还有其他有效的解决方案来修复服务器崩溃吗?
答案 0 :(得分:2)
如果您拥有大量用户,那么您最多可能会遇到排队等待侦听套接字的最大请求数。如果您确定您的服务器可以处理负载,您可以从默认值128增加到1024。
是的,增加ulimit,因此系统可以处理更多负载,但不要设置为无限制,只需检查足以处理当前负载的内容。
同时完成此Increasing the maximum number of tcp/ip connections in linux 也会得到一些有用的信息
答案 1 :(得分:0)
这可能不是理想的答案,但使用带有nodemon的forever-service将确保服务器在崩溃后重新启动。
这是对我有用的命令。我包括它因为永远服务和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