2016-03-31 64 views
1

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

现在Google计算引擎节点上的js在负载平衡器后面运行,并且自动缩放功能打开。 Web应用程序由iOS应用程序用户以及位于Google Compute Engine上的另一个实例上的后台作业使用。

因为我们在Google Compute Engine上有8台核心机器,所以我们已经开始使用PM2的内核数量设置为8的Node js服务。

现在的问题是,当我启动PM2时,它运行8个进程,但是在一段时间内它显示有超过8个进程正在运行,当我试图用命令'sudo pm2 kill'杀死PM2时,它杀死了所有8个进程在Node js服务启动期间启动的进程,但仍然检查使用命令'sudo lsof -i -P | grep -i'listen'我看到一些processessess仍在运行,并且已经占用了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
蒙戈DB - 3.0.4
Nginx的 - 1.6 .3
CentOS Linux release 7.2.1511(Core)

+1

我都面临着PM2类似的问题,试图通过寻找其PID ** PS -aux杀死PM2过程| grep PM2 **它应该终止所有进程 – AJS

+1

我不熟悉'pm2 kill'选项(在[docs](https://github.com/Unitech/pm2)中没有提及),但是也许'kill'就等同于UNIX的'kill -9'命令,它可以有效地杀死进程本身,也可能不是它的产物。如果您使用'pm2 stop all'命令,您是否观察到相同的行为? (或“重启”,“删除”,无论你打算实现的选择)?就我个人而言,我还没有找到一个理由,除了维持'pm2'本身(对我来说只是全局安装)而言,为其他任何内容添加'sudo' –

+1

您可以尝试更新pm2吗?这感觉就像是一个最近修复的bug(无法解决问题)。 – soyuka

回答

0

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

pm2 start app.js 

然后停止

pm2 stop app.js 

当你停止PM2通过杀死你是不是允许PM2正常关闭。如果您的服务器重新启动,我认为您的进程将重新启动使用群集时

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