NodeJs之进程守护

时间:2024-01-11 12:07:02

进程守护


由于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自动启动进程的输出。

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