2012-06-20 17 views
9

Erlangの "let it crash"という考え方では、プロセスが処理に必要なメモリを割り当てることができない場合、VM全体がクラッシュしないと考えています。実際には、システムがメモリを解放するためにプロセスを停止するヒューリスティックを持っていた場合、他のプロセスがこれを処理し回復します。ルート監督者はおそらくヒューリスティックによって殺されることはまずありません。Erlangでメモリ不足がどのように処理されていますか?

これはただ死ぬか、OSが何をすべきかを選択させる最も近代的な人気のある言語とは正反対です。

はどのようにErlangで取り扱うメモリ実際の不足していますか?

+0

も参照してください:なぜ大きなシーケンスでErlangがクラッシュするのですか?(http://stackoverflow.com/questions/192725/why-is-erlang-crashing-on-large-sequences) –

答えて

11

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

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

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

それは最も近代的な人気のある言語やOSに行われている方法は、あなたが信頼性の高いシステムを必要とする状況では間違いなく間違っています。デスクトップやそれほど厳格ではないが、Erlangが設計されているシステムでは絶対に受け入れられません。

+0

両方の両方のvms冗長アプリケーションのためにコンピュータのメモリが不足していますか? –

+0

Muzaaya、「冗長アプリケーション」とはどういう意味ですか? –

+0

@MuzaayaJoshua:高可用性で信頼性を台無しにしていると思います。それらは両方ともフォールトトレラントなソリューションです。高い利用可能なものはノンストップで働かなければならない。信頼性の高いものは、バグのない正常に動作する必要がありますが、誤って停止する可能性があります。冗長アプリケーションは、信頼性の高いアプリケーションを作成するために使用されます。高い利用可能なものは、バックアップから作成されるために使用されます。つまり、アプリケーションを実行しておらず、状態を更新するだけの「冗長」アプリケーションが準備されていることを意味します。バックアップアプリケーションは、主な状況として実行されるべきではありません。とにかく、どちらの状況でもクラッシュが正しいです。 –

関連する問題