抽空看了下《node.js开发指南》 里面提到: –“当程序有错误发生时,整个进程就会结束,需要重 新在终端中启动服务器。这一点在开发中无可厚非,但在产品环境下就是严重的问题 了,因为一旦用户访问时触发了程序中某个隐含的bug,整个服务器就崩溃了,将无 法继续为所有用户提供服务。在部署Node.js 应用的时候一定要考虑到故障恢复,提 高系统的可靠性。”
想想看确实是啊,而有google上搜了一下也没有相关介绍。
还请大虾们有空来讨论一下啊。
15 回复
楼主自相矛盾啊
“一旦用户访问时触发了程序中某个隐含的bug,整个服务器就崩溃”
“在部署Node.js 应用的时候一定要考虑到故障恢复”
如果用户不断触发这个BUG呢,故障是不是也要无限循环恢复(重启进程)? JS的致命错误会导致进程终止这是事实,解决方法无非2个
1.做好容错方面的测试,让程序没有BUG;对于功能固定的应用,这是容易办到的
2.多使用try catch语句
不过应用不是自己开发的,单纯的重启进程非常危险;一般情况下该死进程的时候还是让它死掉比较好
说到底,这是个质量控制的问题,用什么web server都一样,能预测的致命的bug就不应该存在! 推广一下,假设操作系统也有这样的bug,你又能怎样呢?比如windows的蓝屏~,windows能自己处理蓝屏的话,蓝屏就不会存在了。
程序是人写的,不能指望程序自己“永远不死”,真有这一天的话…尼奥必须出来拯救世界了~~
process.on('uncaughtException', function (err) {
// 当有异常未处理时(原本应该是自动退出进程的),监听uncaughtException事件可以
// 避免进程退出,在此处记录err出错信息,以便以后找到你的程序中隐含的Bug
});
参考这里:http://nodejs.org/api/process.html#process_event_uncaughtexception