2011-10-28 1 views
2

非常によく似た質問が.net Windows環境のために頼まれた:Unix - 暴走的なメモリ消費からPCを守るのを自分で防ぎますか?

How do you protect yourself from runaway memory consumption bringing down the PC?

この質問は、CまたはC++を使用して、Unix環境のためにポーズをとっています。例として、以下の危険な小さなブロックを考えてみましょう。

#include <vector> 
int main() { 
    int n; 
    std::vector<double> A(n); 
} 

あなたが運が良ければ、コードは範囲エラーをスローします。あなたが不運な場合(私の場合、メモリ内の値は283740392でした)、コードは使用可能なすべてのRAMをすばやく使用し、ディスクへの大規模なスワッピングを引き起こし、OSを仮想停止にすばやく研磨して殺すことができます。プロセスはいつでも終了することができますが、他の実行中のプロセスをすべてメモリに戻す必要があるため、回復には数分かかることがあります。これはではありません。答えがRAMでないことを意味する質問があれば、使用可能なマシンを掃除する暴走プロセスを簡単に行うことができます。

+1

'ulimit -v 'を実行するとどうですか? –

答えて

5

コメントに示されているように、プログラムを開始する前にulimit -v <size>またはプログラム内でsetrlimitをプログラムで使用してください。 (ulimitのより)

1

Linuxには、'the OOM killer'と呼ばれるものがあります。メモリ使用量とCPU使用履歴に基づいてプロセスを強制終了します。

+1

あなたは本当に物事が悪くなってOOMの殺人犯が必要になることは望ましくありません。これは、システム管理者が適切な制限を設定するのを邪魔しなかったときの単なる後退です。 – ninjalj

0

Aおそらくより良いが、より複雑な答えは、任意の所与の割当て(100メガバイト程度)の最大サイズを制限するが、ない限界使用することが許可される合計メモリ行いカスタムアロケータであろう。

関連する問題