我在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
这些错误是由于超出打开文件/套接字的限制引起的。
现在我的问题是:
我可以使用-m(在我的操作系统中设置为无限制):
max memnory size (kbytes, -m) unlimited
我应该用-m来使用上面的命令吗? 有什么缺点吗?
还是有没有其他有效的解决scheme来解决服务器崩溃?
如果你有大量的用户,最有可能的是你打到系统最大数量的请求排队等待侦听套接字。 如果你确定你的服务器可以处理负载,你可以从默认的128增加到1024。
是的,增加ulimit,所以系统可以处理更多的负载,但不设置为无限制,只是检查什么是足以处理当前的负载。
也要经过这个在linux中增加最大数量的tcp / ip连接也会得到一些有用的信息
这可能不是理想的答案,但使用永远服务与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