「非アクティブなメモリ」がたくさんあるときにOS Xがスワップを使用する理由


22

私は数か月からOS Xを使用しています(ライオンと現在はマウンテンライオン)。私のミニには8 GBありますが、ほぼ毎日、ほぼそれに近づいています。8 GBのWindows 7マシンでは、この種の問題は一度もありませんでした。とにかく、私はネットを読んで、非アクティブなメモリは最近閉じられたプログラムのアプリキャッシュであり、再起動を高速化するために使用できること、そして必要に応じてこの非アクティブなメモリを新しいアプリに解放できることを読みました。リリースされていません。代わりに、OS Xはスワッピングを開始します。だから私の質問は、「非アクティブなメモリ」がたくさんあるときにOS Xがスワップを使用する理由ですか?ここで私が意味することを示す画面:

ここに画像の説明を入力してください

スワップを開始する前に、OS Xがこれらの2.69 GBを使用するようにするアウェイがあることを本当に願っています。


うん、変です。1つのアプリケーションがすべてのRAMを占有していますか?OSXは、アプリケーションが一度に80%を超えるRAMを使用しないように制限している可能性があります。ただし、非アクティブというのは無料という意味ではありません。それは何かのために予約されています。
ピョートルクラ

[いいえ] -多くのアプリ、非アクティブなメモリがある場合にcache.ThereがないスワップにOS Xを作るための方法であるべき最近閉じたアプリであるため、自由である私が読んでから、ブラウザ、Eclipseとなど
Balchev

いつでも再現でき、必要に応じてアクティビティモニターの画面を作成できます。
バルチェフ

2
非アクティブなメモリは空きメモリではありません。
kinokijuf

2
@kinokijufただし、空きメモリが残っていない場合は、空きメモリとして機能する必要があります。とにかく、非アクティブなメモリが常にディスクにスワップされる場合、アクティブと非アクティブの区別をすることに意味はありません。
ピーター

回答:


18

スワップは、非アクティブなRAMページが実際にアクティブであるときに発生したようです。

更新:コメントで明確にされたように、これはあなたのケースではありません。したがって、同じ問題を抱えている人は、水平ルールに進むことができます。)

つまり、多くのプログラムが実行されていて、カーネルがいくつかのページをスワップアウトしました。その後、いくつかのプログラムを終了しました。カーネルは、RAMページを非アクティブとしてマークします。しかし、これらのページが必要になるまで、ページをスワップインしてRAMに戻すことはありません。これにより、非アクティブなページとスワップアウトされたページの両方が作成されます。

先制的にページをスワップインしないのはなぜですか?それはオッズに賭けているからです。長期的には負けです。簡単な例を考えてみましょう:同時にRAMに収まらない2つのプログラムAとB。プログラムAはまだ実行中で、スワップアウトされたページはすべてAに属します。プログラムBは終了し、非アクティブなページはすべてBに属します。

カーネルがAのページをプリエンプティブにスワップインし、その後すぐにスワップインする場合:

  • プログラムAはそのページにアクセスする必要があります->あなたが勝ちます-ページは既にRAMにあります。
  • Bをもう一度起動する->失う-ページをRAMに持ち込むためのコストを「支払った」ため、それらを送り返す必要があります。
  • 別のプログラムCを起動します-> AとCが同時にRAMに収まらないと失われます。それらが適合する場合、あなたは均一です。

また、スワップアウト(ディスクへの書き込み)はスワップイン(ディスクからの読み取り)よりも費用がかかることを考慮してください。これにより、この「ベット」はさらに魅力のないものになります。

要するに:あなたのカーネルを信頼し、それをだまそうとしないでください。


更新:アクティビティモニターを使用してシステムメモリの記事を読む と、非アクティブなメモリは機能しないことが判明しました。非アクティブなメモリに関する記事で指定されている定義は正しいです。

この情報はRAMにありますが、積極的には使用されていません。最近使用されました。

しかし、次の例は完全に誤解を招きやすくなりすぎています(率直に言って私の例のように)。

たとえば、Mailを使用してから終了した場合、Mailが使用していたRAMは非アクティブなメモリとしてマークされます。非アクティブメモリは、空きメモリと同様に、別のアプリケーションで使用できます。ただし、別のアプリケーションで非アクティブメモリが使用される前にメールを開くと、その非アクティブメモリが低速のドライブから読み込まれるのではなく、アクティブメモリに変換されるため、メールが速く開きます。

さらに多くのオンラインリソースを検索した結果、darwinカーネルメーリングリストでこのスレッドが見つかりました。これは非常に有益です。ジムマギーを引用(ダーウィンチーム​​から-私は思う):

要するに、カーネルVMシステムは、使用中のページを介してメモリプレッシャースキャンを処理し、アクティブマーキングと非アクティブマーキングのバランスを維持しようとします。非アクティブのページは、非アクティブとしてマークされている間、再利用のためにスキャンされます。それらが再利用されている場合、それらはアクティブとしてマークされ、他のページがアクティブから非アクティブ状態に移動して、アクティブに使用されているかどうかを検出する必要があります。したがって、非アクティブは誤った呼び名です。「おそらくアクティブではないので、それを確認してみてください」の略です。

あなたが発見したように、私たちが(現在)努力している内部バランスは、約2/3アクティブ対1/3非アクティブです...

