node.js - PM2 正在运行额外的进程

标签 node.js nginx pm2

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

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

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

现在的问题是,当我启动 PM2 时,它会运行 8 个进程,但在一段时间内,它有时会显示超过 8 个进程在运行,当我尝试使用命令“sudo pm2 Kill”杀死 PM2 时,它会杀死在 Node js 服务启动期间启动的所有 8 个进程,但当我使用命令“sudo lsof -i -P | 检查正在运行的进程”时,它仍然会杀死所有 8 个进程。 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 运行额外进程的原因可能是什么。

下面是我正在使用的技术堆栈供引用

技术栈

Node js - 5.5.0
PM2 - 1.0.0
蒙戈数据库 - 3.0.4
Nginx - 1.6.3
CentOS Linux 版本 7.2.1511(核心)

最佳答案

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

pm2 start app.js

然后停止

pm2 stop app.js

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

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

关于node.js - PM2 正在运行额外的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36331733/

相关文章:

node.js - 从 hapi-js 路由自动生成 swagger.yaml

IIS 等效于 "proxy_set_header X-Forwarded-Proto https;"

javascript - pm2应用程序无故随机重启

node.js - 哪种扩展 Nodejs 应用程序的方式更好?

pm2 - PM2 God Daemon 应该一直运行吗?

javascript - Express 中的服务器端验证与单页 Angular 应用程序兼容

node.js - 您如何获得在 https 中使用的 key 和证书对?

javascript - 调试 Express JS 应用程序 Visual Studio 代码 :

ssl - 使用 Phoenix/Elixir 和 nginx 在服务器上设置 https

html - 使用 Nginx 响应路由器 html5 Pushstae