回答:
メモリーのプレッシャーは、空きメモリーの割合の単純なゲージではなく、0〜100%のグラフのようです。のsysctl
値はvm.memory_pressure
、空きメモリページと非アクティブメモリページと有線ページとアクティブページの比率を追跡する計算されたターゲットに関連して計算されます。絶対カウンタはvm_stat
、仮想メモリの詳細な割り当てを検査するコマンドラインツールを使用して表示されます。Jonathan Levinは、macOSとiOSの両方の仮想メモリと、メモリのプレッシャーを計算する方法、およびプレッシャーインデックスが高い場合に実行されるアクションをカバーする優れたドキュメントをhttp://newosxbook.com/articles/MemoryPressure.htmlに持っています。
計算を提供する関連仮想メモリ(vm)vm.memory_pressure
は次のとおりです。
vm.page_free_count
-空きページの絶対数vm.vm_page_free_target
-「圧力のない」状況の計算された目標または目標vm.page_free_wanted
-vmシステムが現在計算されている圧力指数を緩和するために自由にしたいことそのため、アクティビティモニターでメモリのプレッシャーを追跡している場合(または、プログラムまたはコマンドラインシェルでsysctl値を確認している場合)、次の4つの値を確認することをお勧めします。
sysctl -a vm | egrep "page_free|pressure"
memory_pressure
Mavericksには新しいコマンドが導入されており、これを実行してメモリサブシステムを警告状態にすると、メモリの圧力が黄色の範囲に増加することがわかります。
このツールは、圧力グラフが着実に増加し、明らかに「警告」レベルがグラフ化されているこの状態に合わせて、約4 GBのメモリをツールに割り当てましたsudo memory_pressure -l warn
。ご覧のとおり、圧力が5.9 GBを使用する前と使用した後のシステムは最大7.99 GBを使用しましたが、スワッピングと圧縮のために追加する必要さえありません。
vm_stat 15
測定可能なページングがない警告結果がどのように表示されるかを見た後、ツール(Control-C)を終了し、ツールを再実行してメモリのプレッシャーをクリティカルにしました。sudo memory_pressure -l critical
ページングが開始されたので、これを数分以上実行せず、5 GBのRAMをディスクにページングするとツールが言った後、ドライブをいっぱいにしてツールを終了したくありませんでした。
警告が終了した後、システムがどのくらいの速さでRAMを解放したか、また仮想メモリシステムがディスクへのスワッピングを回避するのに十分なページを圧縮できなかったことを示す「赤」領域にランプアップした様子を観察できます。私の経験から推測した圧力は、スワッピングと劇的な過剰割り当て、および/または空きページがシステムが好む量を下回っており、非アクティブなページをパージしている、および/またはスワップに使用されると予想されるページをスワップしていることを示しています 同様に、割り当てが解放されると、システムは急速に回復し、仮想メモリシステムの負荷が軽減されます。
xnu
し、内部のオープンソースの参照先を示しています。圧力のGUI表示に最も関連する4つの値を取り上げました。
推測をいくらか明確にし、より正確にするために、メモリプレッシャーは、memory_status(以前はJetsamと呼ばれていた)と呼ばれる専用スレッドでカーネル(xnu)によって使用されるメトリックです。このスレッドは、使用可能なRAMが不足していることを検出する責任があります。OSXでは、スワップを強制することができ、iOSでは、メモリを最も消費するアプリを(スワップがないため)強制終了します。Mavericksでは、2つのOSがより近接しています。Memorystatusはカーネルノートを発行し、Obj-Cランタイムは最終的にappDidReceiveLowMemoryWarningに変換します。アプリは、未使用または不要なメモリ(キャッシュなど)を削除することになっています。DarwinのlibCもメモリを自動的に削除します。
特定の(文書化されていないが)システムコールvm_pressure_monitor(#296、私が正しく覚えている場合)があり、クライアントが圧力イベントをリッスンし、再生可能な物理ページ数を確認できます。
OS X用のプロセスエクスプローラー(http://newosxbook.com/index.php?page=downloadsからダウンロード可能)を使用して、Mavericksの圧力イベントを表示できます。どちらも圧力の「ゲージ」と圧力イベントを示しています。
メモリプレッシャーは、Machが内部的に保持する2つのカウンターによって定義されます。
vm_page_free_count
:現在何ページのRAMが空いているか vm_page_free_target
:最小でRAMのページ数を最適に解放する必要があります。 sysctlを使用して、これらを簡単に確認できます。
morpheus@Zephyr (~/Documents) % sysctl -a vm | grep page_free
vm.vm_page_free_target: 2000
vm.page_free_wanted: 0
vm.page_free_count: 73243
空きページの量が目標量を下回った場合、プレッシャーが発生します。