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

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

  • 相关阅读:
    MQ消息队列(2)—— Java消息服务接口(JMS)
    MQ消息队列(1)—— 概念和使用场景
    SpringBoot — HelloWorld开发部署
    redis的配置文件介绍
    Redis info 参数详解
    10 分钟彻底理解 Redis 的持久化和主从复制
    Docker Yearning + Inception SQL审核平台搭建
    Inception SQL审核注解
    运行python脚本后台执行
    解决yum [Errno 256] No more mirrors to try
  • 原文地址:https://www.cnblogs.com/zqzjs/p/6211306.html
Copyright © 2020-2023  润新知