MavericksとYosemiteの「メモリプレッシャー」はどのスケールまたは尺度に準拠していますか?


57

マーベリックス(およびヨセミテ)のアクティビティモニターは、新しいダイアグラム、メモリプレッシャーを表示します。悲しいことに、そのヘルプテキストはそれが何を正確に測定するかを漠然としか説明していません。メモリ負荷はどのように計算されますか?

Mavericks Activity Monitor-メモリ

画像の信条は、マーベリックスの最高の新機能に関する世論調査の質問からこの答えに行きます。

回答:


51

メモリーのプレッシャーは、空きメモリーの割合の単純なゲージではなく、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_pressureMavericksには新しいコマンドが導入されており、これを実行してメモリサブシステムを警告状態にすると、メモリの圧力が黄色の範囲に増加することがわかります。

<code> sudo memory_pressure -l warn </ code>のアクティビティモニター結果

このツールは、圧力グラフが着実に増加し、明らかに「警告」レベルがグラフ化されているこの状態に合わせて、約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をディスクにページングするとツールが言った後、ドライブをいっぱいにしてツールを終了したくありませんでした。

<code> sudo memory_pressure -l critical </ code>のアクティビティモニター結果

警告が終了した後、システムがどのくらいの速さでRAMを解放したか、また仮想メモリシステムがディスクへのスワッピングを回避するのに十分なページを圧縮できなかったことを示す「赤」領域にランプアップした様子を観察できます。私の経験から推測した圧力は、スワッピングと劇的な過剰割り当て、および/または空きページがシステムが好む量を下回っており、非アクティブなページをパージしている、および/またはスワップに使用されると予想されるページをスワップしていることを示しています 同様に、割り当てが解放されると、システムは急速に回復し、仮想メモリシステムの負荷が軽減されます。


明確化していただきありがとうございます。上記のスクリーンショットで仮想メモリ、ファイルキャッシュ、アプリメモリのパラメーターを計算するコマンド(またはコマンドセット)があるかどうかを知りたいです。
ムハンマドハッサンナスル14年

@MuhammadHassan以下の回答では、アルゴリズムのリバースエンジニアリングの概要を説明xnuし、内部のオープンソースの参照先を示しています。圧力のGUI表示に最も関連する4つの値を取り上げました。
bmike

30

推測をいくらか明確にし、より正確にするために、メモリプレッシャーは、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の圧力イベントを表示できます。どちらも圧力の「ゲージ」と圧力イベントを示しています。


そのウェブサイトには詳細な記事があります-newosxbook.com/articles/MemoryPressure.html-OS XとiOSでのメモリのプレッシャーと処理の詳細
-user61711

MavericksとiOSカーネルの類似点と相違点に関するすばらしい詳細。Process Explorerへのリンクをありがとう。
bmike

14

メモリプレッシャーは、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

空きページの量が目標量を下回った場合、プレッシャーが発生します。


http://newosxbook.com/articles/MemoryPressure.htmlから

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.