特定のMacアプリケーションはどのくらいのスワップを使用していますか?


15

Mac OSX(10.2+)で実行されている特定のアプリケーションのメモリの一部が(つまり、/private/var/vm/swapfile*ファイルの1つに)スワップアウトされているかどうかを確認する方法はありますか?それと、いくらですか?

バウンティ(150 rps)

簡単な質問。バウンティ期間の有効期限が2日未満の場合、最初の正解は受け入れられます。それでもまだ持っていない場合は、最も興味深い新しい事実を教えてくれた人にそれを授与します。そして、私が答えのどれからも一つのことを学ばなかったなら、私は最もかわいく書く人に報奨金を授与します。


これはとても悪い質問です。あなたがそれを測定しようとしていたので、あなたが探している数は変わるでしょう(ハイゼンベルグの不確実性原理を考えてください)。さらに、他のアプリケーションとそのメモリ要件、ioパターン、およびプロセスの優先度に応じて、常に変化します。番号を見つけたとしても、OSコードを編集しているのでなければ、アプリケーションの観点からそれを変更することはほとんどないため、何の役にも立ちません。
-gavaletz

3
@gavaletz:今朝ベッドの間違った側から抜け出す?Linuxが/ proc / $ pid / smapsを使用して可能にするようなスワッププロファイリングが必要です。私は通常、耳を使って突然のスワップアクティビティのバーストを識別することができるので、gavaletzの不確実性の原理にあまり煩わされません。
チャールズスチュワート

回答:


13

私は多くをグーグルしてきました;-)私が理解しているように、与えられたプロセスの仮想メモリはOSによって処理され、まるでRAMであるかのようにアプリケーションに提示されるページに分割されます

OS Xでは、Machカーネルに基づいて、これはと呼ばれるデーモンによって処理されますdynamic_pager/private/var/vmあなたが言及したように、このプロセスはスワップファイルを生成します。これらのスワップファイルは、アプリケーションごとに生成されるのではなく、「必要なメモリ」に基づいて生成されます。スワップファイルは4096バイトのページに分割され、ページは仮想メモリを必要とする(OSによって認識される)プロセスに割り当てられます。したがって、スワップファイルを特定のアプリケーションに関連付けることはできませんが、特定のプロセスが使用しているページ数は確認できます。

vm_statTermialでコマンドを試してください。これにより、VMの使用状況の統計情報が得られます(「ページサイズ」とアクティブなページ数の積がスワップファイルのサイズに等しいことに注意してください)。これはまた、VMを使用して複数のプロセスを使用できる理由を説明しますが、スワップファイルは2、3のみです。

他の楽しいコマンドがあるvmmap [process id]pagestuff


ちなみに、developer.apple.com / mac / library / documentation / Darwin / Conceptual / ...を確認してください。
trolle3000

これは有望に見えます。これは、質問の最初の部分に対する明確な答えを提供するようであり、2番目の部分に対する具体的な答えを示唆しています。私は...さらに掘るする必要があります
チャールズ・スチュワート

あなたの質問の2番目の部分の答えではありませんvmmap [pid]vmmap -pages [pid]
trolle3000

vmmap $ pidは、書き込み可能領域として分類するものについて明確な情報を提供します。読み取り専用領域に割り当てられた(スワップ可能な)メモリとスワップされたメモリを区別しませんが、おそらく区別はそれほど重要ではありません。明日はこの答えを受け入れるでしょう。
チャールズスチュワート

5

このvmmap PIDコマンドは、特定のプロセスに関するいくつかの有用な統計情報を提供します。


でもvmmap [AppNameは]作品
ステューダー

4

ここに投稿されたアイデアに基づいて、この小さなコード行を作成しました。

sudo vmmap notifyd | grep -A3 'Summary'

vmmap出力のSummaryセクション(3行)を表示します。notifydこの例では使用しましたが、これを既知のPIDに置き換えることができます。

この行は、実行中のすべてのプロセスの要約行をすべてリストしようとします。プロセスIDがすでになくなっている(プロセスが終了している)ために一部が失敗することは明らかですが、一般に、これはメモリ情報のリストをスクロールしてトップスワッパーを見つけるのに最適な方法であることがわかりました。

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | grep -A3 'Summary'

編集:一部の匿名ユーザーは、明らかに元のバリアントが機能しなくなったため、この最後のコマンドラインを改善する必要があると考えました。あなたが誰であれ、どうもありがとう。編集が拒否されてすみません。(最初のコマンドは以前に「ps xa」を読み取り、psの見出しがスローされたためにvmmapが失敗しました)

さらなる改善:プログラムの名前をすぐに知りたい場合は、この小さな変更を使用してください

ps -o pid= -xa | awk '{print $1}' | xargs -n 1 sudo vmmap | egrep 'swapped_out|Path'

このコマンドのもう一方の端を少し修正すると、特定のプログラム名またはコマンドラインパスコンポーネントをフィルタリングできます。ここでは、たとえば「ライブラリ/ PrivateFrameworks」のすべてのプロセスのみを表示しています。

ps -o pid,command= -xa | grep 'Library/PrivateFrameworks' | awk '{print $1}' | xargs -n 1 sudo vmmap |

vmmapを32ビットプロセスとして起動できず、xargsが停止するという多くのエラーが発生します。カードを続けるために、私はそうしましたps -o pid= -xa | awk '{print $1}' | xargs -n 1 -I{} bash -c ‘sudo vmmap {} || true’ | egrep 'swapped_out|^Path:|^Process:'。ctrl + cでは停止しませんが、vmmapエラーでも停止しません。
ShadSterling

0

/ Applications / Utilitiesフォルダーでアクティビティモニターを開くと、これを示す[仮想メモリ]列があります。仮想メモリヘッダーをクリックすると、アプリケーションで使用されるほとんどまたは最も少ないものでソートできます。また、[マイプロセス]を[すべてのプロセス]に変更し、1つのアプリケーションが複数のプロセスを持つ可能性があることに注意してください。たとえば、サードパーティのアプリケーションLittle Snitchは、「Little Snitch Network Monitor」と「Little Snitch UIAgent」で構成されています。


4
それは間違っている。仮想メモリ列のnubmerは、現在RAMとスワップ、mmapedファイルにあるメモリの合計であり、他に何がわからないのですか。
タデウシュA.カドウボウスキ

本気ですか?Appleはsupport.apple.com/kb/TA20517に
-ridogi

1
VM番号は割り当てられた量を測定しますが、実際にはまだ使用されていません。スワップファイルには、実際に使用されるものが含まれます。
-Chealion

@Chealion:割り当てられているが実際には使用されていないメモリをどのように定義しますか?
Tadeusz A.Kadłubowski10年

@tkadlubo:この場合、私の信念は、プロセスで使用できるVMサイズと、ディスクにページアウトされた実際のページとの違いにすぎないと考えています。VM番号とディスク上のスワップファイルが異なることに注意する以外に、それを定義する方法がわかりません。
Chealion

0

ridogiが言ったように、Activity Monitorを開きます。検査するプロセスに移動して、「...検査」をクリックします!次に、メモリをクリックします。これにより、特定のプロセスが使用しているスワップの量がわかります。

楽しんで!


3
検査ページには、#pagefaults、#pageins、mmapdファイルのリストなど、質問の答えと正の相関関係にあるあらゆる種類の興味深いものが表示されますが、質問に対する実際の答えはどこにもありません。
チャールズスチュワート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.