NodeJs之進程守護

進程守護


因爲nodejs的單線程的脆弱性,一旦遇到運行錯誤便會嚴重到退出node進程致使系統或應用癱瘓,因此pm2,forever出現了,幫助咱們實現進程的重啓,這只是他們的特性之一。node

實例演示進程退出


遇到錯誤,進程退出。git

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:80github

$  node app.js
Server running...

使用curl來請求:bash

$  curl localhost:80
Hello world!

請求沒有問題。這時候咱們在請求localhost:80/zqzapp

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

妥妥的進程報錯:curl

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

使用pm2守護


咱們使用pm2來守護app.js。
使用pm2 start app.js命令運行:ui

$  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/zqzurl

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

沒錯照樣是報錯,可是看下面線程

$  curl localhost:80
Hello world!

沒錯,雖然有個請求報錯了,可是當咱們再次請求對的url的時候,依舊能夠獲取到數據。
這就是守護,一旦失敗當即重啓。rest

查看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自動啓動進程的輸出。

這下是否是放心了?哈哈!

相關文章
相關標籤/搜索