【问题标题】:Is there a way to kill the erlang vm when it is running with -heart?当 erlang vm 与 -heart 一起运行时,有没有办法杀死它?
【发布时间】:2018-07-05 12:40:16
【问题描述】:

标题几乎概括了它。我有一个使用 -heart 运行的 zotonic 站点,它使用大量 cpu 时间,而且我无法获得 erlang shell。那么,有没有办法杀死虚拟机? killall heartkillall beam.smp 不起作用。

我发现了这个问题: Stop Erlang Daemon ,但它并没有真正回答我的问题。

【问题讨论】:

  • 根据我的经验,首先杀死 heart 然后杀死 beam 或 beam.smp 就可以了。
  • @Steve 我确实尝试过,但没有成功。此后我发现了无法获取shell的问题,即:groups.google.com/group/zotonic-users/browse_thread/thread/…。所以我通过解决似乎的根本问题解决了这个问题:)。尽管如此,我认为应该更好地记录如何做到这一点(在某个地方)。
  • 在一个命令行中先杀死心,然后再发出光束。总是为我工作。我们(Zotonic 团队)正在寻找非心脏解决方案。
  • 对于任何偶然发现这一点的人:我更喜欢supervisord - 它的行为更容易定制,并且适用于非erlang事物,这意味着当你了解它的细微差别时,这些学习更适用。

标签: erlang heartbeat zotonic


【解决方案1】:

只需使用:

init:stop().

它将杀死心脏进程和所有应用程序。

【讨论】:

  • 但他说他无法获得 Erlang shell,因为该进程使用了​​太多 CPU,所以我认为这在这种特殊情况下没有帮助。
  • 当我从remsh 尝试这个时,heart 并没有死,它重新启动了remsh 节点和原始节点。
【解决方案2】:

我遇到了同样的问题.... 而且真的很难杀死它。 我尝试了正常的路径,但无法做到。 所以我做了这个破解:

首先让我们获取 PID

sudo netstat -tulpn |grep 8080
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      931/beam.smp    

所以 PID 是 931。

接下来是哪个程序创建了该进程?

lsof -p 931 | grep txt
lsof: WARNING: can't stat() fuse.gvfs-fuse-daemon file system /home/agarcia/.gvfs
      Output information may be incomplete.
beam.smp 931 yaws  txt    REG     8,1  2053256 22793377 /usr/lib/erlang/erts-5.8.5/bin/beam.smp

所以程序是.../bin/beam.smp 所以只是移动它

mv beam.smp old_beam.smp 

现在你杀了它

kill -9 931

我终于能够杀死它:-)

这是对 erlangs 可靠性的证明,实际上需要破解它才能取消服务。

ps:我最初尝试了 yaws -I [pid] --stop 但也没有用。

【讨论】:

    【解决方案3】:

    如果您不介意杀死您机器上的所有虚拟机:

    ps aux | grep -e heart -e epmd | grep -v grep | tr -s ' ' | cut -d ' ' -f 2 | xargs kill -9
    

    VM 和heart 似乎相互监控。如果 VM 处于崩溃/恢复循环中,您可能需要快速运行此命令多次以杀死所有死机。

    【讨论】:

      猜你喜欢
      • 2011-11-29
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 2021-11-04
      • 2022-01-03
      • 2016-04-27
      • 1970-01-01
      相关资源
      最近更新 更多