pm2 出现幽灵进程

2022-11-18 17:52:08 +08:00
 season8

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"
        }
    ]
}
1605 次点击
所在节点    程序员
3 条回复
mzDV4TUeHyesLbUQ
2022-11-19 11:22:37 +08:00
我在执行`pm2 reload`的时候遇到过很多次,遇到之后只能打开控制台杀掉所有的 node 进程,然后重新启动。
为了避免这个问题,我在重启服务时会先执行几次`pm2 stop ...`,然后执行`pm2 start ...`。
我也想知道问题在哪儿,同问。
ericgui
2022-11-19 14:29:57 +08:00
这也是我不用 pm2 的原因
julyclyde
2022-11-20 10:22:44 +08:00
被它管理的程序,如果是多层进程结构的话,当你 kill/stop 的时候,它可能只会向“直属”进程发送信号,而不会对更深层的发送

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

所以提倡使用 systemd 或者容器,可以在 cgroup 的角度得知“到底有哪些”,方便事后清场

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/896273

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX