CNode

寻求nodejs的故障恢复方法

Aalexbian发布于14 年前最后回复14 年前15 回复8279 浏览0 收藏

抽空看了下《node.js开发指南》 里面提到: --“当程序有错误发生时,整个进程就会结束,需要重 新在终端中启动服务器。这一点在开发中无可厚非,但在产品环境下就是严重的问题 了,因为一旦用户访问时触发了程序中某个隐含的bug,整个服务器就崩溃了,将无 法继续为所有用户提供服务。在部署Node.js 应用的时候一定要考虑到故障恢复,提 高系统的可靠性。”

想想看确实是啊,而有google上搜了一下也没有相关介绍。

还请大虾们有空来讨论一下啊。

查看回复

回复 (15)

A
a272121742#2·14 年前

有相关的模块和插件能控制。另外如果你部署在云服务上的话,这样的问题他们会去做。

S
seasonx4#3·14 年前

楼主自相矛盾啊

“一旦用户访问时触发了程序中某个隐含的bug,整个服务器就崩溃”

"在部署Node.js 应用的时候一定要考虑到故障恢复"

如果用户不断触发这个BUG呢,故障是不是也要无限循环恢复(重启进程)? JS的致命错误会导致进程终止这是事实,解决方法无非2个

1.做好容错方面的测试,让程序没有BUG;对于功能固定的应用,这是容易办到的

2.多使用try catch语句

不过应用不是自己开发的,单纯的重启进程非常危险;一般情况下该死进程的时候还是让它死掉比较好

S
seasonx4#4·14 年前
M
myy#5·14 年前

说到底,这是个质量控制的问题,用什么web server都一样,能预测的致命的bug就不应该存在! 推广一下,假设操作系统也有这样的bug,你又能怎样呢?比如windows的蓝屏~,windows能自己处理蓝屏的话,蓝屏就不会存在了。

程序是人写的,不能指望程序自己“永远不死”,真有这一天的话......尼奥必须出来拯救世界了~~

L
leizongmin#6·14 年前
process.on('uncaughtException', function (err) {
  // 当有异常未处理时(原本应该是自动退出进程的),监听uncaughtException事件可以
  // 避免进程退出,在此处记录err出错信息,以便以后找到你的程序中隐含的Bug
});

参考这里:http://nodejs.org/api/process.html#process_event_uncaughtexception

L
leizongmin#7·14 年前
引用 leizongmin参考这里:http://nodejs.org/api/process.html process event uncaughtexception

不过,在写程序时就应该考虑到,你的程序有可能被随时重启的,不要太依赖这个。

A
alexbian#8·14 年前
引用 leizongmin参考这里:http://nodejs.org/api/process.html process event uncaughtexception

靠谱,还是对nodejs自身的东西了解的不够啊,感谢!

A
alli#9·14 年前

Linux 可以使用upstart 自动维护进程

D
DoubleSpout#10·14 年前

建议使用cluster,然后fork多个worker,使用心跳包,当master失去和worker的心跳,则重启worker,这样就可以避免僵尸进程的存在

L
leizongmin#12·14 年前
D
DoubleSpout#13·14 年前
引用 DoubleSpout建议使用cluster,然后fork多个worker,使用心跳包,当master失去和worker的心跳,则重启worker,这样就可以避免僵尸进程的存在

同时你可以再worker发送心跳包的时候发送内存使用情况,让master做内存检测,如果超过内存使用标准,就记录日志,然后重启worker。

J
JacksonTian#15·14 年前

必要的系统监控是需要的。

参与回复
登录后即可参与回复。登录