服务器实例之间的NodeJS process.pid相同

时间:2019-01-17 22:54:20

标签: node.js amazon-web-services docker server pid

对于某些我正在使用的服务器代码,我正在创建消息队列并需要唯一的名称。名称是使用许多环境项构建的,最后一项是process.pid。我们所有的服务器代码都包装在一个Docker容器中,并且该容器在各个区域的各个服务器实例上运行。在查看日志语句时,我们注意到在每个部署区域的服务器的两个实例上,pid值都相同。 我意识到Docker映像是彼此的克隆,而我的DevOps家伙说那么它们应该是相同的,但是由于我们的pid数在65xx范围内,所以我很难相信我们的应用进程实例最终以相同的数字。 另一个奇怪的是,pid值仅在给定的AWS区域之间共享。因此,我们的东西方实例共享一个pid,我们的东西方实例共享另一个pid。这两个数字接近,也许像6529和6631。 我想我的问题是,pid是如何生成的,因为我认为将其创建的方式一定是错误的。

1 个答案:

答案 0 :(得分:0)

每个容器在其自己的处理空间中运行。容器的主进程(如果已声明,则为ENTRYPOINT,否则为CMD)始终具有进程ID 1(具有相应的权利和责任)。

在非常典型的情况下,如果您有一个Node容器,其Dockerfile以诸如CMD ["npm", "start"]结尾,那么我希望报告的pid总是非常小的数字,如1或2。专用的init流程,多流程管理器或复杂的入口点设置,我认为它会更高;但是您通常应该期望进程ID空间以1开头,并且容器启动将使用一致数量的pid完成一组一致的事情,并且您不应该惊讶于服务器进程具有非常一致的进程ID。

(在运行的任何容器上尝试docker exec ... ps -e;在每个容器上可能会看到个位数的进程ID。)