CNode

如何提高NodeJS程序的稳定性

Llongbill发布于15 年前最后回复15 年前9 回复18395 浏览0 收藏

当我们写了个NodeJS程序的时候,一般用node yourjsfile.js命令启动该程序。但是如果程序中有东西出错,这个进程就会退出。我们写程序不可能保证万无一失,肯定有些没有处理的错误,这就让很多人觉得NodeJS不稳定,容易产生很多故障。 下面我就讲讲几种方法增加你的NodeJS程序的稳定性。 1.使用 try{...} catch(error){...} 来执行容易出错的代码段。比如解析一个外来的json字符串等。 2.使用 process.on('uncaughtException', function(err){...}); 来处理未被捕捉的错误。 3.试用奶妈进程来启动你的程序,检测子进程的退出,然后自动重启该进程。比如 mother.js : start(); function start() { console.log('Mother process is running.'); var ls = require('child_process').spawn('node', ['server.js']); ls.stdout.on('data', function (data) { console.log(data.toString()); }); ls.stderr.on('data', function (data) { console.log(data.toString()); }); ls.on('exit', function (code) { console.log('child process exited with code ' + code); delete(ls); setTimeout(start,5000); }); } 4.使用 nohup 让nodejs进程在后台运行。 比如运行"nohup node yourjsfile.js > /dev/null &"   欢迎大家补充。

查看回复

回复 (9)

A
anonymous#1·15 年前

可以试试monit,比forever,supervisor之类的更强大一些,而且是在进程外部监控的,更简单可依赖

A
anonymous#2·15 年前
A
anonymous#3·15 年前

[...] 转自:http://cnodejs.org/blog/?p=1014 [...]

A
anonymous#4·15 年前

通过mutil-node多启动几个也可以增加稳定性

A
anonymous#5·15 年前

完全可以使用cluster或者forever之类的工具来启动并保持server进程哪

A
anonymous#6·15 年前

记得要nohup

A
anonymous#7·15 年前

最近正被nodejs稳定性困扰,前两个办法似乎都不能解决我的问题。 由于nodejs中很多处理都是异步的,try...catch对于callback中的error无能为力。 第2个办法我已经用了,但程序依然会毫无征兆地退出,uncaughtException的callback没有执行。 启动参数加了--trace_exception也不管用,不知道还有没有其它方法?

A
anonymous#8·15 年前

谢谢回答。 uncaughtException主要是用来debug,以便有机会找到异常原因并修复。 其实我想问nodejs(或v8)有哪些debug/profiling方法,我的一个程序每运行N天左右异常退出,且没有stack trace,普通的单步调试方法基本上找不到错误原因。想解决这样的问题。 后来发现有一个v8启动参数: node --stack_trace_on_abort 但得到的错误信息非常少,需要进行更多的profiling才能找到错误根源。

P
pengchun#9·15 年前
引用 anonymous最近正被nodejs稳定性困扰,前两个办法似乎都不能解决我的问题。 <br/ 由于nodejs中很多处理都是异步的,try...catch对于callback中的error无能为力。 <br/...

uncaughtException是个不得已的方法,不建议太依赖它,该容错的地方还得老老实实try ... catch。 callback里异常的捕获确实麻烦,因为try ... catch 只能抓到同一个ticket中的异常,而callback属于不同的ticket。这种情况只能在callback函数内部try...catch

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