Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Erlang如何处理内存不足的问题?_Erlang_Out Of Memory_Fault Tolerance - Fatal编程技术网

Erlang如何处理内存不足的问题?

Erlang如何处理内存不足的问题?,erlang,out-of-memory,fault-tolerance,Erlang,Out Of Memory,Fault Tolerance,根据Erlang的“让它崩溃”理念,如果一个进程无法分配继续其操作所需的内存,那么可以预期整个VM不会崩溃;事实上,如果系统有一种启发式方法来终止某个进程以释放一些内存,那么另一个进程将处理这个问题并进行恢复。根管理者可能不太可能被启发式杀死 这与大多数现代流行语言形成了直接对比,它们要么消亡,要么让操作系统选择做什么 在Erlang中,内存不足实际上是如何处理的?当Erlang VM在内存不足的情况下运行时,它只会使整个VM崩溃。原因是这是最简单和安全的事情 如果你想要一个容错系统,你必须已经

根据Erlang的“让它崩溃”理念,如果一个进程无法分配继续其操作所需的内存,那么可以预期整个VM不会崩溃;事实上,如果系统有一种启发式方法来终止某个进程以释放一些内存,那么另一个进程将处理这个问题并进行恢复。根管理者可能不太可能被启发式杀死

这与大多数现代流行语言形成了直接对比,它们要么消亡,要么让操作系统选择做什么


在Erlang中,内存不足实际上是如何处理的?

当Erlang VM在内存不足的情况下运行时,它只会使整个VM崩溃。原因是这是最简单和安全的事情

如果你想要一个容错系统,你必须已经有多台计算机。你不能用一台计算机(精确地说是自主计算单元)来制造一个容错系统。因此,如果应用程序在内存不足的情况下运行,最简单的方法就是让整个VM崩溃。无论如何,你的系统中有一个bug

处理所有边缘情况——内存不足的情况可以处理,而内存不足的情况不能处理——过于复杂且容易出错。杀死有问题的进程并不是解决办法。首先,很难决定哪一个过程是令人不快的。杀死一些“随机”(启发式决定)的过程既不是解决方案,因为这个被启发式杀死的过程可能是负责意外恢复的过程。杀死整个VM不仅是解决内存不足问题的最简单方法,也是唯一合理的方法


在需要可靠系统的情况下,大多数现代流行语言或操作系统的实现方式肯定是错误的。对于桌面或不太严格的要求,它是可以接受的,但对于Erlang设计的系统,它是绝对不能接受的。

另请参见:如果两台计算机上的两个VM都由于冗余应用程序而耗尽内存,该怎么办?Muzaaya,您所说的“冗余应用程序”是什么意思?@muzaayaoshua:它认为你把高可靠性和高可用性搞砸了。这两者都是容错解决方案。高可用的必须不间断地工作。高可靠性设备必须正常工作,即无故障,但可能意外停止。冗余应用程序用于制作高可靠性应用程序。高可用性用于从备份中生成。这意味着有一个准备好的“冗余”应用程序,它不运行该应用程序,只更新其状态。备份应用程序不应像主应用程序一样运行在oom情况下。不管怎样,崩溃在这两种情况下都是正确的。你可以用一台机器制造一个容错系统,你容忍的错误是你使用的其他人代码中的错误。事实上,如果Linux在这个意义上不是容错的,它将永远不会工作。因此,如果我的进程在一段时间内向用户发送一些数据样本(例如完成一个工作单元所需的时间)时出现错误并分配了太多内存,那么我的整个系统应该被视为崩溃了吗?我不认为这样的过程对我的系统至关重要,所以我不想依赖它的正确性。在Erlang中,OOM实际上是如何处理的?这将是一个有限的容错能力,就像一台机器和系统一样。要实现真正的容错,您确实需要多台机器。