V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
season8
V2EX  ›  程序员

pm2 出现幽灵进程

  •  
  •   season8 · 2022-11-18 17:52:08 +08:00 · 1606 次点击
    这是一个创建于 734 天前的主题,其中的信息可能已经有所发展或是发生改变。

    windows 服务器上有几个使用 puppeteer 的 nodejs 项目,使用 pm2 管理,经常性出现以下现象:

    1. 使用 pm2 ls 列出进程 1 、2 。
    2. 使用 pm2 log [appName], 会出现 0 、1 、2 三个进程在同时执行。
    3. 使用 pm2 kill 0 则会报错:找不到进程。

    每次想办法干掉多出的这个“幽灵进程”,过段时间又出现了,猜测是 pm2 定时重启的时候没有杀掉进程。

    翻了下 pm2 的 issue ,发现用这个指令可以直接清理掉“幽灵进程”:

    pm2 update

    但我没有找到如何避免的办法,大家有碰到这个问题吗?怎么解决的?

    对了,pm2 版本是 5.2.0 ,nodejs 版本是 12.16.2


    附 app 配置:

    {
        "apps": [
            {
                "name": "xxx",
                "cwd": "",
                "script": "app.js",
                "instances": "2",
                "exec_mode": "cluster",
                "autorestart": true,
                "watch": false,
                "max_memory_restart": "200M",
                "cron_restart":"0 4/6 * * *",
                "env": {
                    "NODE_ENV": "prod"
                },
                "time":true,
                "log_date_format": "YYYY-MM-DD_HH:mm Z"
            }
        ]
    }
    
    3 条回复    2022-11-20 10:22:44 +08:00
    mzDV4TUeHyesLbUQ
        1
    mzDV4TUeHyesLbUQ  
       2022-11-19 11:22:37 +08:00
    我在执行`pm2 reload`的时候遇到过很多次,遇到之后只能打开控制台杀掉所有的 node 进程,然后重新启动。
    为了避免这个问题,我在重启服务时会先执行几次`pm2 stop ...`,然后执行`pm2 start ...`。
    我也想知道问题在哪儿,同问。
    ericgui
        2
    ericgui  
       2022-11-19 14:29:57 +08:00 via Android
    这也是我不用 pm2 的原因
    julyclyde
        3
    julyclyde  
       2022-11-20 10:22:44 +08:00
    被它管理的程序,如果是多层进程结构的话,当你 kill/stop 的时候,它可能只会向“直属”进程发送信号,而不会对更深层的发送

    然后这个直属的就被干掉了,更深层的没人管了

    所以提倡使用 systemd 或者容器,可以在 cgroup 的角度得知“到底有哪些”,方便事后清场
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5796 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 02:18 · PVG 10:18 · LAX 18:18 · JFK 21:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.