7

私のOSはarch Linux 64ビットです。

free -m 以下の結果

             キャッシュされた使用済みの空き共有バッファの合計
メモリ: 32172 31909 262 0 119 13054
-/+ バッファ/キャッシュ: 18735 13436
スワップ: 258 258 0
ulimit -a
コア ファイル サイズ (ブロック、-c) 無制限
データ セグメント サイズ (キロバイト、-d) 無制限
スケジューリング優先度 (-e) 20
ファイルサイズ (ブロック、-f) 無制限
保留中のシグナル (-i) 257329
最大ロック メモリ (キロバイト、-l) 64
最大メモリ サイズ (キロバイト、-m) 無制限
ファイルを開く (-n) 1024
パイプサイズ (512 バイト、-p) 8
POSIX メッセージ キュー (バイト、-q) 819200
リアルタイム優先度 (-r) 0
スタックサイズ (キロバイト、-s) 8192
CPU 時間 (秒、-t) 無制限
最大ユーザー プロセス数 (-u) 257329
仮想メモリ (キロバイト、-v) 無制限
ファイルロック (-x) 無制限

kenerl オプションの overcommit_memroy は 0 です

しかし、malloc を使用して 2G バイトを割り当てようとすると、次の理由で失敗します: メモリを割り当てられませんか?

4

1 に答える 1

3

実際には何でもかまいません。空きメモリがすべて連続していたため、以前は機能していた可能性がありますが、現在は空きメモリが隣接していないか、メモリ要求が使用されているヒューリスティックに失敗した可能性があります。

オーバーコミットを知らせる方法の詳細については、こちらのリンク(http://linuxtoolkit.blogspot.com/2011/08/tweaking-linux-kernel-overcommit.html )を参照してください。

基本的に:

  • 0=システムはオーバーコミットが許可されるかどうかをヒューリスティックに決定します
  • 1 =常にオーバーコミットします(アドレス範囲外であっても、私に言わせればかなりばかげています)
  • 2=特定の制約を超えてオーバーコミットしない
于 2012-11-12T08:57:43.453 に答える