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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM