根据我的经验,php服务器会向日志或服务器端抛出异常,但是node.js只会崩溃。因为尝试都是异步完成的,所以用try-catch包围我的代码也不起作用。我想知道其他所有人在生产服务器中做什么。
如何防止node.js崩溃?尝试捕获不起作用
使用try-catch可能会解决未捕获的错误,但是在某些复杂的情况下,它将无法正确执行捕获异步功能之类的工作。请记住,在Node中,任何异步函数调用都可能包含潜在的应用崩溃操作。
使用uncaughtException
是一种解决方法,但是它被认为是低效的,并且可能在Node的未来版本中被删除,因此不要指望它。
理想的解决方案是使用域:http : //nodejs.org/api/domain.html
要确保您的应用程序启动并运行,甚至服务器崩溃,请使用以下步骤:
使用节点群集为每个核心分叉多个进程。因此,如果一个进程死亡,则另一个进程将自动启动。检出:http : //nodejs.org/api/cluster.html
使用域来捕获异步操作,而不是使用try-catch或未捕获。我并不是说尝试捕获或未捕获是不好的想法!
永远使用/主管来监视您的服务
添加守护程序以运行您的节点应用程序:http : //upstart.ubuntu.com
希望这可以帮助!
尝试 supervisor
npm install supervisor
supervisor app.js
或者,您也可以安装forever
。
这一切将是通过重新启动服务器来恢复崩溃时的服务器。
forever
可以在代码内使用,以正常恢复崩溃的任何进程。
该forever
文档以编程方式提供了有关退出/错误处理的可靠信息。
尝试一下pm2节点模块,它是非常一致的,并且文档丰富。带有内置负载均衡器的Node.js应用程序的生产过程管理器。请避免针对此问题的uncaughtException。 https://github.com/Unitech/pm2
UncaughtException是“一种非常粗糙的机制”(是如此),现在不建议使用域。但是,我们仍然需要某种机制来捕获(逻辑)域周围的错误。图书馆:
https://github.com/vacuumlabs/yacol
可以帮助您做到这一点。只需编写一些额外的代码,您就可以在代码周围拥有不错的域语义!