これは、観察する動作を説明しています。つまり、表示される非アクティブなページは、最近使用されていない実行中のプログラムに属します。したがって、新しいプログラムを起動すると、非アクティブなページがスワップアウトされます。同時に、他のプログラムのページは非アクティブとしてマークされ、アクティブと非アクティブの2/1の比率が維持されます。

スレッドはまた、ダーウィンの内部についての詳細を学ぶためにいくつかの提案が含まれています。また、ビーチボールの問題のためにメモリ使用量の調査を開始した場合のいくつかの提案もあります(通常はほとんど関係ありません)。

結論は変わりません。カーネルを信頼し、それをだまそうとしないでください。:-)


1
こんにちは、わかりません-100-200MBの空きメモリ、2.6 GBの「非アクティブ」などの別のプログラムを起動して、Eclipse、Xcodeなどを使用しているときは、それらを使用しないということです2.6ギガバイト、代わりにアクティブmemory.NotからスワップあなたがどのようなI mean.Anywayを得れば、あなたの答えに感謝
Balchev

これは現在明らかです。このコメントの例を質問に追加する必要があるかもしれません。あなたが観察していることについて適切な説明を提供すると思う追加情報を追加しました。
m000

元の回答を編集するかどうかわからない。それは別のケースを説明し(あなたのコメントの直前にあなたの質問を得なかったので)、人々を混乱させるかもしれません。
m000

Radooがコメントで述べているように、「OS Xは空腹の獣です」。OS Xがそんなに多くのメモリを消費するとは思っていませんでした(LionとMountain Lionの両方)ので、ここに何か怪しいものがあると思ったのです。更新された答えをありがとう。
バルチェフ

6

十分なRAMがあれば、ページングを安全に無効にできます。

これらのコマンドを試してください。

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist
sudo rm /private/var/vm/swapfile*

次に、再起動して、dynamic_pagerプロセスが実行されていないことを確認します。

でスワップファイルが作成されていないことを確認してください/private/var/vm/

再度有効にするには、次のコマンドを試してください。

sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

Spotlightを無効にしてRAMを解放し、ディスクアクティビティを減らすこともできます。次のコマンドを使用して、Spotlightを無効および有効にします。

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -wF /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

OSXでスワップを無効にすると、システムの予期しない動作やクラッシュにつながる可能性があることをネットで読みました。これは本当ですか?
バルチェフ

記憶力が低下すると、記憶力が低下します。ただし、8 Gbなどの十分なメモリがあれば、問題は発生しません。
arundevma

2
「8 Gbのような十分なメモリ」–ごめん、それはとてもかわいい…:)
ボンベ

0

できることはあまりありません。それはなぜですか?なぜなら、それはOS Xの仕組みだからです。興味深い部分は、Macがスリープ状態になるたびに占有メモリが大きくなることです。

あなたにできること:

  1. RAMをアップグレードします。
  2. 必要に応じて、神聖な「パージ」コマンドを実行して、非アクティブなメモリのほとんどをクリアします。
  3. スワップを無効にしますhttp://osxdaily.com/2010/10/08/mac-virtual-memory-swap/

こんにちは、私はパージコマンドを使用しましたが、ほとんどの場合、「非アクティブな」メモリの半分以下しか解放しません。OSXでスワップを無効にすると、システムの予期しない動作やクラッシュにつながる可能性があることを読んだので、1)16 GBで問題ありません:)デスクトップではなく、サーバーに使用するメモリ量:)ありがとうあなたの答え
バルチェフ

Macbook Proに16GBありますが、これはサーバーではありません。:) OS Xは、特に複数のミッド/ビッグアプリを同時に使用する場合、メモリに関しては空腹の獣であることがよく知られています。画像/ビデオ編集ソフトウェア、一部のゲーム、小さなアプリを開かずに、16GBをすべて埋めることができました。非アクティブなメモリは4ギガバイト...についてだった

また、OS Xアプリの多くが既に64ビットであることを考慮する必要があります。64ビットアプリは、アドレス空間が大きくなるため、32ビットアプリよりも多くのメモリを割り当てます。

0

システムは設計どおりに機能しています。メモリに負荷がかかっていない場合でも、破棄できないがシステムがビジーでないときにスワップに最近使用されていないページを書き込むことは理にかなっています。こうすることで、後でメモリ不足が発生した場合、システムがビジー状態のときにこれらのページをスワップ用に最初に書き込むことなく、RAMから削除できます。


1
それはそのときひどく設計されています。スワップ領域の割り当てと使用に積極的すぎます。
メンドータ

なぜ重要なのですか?空きスワップがたくさんある場合、スワップスペースの割り当ては無害です。これは、割り当てを削除してもコストがかからないため、スワップに必要なデータが含まれていない場合に特に当てはまります。これは優れた設計です。システムがプレッシャーにさらされたときに後回しにするのではなく、ほとんど費用がかからないときにハードワークを行います。
デビッドシュワルツ

2
アグレッシブすぎるとデザインが悪くなり、プログラムでst音やハングアップが発生し、誤って非アクティブとしてタグ付けされ、スワップに移行し始めます。一方、別の8回のギグがRAM内の空きがあります:/
メンドータ

メンドータに同意します。スワップを完全に無効にすると、システムはスムーズに動作し、音も途切れることはありません。
アントンクズミン

@AntonKuzminそれは本当にこの質問が何であるかとは何の関係もありません。この質問を読むと、,音やその他の問題については何も書かれていません。
デビッドシュワルツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.