Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 分段错误后重新启动Erlang节点_C_Erlang_Erlang Shell_Erlang Ports - Fatal编程技术网

C 分段错误后重新启动Erlang节点

C 分段错误后重新启动Erlang节点,c,erlang,erlang-shell,erlang-ports,C,Erlang,Erlang Shell,Erlang Ports,我目前正在运行一个Erlang应用程序,它通过Nifs运行C代码。但是,如果在C代码中发生分段错误,则整个节点以及运行Erlang应用程序的Erlang虚拟机都会停机 监视Erlang应用程序并在虚拟机死机时重新启动它的最佳方法是什么?您想看看 此外,如果您有被视为危险的NIF调用,建议将它们与靠近它们的Erlang代码一起隔离在单独的节点上。有几种方法可以监视和重新启动节点(例如) 但是,一般来说,我建议不要使用有问题的NIF,这取决于您使用的NIF有更稳定的替代品 更换的原因 顺序速度->更

我目前正在运行一个Erlang应用程序,它通过Nifs运行C代码。但是,如果在C代码中发生分段错误,则整个节点以及运行Erlang应用程序的Erlang虚拟机都会停机


监视Erlang应用程序并在虚拟机死机时重新启动它的最佳方法是什么?

您想看看

此外,如果您有被视为危险的NIF调用,建议将它们与靠近它们的Erlang代码一起隔离在单独的节点上。有几种方法可以监视和重新启动节点(例如)

但是,一般来说,我建议不要使用有问题的NIF,这取决于您使用的NIF有更稳定的替代品

更换的原因

顺序速度->更好的优化Erlang代码。通常,NIF的高顺序速度是以它们干扰Erlangs调度器为代价的,这通常会导致实际性能下降


与外部libs/apps->Erlangs端口的接口在故障隔离方面要好得多

我使用了一种叫做。与心脏相比的一些优势:

  • 它不是特定于erlang的,因此如果同一个框中有其他内容,可以使用它重新启动
  • 心脏可以有一些防止崩溃的转储
  • 如果您确实想出于某种原因停止erlang进程,supervisord会使这变得更容易
  • 如果SEG故障发生在启动时。经过一定次数的尝试后,Supervisord将停止尝试重新启动

  • 如果你想用Erlang的方式,你可以使用上面提到的任何解决方案(heart,supervisord)。如果您想以Unix的方式进行操作,首先应该使您的Erlang应用程序表现为Unix守护进程


    用这个。接下来,您可以做一件熟悉的事情:监视/重新启动熟悉的Unix守护程序。

    此外,
    heart
    实际上无法正确启动我的节点,使用最初启动它时使用的相同命令行。不知道为什么,我没有时间去追查。