2018年的文章移至github上,点我去!2018年的文章移至github上,点我去!2018年的文章移至github上,点我去!

Fork me on GitHub

NodeJs之进程守护

进程守护


由于nodejs的单线程的脆弱性,一旦遇到运行错误便会严重到退出node进程导致系统或应用瘫痪,所以pm2,forever出现了,帮助我们实现进程的重启,这只是他们的特性之一。

实例演示进程退出


遇到错误,进程退出。

var http = require('http');

var server = http.createServer((req, res) => {
    if(req.url === '/zqz'){
        throw 'req Error';
    }
    res.end('Hello world!');
}).listen('80', 'localhost', () => {
    console.log('Server running...');
});

我们请求localhost:80

 $  node app.js
Server running...

使用curl来请求:

 $  curl localhost:80
Hello world!

请求没有问题。这时候我们在请求localhost:80/zqz

 $  curl localhost:80/zqz
curl: (56) Recv failure: Connection reset by peer

妥妥的进程报错:

C:\Users\Administrator\Desktop\pm2\app.js:5
        throw 'req Error';
        ^
 req Error

使用pm2守护


我们使用pm2来守护app.js。
使用pm2 start app.js命令运行:

 $  pm2 start app.js
[PM2] Starting C:\Users\Administrator\Desktop\pm2\app.js in fork_mode (1 instance)
[PM2] Done.
┌──────────┬────┬──────┬──────┬────────┬─────────┬────────┬─────┬───────────┬──────────┐
│ App name │ id │ mode │ pid  │ status │ restart │ uptime │ cpu │ mem       │ watching │
├──────────┼────┼──────┼──────┼────────┼─────────┼────────┼─────┼───────────┼──────────┤
│ app      │ 0  │ fork │ 3968 │ online │ 0       │ 0s     │ 6%  │ 15.4 MB   │ disabled │
└──────────┴────┴──────┴──────┴────────┴─────────┴────────┴─────┴───────────┴──────────┘
 Use `pm2 show <id|name>` to get more details about an app

再次请求localhost:80/zqz

 $  curl localhost:80/zqz
curl: (56) Recv failure: Connection reset by peer

没错照样是报错,但是看下面

 $  curl localhost:80
Hello world!

没错,虽然有个请求报错了,但是当我们再次请求对的url的时候,依旧可以获取到数据。
这就是守护,一旦失败立即重启。

查看logs


上面的操作虽然重启了进程,但是我们看不到一些变化的东西终归是不放心。

所以这里我们来查看一下log。看下是不是跟我们想的一样。

pm2 logs app
0|app      | Server running...

[STREAMING] Now streaming realtime logs for [app] process
0|app      | req Error
0|app      | Server running...

第一个是我们第一次启动的时候的输出。

第二个是我们请求错误链接的时候的输出。

第三个是pm2自动启动进程的输出。

这下是不是放心了?哈哈!

posted on 2017-01-11 15:05  qize  阅读(4814)  评论(2编辑  收藏  举报

导航