2.6.31-302 x86-64カーネルでUbuntuを実行します。全体的な問題は、「キャッシュ」カテゴリにメモリがあり、それが上昇し続け、アプリケーションで必要な場合でも解放または使用されないことです。
だからここに私が「無料」コマンドから得たものがあります。一見したところ、これは普通のことではありません。
# free
total used free shared buffers cached
Mem: 7358492 5750320 1608172 0 7848 1443820
-/+ buffers/cache: 4298652 3059840
Swap: 0 0 0
誰かが最初に言うことは、「心配しないで、Linuxはそのメモリを自動的に管理する」ということです。はい、メモリマネージャがどのように機能するかを知っています。問題は、それが正しいことをしていないということです。ここで「キャッシュされた」1.4 GBは予約済みで使用できないようです。
Linuxに関する私の知識から、3 GBは「無料」であることがわかります。しかし、システムの動作はそうではないと言っています。使用量のピーク時に1.6 GBの実際の空きメモリが使い果たされると、より多くのメモリが要求されると(および最初の列の「空き」が0に近づくと)、OOMキラーが呼び出され、プロセスが強制終了され、問題が発生し始めますにもかかわらずで「無料」 - / +バッファ/キャッシュ行はまだ持っている約1.4 GB「無料」。
主要なプロセスのoom_adjの値を調整して、システムをひざまずかせないようにしましたが、それでも重要なプロセスは強制終了され、そのポイントには到達したくありません。特に、理論的には、ディスクキャッシュを削除するだけであれば1.4GBが「無料」のままです。
ここで何が起こっているのか誰にも分かりますか?インターネットには、Linuxの「無料」コマンドに関する愚かな質問と「なぜ空きメモリがないのか」が殺到しており、そのためこの問題については何も見つかりません。
私の頭に浮かぶ最初のことは、スワップがオフになっていることです。それについて固執するシステム管理者がいます。それらがバックアップされている場合、私は説明を受け入れます。これは問題を引き起こす可能性がありますか?
実行後は無料echo 3 > /proc/sys/vm/drop_caches
です:
# free
total used free shared buffers cached
Mem: 7358492 5731688 1626804 0 524 1406000
-/+ buffers/cache: 4325164 3033328
Swap: 0 0 0
ご覧のとおり、ごくわずかな量のキャッシュが実際に解放されますが、約1.4 GBが「スタック」しているように見えます。もう1つの問題は、この値が時間とともに上昇するように見えることです。別のサーバーでは2.0 GBがスタックしています。
私はこの記憶を本当に戻したい...どんな助けでも大歓迎だろう。
ここだcat /proc/meminfo
、それは何も価値があるとします。
# cat /proc/meminfo
MemTotal: 7358492 kB
MemFree: 1472180 kB
Buffers: 5328 kB
Cached: 1435456 kB
SwapCached: 0 kB
Active: 5524644 kB
Inactive: 41380 kB
Active(anon): 5492108 kB
Inactive(anon): 0 kB
Active(file): 32536 kB
Inactive(file): 41380 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 320 kB
Writeback: 0 kB
AnonPages: 4125252 kB
Mapped: 42536 kB
Slab: 29432 kB
SReclaimable: 13872 kB
SUnreclaim: 15560 kB
PageTables: 0 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 3679244 kB
Committed_AS: 7223012 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 7696 kB
VmallocChunk: 34359729675 kB
DirectMap4k: 7340032 kB
DirectMap2M: 0 kB