如何防止node.js崩溃?尝试捕获不起作用

根据我的经验,php服务器会向日志或服务器端抛出异常,但是node.js只会崩溃。因为尝试都是异步完成的,所以用try-catch包围我的代码也不起作用。我想知道其他所有人在生产服务器中做什么。

Tony樱番长2020/03/24 19:11:07

UncaughtException是“一种非常粗糙的机制”(是如此),现在不建议使用域。但是,我们仍然需要某种机制来捕获(逻辑)域周围的错误。图书馆:

https://github.com/vacuumlabs/yacol

可以帮助您做到这一点。只需编写一些额外的代码,您就可以在代码周围拥有不错的域语义!

Pro宝儿2020/03/24 19:11:07

使用try-catch可能会解决未捕获的错误,但是在某些复杂的情况下,它将无法正确执行捕获异步功能之类的工作。请记住,在Node中,任何异步函数调用都可能包含潜在的应用崩溃操作。

使用uncaughtException是一种解决方法,但是它被认为是低效的,并且可能在Node的未来版本中被删除,因此不要指望它。

理想的解决方案是使用域:http : //nodejs.org/api/domain.html

要确保您的应用程序启动并运行,甚至服务器崩溃,请使用以下步骤:

  1. 使用节点群集为每个核心分叉多个进程。因此,如果一个进程死亡,则另一个进程将自动启动。检出:http : //nodejs.org/api/cluster.html

  2. 使用域来捕获异步操作,而不是使用try-catch或未捕获。我并不是说尝试捕获或未捕获是不好的想法!

  3. 永远使用/主管来监视您的服务

  4. 添加守护程序以运行您的节点应用程序:http : //upstart.ubuntu.com

希望这可以帮助!

乐Mandy2020/03/24 19:11:07

尝试 supervisor

npm install supervisor
supervisor app.js

或者,您也可以安装forever

这一切将是通过重新启动服务器来恢复崩溃时的服务器。

forever 可以在代码内使用,以正常恢复崩溃的任何进程。

forever文档以编程方式提供了有关退出/错误处理的可靠信息。

Stafan2020/03/24 19:11:07

尝试一下pm2节点模块,它是非常一致的,并且文档丰富。带有内置负载均衡器的Node.js应用程序的生产过程管理器。请避免针对此问题的uncaughtException。 https://github.com/Unitech/pm2