Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> 何のメモリ使用がメモリに存在しない場合には、Linuxカーネルのoom_killer(メモリキラーのうち)プログラムは、ほとんどのメモリを(もっとあってもよい)取る、そしてそれらを置くそれを再度スキャンしますoom

何のメモリ使用がメモリに存在しない場合には、Linuxカーネルのoom_killer(メモリキラーのうち)プログラムは、ほとんどのメモリを(もっとあってもよい)取る、そしてそれらを置くそれを再度スキャンしますoom

  

oom_killerのデフォルト設定が、使用することができますそれを終わらせなさい。 oom_killerに最もメモリの多いプロセスをスキャンアウトさせず、メモリに適用されるプロセスを解決するように選択することができます。sysctl -w vm.oom_kill_allocating_task = 1この設定では、oom_killerは消費しません。大容量メモリプログラムを殺すために最も多くのメモリを占有するプロセスを見つけるための時間は、存続するチャンスがあります。しかし、メモリがなくなった瞬間には、空のメモリを申請したり使用したりする人は誰でも悲劇的になるでしょう。そして、予測不可能性に満ちたいくつかのプロセスが一緒に殺されているかもしれません。多くのプログラムが結びついていて、バックグラウンドのmysqldも殺されるのは不便であり、そして最後にpdflushが点滅するのを防ぐ方法はありません。一言で言えば、oom_killerは非常に調整されていません、それを再生させないことが最善です。この時点で、openSolarisはより良い仕事をしているように見えます、外部から、メモリが足りないとき、システムはアクティブに実行中のプログラムを強制終了しませんが、新しいプログラムを実行することを拒否します。利用可能なメモリができるまで、メモリの申請は保留されます。オーバーコミットそれでは、システムが以前にメモリが不足していることを検出できない場合、mallocはNULLを返す可能性があります。現在のオペレーティングシステム
では、過度にメモリを申請することが許されていますが、実際にメモリを申請していない場合は、実際のメモリよりも多くの容量を申請することができます。 (x);このようなプログラムは長時間使用できます)、使用が開始されると(memsetでいっぱいになるなど)、実際のメモリ使用量にカウントされ、メモリが本当に足りない場合はoom_killerが再生されます。現在Linuxには、このメモリ戦略を調整するためのいくつかのオプションがあります。-)

デフォルトでは、vm.overcommit_memory = 0ですが、今度はより多くのメモリを適用できますが、それでも特定の時点でアプリケーションが失敗しました。

vm.overcommit_memory = 1の場合、すべてのmallocが無条件に非常に恐ろしい世界を成功させるでしょう。

最後のオプションはこれです:sysctl -w vm.overcommit_memory = 2現時点では、要求されたメモリの総量に厳密な制限があり、制限を超えるとmallocはNULLを返します。アプリケーションはこれを適切に処理できます。この場合、oom_killerは二度と出てこないでしょう、プログラムが正しくこの状況を処理できないならば、pdflushはシステムが応答しないハード・ディスク回転をさせません、それはすぐにハングアップして、きれいにそしてきれいになります。

ただし、これにはいくつかの欠点もありますが、現時点ではvm.overcommit_ratioパラメータも機能します。デフォルトは50で、実際の物理メモリの50%にしか割り当てることができません。交換エリアがない場合、overcommit_ratio設定は小さく、非常に悲劇的なものになり、ほとんど何もできません。それから100に設定し、物事は非常に調和している?それほど単純ではありませんが、ここでの制限は、メモリ用のアプリケーションの総数に対する制限であり、アプリケーションが実際に使用されていない場合は、その合計もカウントされます。この場合、実際のメモリは使い果たされず、プログラムはメモリを申請することができない可能性があり、そしていくらかのメモリは浪費される。 overcommit_ratioは100以上の数値に設定することができますが、設定するのが難しい問題です設定が大きければ制限はありませんメモリが使い果たされると、ハードディスクは狂ってしまい、システムはしばらくの間応答を失います。現場にあるかもしれない、設定が小さい、それは何百メガバイトのメモリが浪費されることが可能であるメモリ情報を見ることができることをチェックすることができる:

%cat /proc /meminfo

MemTotal:2064616 kB

MemFree:1556672 kB

…。

CommitLimit:2064616 kB

Committed_AS:769068 kB

….
<ここで、Committed_ASはプログラムによって要求されたメモリの合計であり、CommitLimitを超えることはできません。

明らかにCommitted_AS + MemFreeがMemTotalよりも大きいので、CommitLimitをCommitted_AS + MemFreeに設定するのが適切なようです。

Copyright © Windowsの知識 All Rights Reserved