11

Erlangの「クラッシュさせる」という哲学では、プロセスが操作を続行するために必要なメモリを割り当てることができない場合でも、VM全体がクラッシュしないことが期待されます。実際、システムにいくつかのプロセスを強制終了してメモリを解放するヒューリスティックがある場合、他のプロセスがこれを処理して回復します。ルートスーパーバイザーは、ヒューリスティックによって殺される可能性はおそらく低いでしょう。

これは、死ぬか、OSに何をするかを選択させるほとんどの現代の人気のある言語とは正反対です。

Erlangで実際にメモリ不足はどのように処理されますか?

4

1 に答える 1

12

Erlang VM がメモリ不足の状況で実行されると、単純に VM 全体がクラッシュします。その理由は、それが最も簡単で安全なことだからです。

フォールト トレラント システムが必要な場合は、既に複数のコンピューターが必要です。1 台のコンピューター (正確には自律計算ユニット) だけでは、フォールト トレラントなシステムを構築することはできません。したがって、アプリケーションがメモリ不足の状況で実行されている場合、最も簡単な方法は VM 全体をクラッシュさせることです。とにかく、システムにバグがあります。

すべてのエッジ ケース (処理できるメモリ不足と処理できないメモリ不足) を処理することは、複雑すぎてエラーが発生しやすくなります。問題のあるプロセスを強制終了することは解決策ではありません。まず、どちらが問題のあるプロセスであるかを判断するのは困難です。「ランダムな」(ヒューリスティックに決定された) プロセスを強制終了することは解決策にはなりません。これは、ヒューリスティックによって強制終了されたこのプロセスが、偶然に回復の原因となるプロセスである可能性があるためです。VM 全体を強制終了することは、最も単純なだけでなく、メモリ不足の状況に対する唯一の合理的な解決策でもあります。

信頼性の高いシステムが必要な状況では、最新の一般的な言語や OS で行われている方法は間違いなく間違っています。デスクトップまたはそれほど厳密でない要件では許容できますが、Erlang が設計されたシステムでは絶対に許容できません。

于 2012-06-20T07:43:52.070 に答える