我目前正在运行一个通过Nifs运行C代码的Erlang应用程序。但是,如果C代码中发生分段错误,整个节点都会关闭,以及运行Erlang应用程序的Erlang虚拟机。
如果虚拟机死机,监控Erlang应用程序并重新启动它的最佳方法是什么?
答案 0 :(得分:3)
您想查看Heart。
此外,如果您有被认为危险的NIF调用,建议将它们与在单独节点上靠近它们的Erlang代码隔离在一起。有几种方法可以监视和重新启动节点(例如Slave)。
一般情况下,我建议不要使用有问题的NIF,具体取决于你使用它们的是什么,有更稳定的替代品。
NIF的原因 - >替换
顺序速度 - >更优化的Erlang代码。通常,NIF的高顺序速度是以他们搞乱Erlangs调度程序为代价的,而这通常会导致实际上更差的性能。
与外部libs / apps连接 - > Erlangs端口在故障隔离方面要好得多
答案 1 :(得分:2)
我使用了名为supervisord的东西。一些优于心脏的优点:
答案 2 :(得分:0)
如果你想用Erlang方式做,你可以选择上面提到的任何解决方案(heart,supervisord)。如果你想以Unix的方式做,首先你应该让你的Erlang应用程序像Unix守护进程一样。
使用erld。接下来你可以做一个熟悉的事情:监视/重启熟悉的Unix守护进程。