当我们写了个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)
可以试试monit,比forever,supervisor之类的更强大一些,而且是在进程外部监控的,更简单可依赖
可以试下这个forever 模块,https://github.com/nodejitsu/forever ,这里有篇介绍文档http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever。
[...] 转自:http://cnodejs.org/blog/?p=1014 [...]
通过mutil-node多启动几个也可以增加稳定性
完全可以使用cluster或者forever之类的工具来启动并保持server进程哪
记得要nohup
最近正被nodejs稳定性困扰,前两个办法似乎都不能解决我的问题。 由于nodejs中很多处理都是异步的,try...catch对于callback中的error无能为力。 第2个办法我已经用了,但程序依然会毫无征兆地退出,uncaughtException的callback没有执行。 启动参数加了--trace_exception也不管用,不知道还有没有其它方法?
谢谢回答。 uncaughtException主要是用来debug,以便有机会找到异常原因并修复。 其实我想问nodejs(或v8)有哪些debug/profiling方法,我的一个程序每运行N天左右异常退出,且没有stack trace,普通的单步调试方法基本上找不到错误原因。想解决这样的问题。 后来发现有一个v8启动参数: node --stack_trace_on_abort 但得到的错误信息非常少,需要进行更多的profiling才能找到错误根源。
uncaughtException是个不得已的方法,不建议太依赖它,该容错的地方还得老老实实try ... catch。 callback里异常的捕获确实麻烦,因为try ... catch 只能抓到同一个ticket中的异常,而callback属于不同的ticket。这种情况只能在callback函数内部try...catch