僵尸进程或类似的东西?

Zombie processes or something similar?

我有一个凤凰应用程序。有时我会遇到这样的情况:

$ ps aux
===>

user1    67297   0.0  0.2  13240  1860  -  S    Thu07       0:03.00 /usr/home/user1/my_projects/project1/erts-10.3.5.19/bin/epmd -daemon

那我想办法阻止它

$ MIX_ENV=prod ./bin/project1 stop
--rpc-eval : RPC failed with reason :nodedown

为什么首先说它宕机了?

尽管如此,它仍然会保持:

$ ps aux
===>

user1    67297   0.0  0.2  13240  1860  -  S    Thu07       0:03.00 /usr/home/user1/my_projects/project1/erts-10.3.5.19/bin/epmd -daemon

怎么了?

P.S。通常,有 3 个左右的进程与一个项目有关,尽管在我的问题中只有 1 个。在这种情况下,我已经通过“kill”手动杀死了其中的 2 个。但是,这并没有解决这个问题。

Erlang Port Mapper Daemon,Erlang/Elixir程序在与其他节点建立连接时使用的小型名称服务器。

The daemon is started automatically by command erl(1) if the node is to be distributed and no running instance is present.

因此当您启动 Phoenix 应用程序时它会自动启动。

不需要杀死那个进程,你可以保留它运行。

如果您运行这是一个版本,可能是因为版本 cookie 不是静态的并且在新部署后它发生了变化,或者版本名称配置不正确。

在生产环境中,我建议设置 RELEASE_COOKIE 环境变量。至于发布名称,您可以通过 ps auxwww 检查启动参数来确保将其设置为有意义的内容。 beam.smp 进程应该设置 SNAMENAME

简而言之,如果您配置了静态发布 cookie 和静态 sname 或名称,那么 rpc/epmd 调用应该能够找到您的 运行 节点。