windows 服务器上有几个使用 puppeteer 的 nodejs 项目,使用 pm2 管理,经常性出现以下现象:
pm2 ls
列出进程 1 、2 。pm2 log [appName]
, 会出现 0 、1 、2 三个进程在同时执行。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"
}
]
}
1
mzDV4TUeHyesLbUQ 2022-11-19 11:22:37 +08:00
我在执行`pm2 reload`的时候遇到过很多次,遇到之后只能打开控制台杀掉所有的 node 进程,然后重新启动。
为了避免这个问题,我在重启服务时会先执行几次`pm2 stop ...`,然后执行`pm2 start ...`。 我也想知道问题在哪儿,同问。 |
2
ericgui 2022-11-19 14:29:57 +08:00 via Android
这也是我不用 pm2 的原因
|
3
julyclyde 2022-11-20 10:22:44 +08:00
被它管理的程序,如果是多层进程结构的话,当你 kill/stop 的时候,它可能只会向“直属”进程发送信号,而不会对更深层的发送
然后这个直属的就被干掉了,更深层的没人管了 所以提倡使用 systemd 或者容器,可以在 cgroup 的角度得知“到底有哪些”,方便事后清场 |