nvm install node没反应_Node —— 进程守护

7b29a0979999d625a77a91d410803fe3.png
注: 个人浅见,辩证阅读,如有错误,欢迎指正。

守护进程(daemon)

一个在后台运行并且不受任何终端控制的进程。通常在系统引导装入时启动,在系统关闭时才终止。

Node 后台运行

想要创建一个守护进程,首先我们需要让这个进程具备后台运行的能力,这里使用 nohup 来创建一个后台运行的进程。

nohup node XXXX.js &

守护进程一般的职责

守护进程我个人看来,一般不会执行具体逻辑处理,它主要负责子进程的监控调度工作。

全局错误捕捉和上报

process.on('uncaughtException', (err) => {
    // 上报日志等操作
    console.error(err);

    // 关闭服务
    process.exit(1);
})

内存泄漏监控

setInterval(() => {
    if (process.memoryUsage().res > 700 * 1024 * 1024) {
        // 上报内存溢出
        console.log('oom');
        process.exit(1);
    }
}, 5000);

子进程自动重启

// 有子进程退出时的钩子 
cluster.on('exit', () => {
    setTimeout(() => {
        cluster.fork();
    }, 5000);
})

子进程心跳检查是否处于假死状态

父进程

const worker = cluster.fork();
const pid = worker.process.pid;

const TIME_INTERVAL = 10 * 1000; // 10s 时间间隔
const MAX_MISSED = 3; // 允许的最大丢失数量
let missed = 0; // 丢失 pong 的次数

let timer = setInterval(() => {
    if (missed >= MAX_MISSED) {
        clearInterval(timer);
        console.log(`${pid} has become a zombie process`);
        process.kill(pid);
        return;
    }
    missed += 1;

    // 发送 ping 通信
    worker.send(`ping#${pid}`);
}, TIME_INTERVAL);

// 接收 pong 通信
worker.on('message', (msg) => {
    if (msg === `pong#${pid}`) {
        missed -= 1;
    }
})

子进程

const pid = process.pid;

process.on('message', (msg) => {
    if (msg === `ping#${pid}`) {
        process.send(`pong#${pid}`);
    }
})

框架工具

  • pm2
  • forever
  • nodemon
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值