Mac OSX(10.2 +)で実行されている特定のアプリケーションのメモリの一部が(つまり、/private/var/vm/swapfile*
ファイルの1つに)スワップアウトされているかどうかを確認する方法はありますか?それと、いくらですか?
報奨金(150 rps)
簡単な質問。バウンティ期間の満了が2日以内に表示された場合、最初の正解が受け入れられます。それでもまだ持っていない場合は、最も興味深い新しい事実を教えてくれた人に授与します。そして、どの答えからも1つも学ばなかった場合は、最もきれいに書いた人に賞金を授与します。
私はたくさんグーグルしてきました;-)私が理解しているように、特定のプロセスの仮想メモリは ページ に分割され、OSによって処理され、RAMであるかのようにアプリケーションに提示されます。
OS Xでは、Machカーネルに基づいて、これは dynamic_pager
というデーモンによって処理されます。このプロセスでは、おっしゃるように/private/var/vm
にスワップファイルが生成されます。これらのスワップファイルは、アプリケーションごとではなく、「メモリの必要性」に基づいて生成されます。スワップファイルは4096バイトのページに分割され、ページは、仮想メモリを必要とする(OSによって)プロセスに割り当てられます。したがって、スワップファイルを特定のアプリケーションに関連付けることはできませんが、特定のプロセスが使用しているページ数は確認できます。
Termialでコマンドvm_stat
を試してみることをお勧めします。これにより、VM使用量の統計が得られます(「ページサイズ」×アクティブなページ数はスワップファイルのサイズに等しいことに注意してください)。これは、複数のプロセスを使用できる理由も説明しています。 VMですが、スワップファイルは2、3個だけです。
他の楽しいコマンドはvmmap [process id]
とpagestuff
です。
vmmap PID
コマンドは、特定のプロセスに関するいくつかの有用な統計を数値で提供する必要があります。
ここに投稿されたアイデアに基づいて、次の小さなコード行を作成しました。
Sudo vmmap notifyd | grep -A3 'Summary'
これは、vmmap出力の要約セクション(3行)を表示します。この例ではnotifyd
を使用しましたが、これを知っている任意のPIDに置き換えることができます。
この行は、実行中のすべてのプロセスのすべての要約行を一覧表示しようとします。明らかに、プロセスIDがすでになくなっている(プロセスが終了している)ために失敗するものもありますが、一般的に、これはメモリ情報のリストをスクロールして最上位のスワッパーを見つけるための優れた方法であることがわかりました。
ps -o pid= -xa | awk '{print $1}' | xargs -n 1 Sudo vmmap | grep -A3 'Summary'
編集:一部の匿名ユーザーは、明らかに元のバリアントが機能しなくなったため、この最後のコマンドラインを改善する必要があると考えました。ですから、あなたが誰であれ、どうもありがとうございました。あなたの編集が拒否されて申し訳ありません。 (最初のコマンドは以前に「psxa」を読み取り、psの見出しがスローされたためにvmmapが失敗しました)
さらなる改善:プログラムの名前をすぐに知りたい場合は、この小さな変更を使用してください
ps -o pid= -xa | awk '{print $1}' | xargs -n 1 Sudo vmmap | egrep 'swapped_out|Path'
このコマンドのもう一方の端を少し修正すると、特定のプログラム名またはコマンドラインパスコンポーネントをフィルタリングできます。ここでは、たとえば「Library/PrivateFrameworks」のすべてのプロセスのみを確認しています。
ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 Sudo vmmap |
/ Applications/UtilitiesフォルダにあるActivityMonitorを開くと、これを示す仮想メモリ列があります。仮想メモリヘッダーをクリックして、アプリケーションで最も使用されているものと最も使用されていないもので並べ替えることができます。また、必ず[マイプロセス]を[すべてのプロセス]に変更し、1つのアプリケーションに複数のプロセスが含まれる可能性があることに注意してください。たとえば、サードパーティのアプリケーションLittle Snitchは、「Little SnitchNetworkMonitor」と「LittleSnitchUIAgent」で構成されています。
リドギが言ったように、アクティビティモニターを開きます。検査するプロセスに移動し、[...検査]をクリックします。次に、メモリをクリックします。これにより、特定のプロセスが使用しているスワップの量がわかります。
楽しんで!