Node出错导致运行崩溃的解决方案

  • 时间:
  • 浏览:1
  • 来源:爱乐彩网站_爱乐彩下载_爱乐彩官网

8

14

5

http.createServer(function(req, res) {

var handler = function (req, res) {

    try {

10

启动服务,并在地址栏测试一架构设计 现 http://127.0.0.1:10001000/  沒有所料,node崩溃了 

  catch(e) {

6

错误日志记录也非常简单,直接将此进程控制台当中的错误输出到error.log文件即可: 2>> $WEB_DIR/error.log  好多好多 行, 2 代表 Error。

console.log('Server running at http://127.0.0.1:10001000/');

6

3

process.on('uncaughtException'function (err) {

  try {

}).listen(10001000, '127.0.0.1');

亲们都要这么 一种映像,NodeJS比较快; 但会 是因为其是单进程,好多好多 它不稳定,很糙不安全,不适合出理 繁复业务; 它比较适合对并发要求比较高,但会 简单的业务场景。 

在Express的作者的TJ Holowaychuk的 告别Node.js一文中列举了以下罪状: Farewell NodeJS (TJ Holowaychuk) •   you may get duplicate callbacks •   you may not get a callback at all (lost in limbo) •   you may get out-of-band errors •   emitters may get multiple “error” events •   missing “error” events sends everything to hell •   often unsure what requires “error” handlers •   “error” handlers are very verbose •   callbacks suck 确实这哪几个主要吐嘈了两点: node.js错误出理 很扯蛋,node.js的回调也很扯蛋。 

17

9

2

15

好多好多 方案的好处是,还也能将错误和调用栈直接输出到当前发生的网页上。 

var http = require('http');

11

标准的HTTP响应出理 会经历一系列的Middleware(HttpModule),最终到达Handler,如下图所示:  这 些Middleware和Handler在NodeJS中都要另另一个 特点,亲们都要回调函数,而回调函数中是唯一会让Node在运行时崩溃的地方。根据好多好多 特点,亲们只都要在框架中集成一处try/catch就还也能相对完美地出理 异常疑问,但会 后要影响其它用户的请求request。 事实上现在的NodeJS WEB框架几乎都要这么做的,如 OurJS开源博客所基于的 WebSvr 都要这么一处异常出理 代码: 

  res.end('Hello ' + name);

13

  var name = req.params.name;

    catch(e) { }

使用也很简单 

使用node来守护得话资源开销是因为会很糙大,但会 也会略显繁复,OurJS直接在开机启动脚这么 进程进程守护。 如在debian放上置的 ourjs 开机启动文件: /etc/init.d/ourjs 好多好多 文件非常简单,不到启动的选项,守护的核心功能是由另另一个 无限循环 while true; 来实现的,为了出理 过于密集的错误阻装进程,每次错误后间隔1秒重启服务 

这大慨在node进程结构进行守护, 但好多好多 依据好多好多 人都要不提倡的,说明你还不到完整性掌控Node.JS的异常。 

    handler(req, res);

21

现 在是因为基本上出理 了Node.JS因异常而崩溃的疑问,不过任何平台都都要1000%可靠的,还有好多好多 错误是从Node底层抛出的,好多好多 异常 try/catch和uncaughtException都无法捕获。很久在运行ourjs的时侯,会偶尔碰到底层抛出的文件流读取异常,这却说另另一个 底层 libuv的BUG,node.js在0.10.21中进行了修复。 面对好多好多 清况 ,亲们就应该为nodejs应用添加守护进程,让NodeJS遭遇异常崩溃随还也能马上复活。 另外,还应该把哪哪几个产生的异常记录到日志中,并让异常永远不再发生。 

  res.writeHead(1000, {'Content-Type''text/plain'});

这么沒有回调中产生的错误该怎样办?并非担心,确实这么 的node进程根本就起不起来。 此外node自带的 cluster 都要一定的容错能力,它跟nginx的worker很同类 ,但消耗资源(内存)略大,编程也都要很方便,OurJS并这么采用此种设计。 

  console.log(err.stack);

7

});

1

亲们还也能uncaughtException来全局捕获未捕获的Error,同時 你还还也能将此函数的调用栈打印出来,捕获很久还也能有效出理 node进程退出,如: 

4

5

18

};

20

2

    console.log('\r\n', e, '\r\n', e.stack);

12

还还也能看日志 

22

16

      res.end(e.stack);

node-forever 提供了守护的功能和LOG日志记录功能。 安装非常容易 

事实上NodeJS里程确实有“脆弱”的一面,单进程的某处产生了“未出理 的”异常确实会是因为整个Node.JS的崩溃退出,来看个例子, 这里另另一个多 node-error.js的文件: 

19

亲们还还也能在回调前加try/catch,同样确保进程的安全。 

  console.log(err);

本文转自王磊的博客博客园博客,原文链接:http://www.cnblogs.com/vipstone/p/4866262.html,如需转载请自行联系原作者

4

  }

3

1

确实Node.JS发展到今天,是因为连好多好多 疑问都出理 不了,那估计早就这么用了。