【问题标题】:PM2 is running extra processesPM2 正在运行额外的进程
【发布时间】:2023-07-19 09:51:01
【问题描述】:

我们已经构建了一个 iOS 应用程序,该应用程序使用用 Node 编写的 RESTful Web API,该 API 托管在 Google Compute Engine 和我们在 Mongo DB 中使用的数据库。我们还将 Nginx 配置为 Web 服务器,将请求路由到 Node js 服务。

现在在 Google Compute Engine 上,Node js 在负载均衡器后面运行,并启用了自动缩放功能。 iOS 应用用户以及位于 Google Compute Engine 上另一个实例上的后台作业都使用 Web 服务。

我们已经使用 PM2 启动了 Node js 服务,核心数设置为 8,因为我们在 Google Compute Engine 上有 8 台核心机器。

现在的问题是,当我启动 PM2 时,它运行 8 个进程,但在一段时间内,它有时会显示超过 8 个进程在运行,当我尝试使用命令“sudo pm2 kill”杀死 PM2 时,它会杀死所有 8 个进程它是在 Node js 服务启动期间启动的,但是当我使用命令 'sudo lsof -i -P | 检查正在运行的进程时仍然如此。 grep -i 'listen' 我看到一些进程仍在运行,并且已经占用了 Node js 服务正在运行的端口。因此,在我可以重新启动我的 Node js 服务之前,我需要杀死那些额外的 PM2 进程,然后我才能再次重新启动 PM2。

下面是我的 Nginx 配置

upstream node {
    server 127.0.0.1:5001;
}

server {
    listen 80;
    server_name api.dev.yellfy.com;
    location / {
        #proxy_pass http://127.0.0.1:5001;
        proxy_pass http://node;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        client_max_body_size 300M;
        proxy_read_timeout 600s;
        proxy_connect_timeout 600s;
    }
}

请帮助我理解 PM2 运行额外进程背后的原因。

以下是我正在使用的技术堆栈供参考

技术栈

节点 js - 5.5.0
PM2 - 1.0.0
Mongo DB - 3.0.4
Nginx - 1.6.3
CentOS Linux 发布 7.2.1511 (Core)

【问题讨论】:

  • 我在使用集群时遇到了与 pm2 类似的问题,尝试通过找到它的 pid 来杀死 PM2 进程 ps -aux | grep PM2 它应该杀死所有进程
  • 我不熟悉pm2 kill选项(the docs中没有提到),但也许kill相当于UNIX的kill -9命令,有效地杀死进程本身,也许不是它的产卵。如果您使用pm2 stop all 命令,您是否观察到相同的行为? (或restartdelete,无论您打算实现什么选项)?就个人而言,除了维护 pm2 本身(对我来说只是全局安装)之外,我还没有找到添加 sudo 的理由
  • 你可以尝试更新 pm2 吗?这感觉像是最近修复的错误(我无法解决这个问题)。
  • 当我启动 PM2 时,它运行 8 个进程,但在一段时间内它显示有时运行超过 8 个进程

标签: node.js nginx pm2


【解决方案1】:

您是否尝试过使用 pm2 来停止进程。

pm2 start app.js

然后停止

pm2 stop app.js

当您通过 kill 停止 pm2 时,您不允许 pm2 正常关闭。如果您的服务器重新启动,我认为您的进程将重新启动。

http://pm2.keymetrics.io/docs/usage/process-management/

【讨论】:

    最近更新 更多