zoukankan      html  css  js  c++  java
  • 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:UsersAdministratorDesktoppm2app.js:5
            throw 'req Error';
            ^
     req Error
    

    使用pm2守护


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

     $  pm2 start app.js
    [PM2] Starting C:UsersAdministratorDesktoppm2app.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自动启动进程的输出。

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

  • 相关阅读:
    php数据过滤函数与方法示例【转载】
    MySQL 数据类型 详解 (转载)
    【总结整理】产品经理-电台
    【总结整理】职业选择
    【总结整理】什么样的产品是好产品
    【总结整理】微信产品-张小龙-PM学习总结
    Arcgis engine编程报错查询(转)
    ArcEngine开发遇到的问题(转)
    【总结整理】OpenLayers项目分析,OpenLayers中的图层,GeoServer发布wms服务--实验(转)
    带你剖析WebGis的世界奥秘----Geojson数据加载(高级)(转)
  • 原文地址:https://www.cnblogs.com/zqzjs/p/6211306.html
Copyright © 2011-2022 走看看