「非アクティブ」メモリが残っている場合にMac OS Xがスワップを使用できないようにするにはどうすればよいですか?


61

OS Xの日々の使用(およびインターネット全体のさまざまな投稿によると他のいくつかの使用)での一般的な現象で、システムは「空き」メモリがなくなると遅くなるようです。おそらく、これはスワッピングによるものです。重いディスクアクティビティが明らかであり、vm_statが多くのページアウトを報告するからです。(間違って修正してください)

ただし、「非アクティブ」RAMの量は、スワッピングの開始/発生/終了時の使用可能なすべてのメモリの約12.5%〜25%(^ 1。)です。

http://support.apple.com/kb/ht1342によると:

非アクティブなメモリ

メモリ内のこの情報は積極的に使用されていませんが、最近使用されました。

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

そして、http//developer.apple.com/library/mac/#documentation/Performance/Conceptual/ManagingMemory/Articles/AboutMemory.htmlによると:

非アクティブリストには、現在物理メモリに常駐しているが最近アクセスされていないページが含まれます。これらのページには有効なデータが含まれていますが、いつでもメモリから解放されます

したがって、基本的には、プログラムが終了すると、そのメモリは非アクティブとしてマークされ、いつでも要求可能になります。それでも、OS Xは、「空き」メモリが少なくなるたびに、このメモリを要求するのではなく、スワップファイルへのメモリのスワップを開始することを好みます。

どうして?たとえば、スワップファイルに触れずに非アクティブなメモリを即座に解放することに対するこの動作の利点は何ですか?一部のソース(^ 2。)は、OS Xが解放する前に「非アクティブ」メモリをページアウトしてスワップすることを示しています、メモリがいつでもメモリから解放される可能性がある場合、それは意味がありませんか?スワッピングは高価で、リリースは安価ですよね?

この動作は、何らかの設定または既知のハックを使用して変更できますか?(できれば、swap / dynamic_pagerを完全に無効にして再起動する機能を含まないものを...)

私はパージコマンド、およびいくつかの空きメモリを強制するためのディスク権限の修復の概念を高く評価していますが、これらは実際にスワップ/リリース決定ロジックを修正するよりも多くの空きメモリを強制的に強制する方法です...

ところで同様の質問がここに頼まれた:http://forums.macnn.com/90/mac-os-x/434650/why-does-os-x-swap-when/、ここで:のhttp://hintsforums.macworld .com / showthread.php?t = 87688ですが、OPがコアの質問を再尋ねたとしても、どの回答もそれに対する答えに対処しません...

^ 1。更新2012年3月17日この質問を最初に投稿してから、インストール済みのRAMを4GBから8GBに変更しましたが、問題は残っています。「非アクティブ」RAMの量は、以前0.5gb-1.0gbでしたが、スワップの開始/発生/終了時に通常1.0-2.0GBになりました。つまり、osxによってRAMの約12.5%-25%が非アクティブとして保持されるようです。カーネルロジック。

^ 2。たとえば、https://apple.stackexchange.com/questions/4288/what-does-it-mean-if-i-have-lots-of-inactive-memory-at-the-end-of-a-work-日

すべてのメモリが使用されると(空きメモリは0)、OSは非アクティブなメモリをスワップファイルに書き込み、アクティブなメモリにより多くのスペースを確保します。

更新日2012年3月17日

以下は、これまでに役立つことが提案されている方法のまとめです。

パージコマンド

「パフォーマンス分析のためにコールドディスクバッファーキャッシュを使用して初期ブート条件を概算するために使用されます。malloc、vm_allocateなどを介して割り当てられた匿名メモリには影響しません。」

これはosxがディスクキャッシュをスワップアウトするのを防ぐのに役立ちます(osxが実際にそうするのはばかげています)が、ディスクキャッシュが解放されるという欠点があるため、ディスクキャッシュがスワップアウトすると、単にコールドディスクバッファーキャッシュになり、パフォーマンスに悪影響を与える可能性があります。

FreeMemoryアプリおよび/またはいくつかのフリーメモリを強制的にディスクのアクセス権を修復

メモリを解放する助けにはならず、数ギガバイトのメモリ内容をRAMからhdに移動するだけです。最終的に、メモリの解放中に開いていたアプリケーションを使用しようとすると、そのvmの多くがスワップ上にあるため、これにより多くのスワップインが発生します。

dynamicpagerwrapperを使用したスワップ割り当ての高速化

スワップ使用を高速化するためには良いことのように思えますが、そもそも非アクティブなメモリがある間にosxスワッピングの問題に対処しません。

dynamicpagerを無効にして再起動してスワップを無効にする

これにより、すべてのメモリが使用されている場合、osxはシステムハングの価格にスワップを使用しなくなります。実行可能な代替ではありません...

ハッキングされたdynamicpagerを使用しスワップを無効にする

上記のdynamicpagerを無効にするのと同様に、ブログ投稿へのコメントからの一部の抜粋は、これが実行可能な解決策ではないことを示しています。「システムのメモリが不足すると、OS全体がハングします...」、「Macのメモリをすべて消費すると、マシンがハングする可能性があります」

要約すると、「非アクティブ」なメモリが残っているときに、Mac OS Xがスワップを使用できないようにする方法はまだわかりません。それが不可能な場合は、少なくともosxがいつでもメモリから解放される可能性のあるメモリをスワップアウトすることを好む理由について少なくとも説明がありますか?


1
この問題は、Activity Monitorの数値で説明されています。bassistance.de / i / f2322d.png 空きメモリはほとんどありませんが、非アクティブなメモリはたくさんあります。それを取り戻す代わりに、OSXは、40 GBのページアウトでわかるように、頻繁にスワップを開始することを好みます。
ヨルンゼフェラー

十分な空きメモリがあり、まだ複数GBのスワップが使用されています。16GB rMBP。
スティーブンルー

1
どうやら一部の人々は、「パージ」を実行しているから利益を報告しているapple.stackexchange.com/questions/67031/...非負が
rogerdpack

回答:


19

定義上、非アクティブなメモリはページアウトの準備ができているメモリであり、ページアウトするためにスワップに書き込む必要があります。これは、どんな種類の問題でも、最適化すべき問題でもありません。実際、OS Xは設計どおりに動作しています。

残念ながら、テクニカルサポートライターはカーネル開発者ではありません。AppleKnowledge Baseのサポート記事の引用は、非アクティブメモリがプログラムで使用されていないメモリであると主張する場合、間違っています。プログラムを終了すると、その常駐メモリはすべてFreeになります。Inactiveで停止しません。ただし、メモリ管理がどのように機能するかを説明する開発者サイトへの2番目のリンクは、完全に読めば優れたリソースです。

OS Xの「非アクティブなメモリ」の意味について多くの誤解があります。誤解とは反対に、すべての非アクティブなメモリが空、未使用、キャッシュ、またはパージ可能というわけではありません。実際、アクティブメモリは、最近アクセスされた場合、同様にキャッシュまたはパージ可能です。多くの非アクティブなメモリには、単に破棄できないデータも含まれています。破棄された場合、プログラムはクラッシュします。破棄されたページには有効なデータが含まれていたため(OS X開発者側からの引用が示すように)、プログラムは(仮想)メモリに格納されたデータが消えないことを期待しているためです。

非アクティブメモリには、アクティブメモリと同じタイプのデータが含まれています。唯一の違いは、OS Xが一部のメモリチャンクがしばらくの間読み書きされていないことに気付いたことです。

OS Xが一部のメモリを非アクティブとして分類し、他の領域を「アクティブ」として分類する理由は、ページアウトに関係しています。メモリが不足すると、データをページアウトする必要があります。問題は、どのデータですか?プログラムがすぐに再び必要とすることが判明したデータをページアウトすると、時間を無駄にし、何も達成しません。したがって、プログラムがすぐに再び使用する必要がないメモリをページアウトする必要があります。

プログラムは仮想メモリを好きなように使用でき、OSにそのプランについて何も伝えないため、将来どのページが不要になる可能性が高いかを予測することは困難です。しかし、ヒューリスティックとして、ほとんどのプログラムはメモリ使用量が「スティッキー」です。しばらくメモリを使用していない場合は、そのメモリを使用し続けない可能性が高く、最近使用したメモリを使用し続ける可能性があります。

そのため、OSが一部のデータをページアウトすることを決定すると、最近使用されていないページを交換する戦略が必要になります。これが、OS Xがプログラムが占有しているメモリを「アクティブ」と「非アクティブ」の2つの山に分類する理由です。上記の投稿リンク完全に読めば、開発者向けサイトには、そのプロセスが起こる方法について説明します:

  • メモリが少なくなり始めると、OSはアクティブなメモリページを調べ始め、それぞれにフラグを設定します。
  • プログラムがページの読み取りまたは書き込みを行うと、フラグはクリアされます。
  • 少し遅れてフラグがクリアされない場合、そのページは「非アクティブ」パイルにソートされます。
  • 「非アクティブ」ページがそのプログラムによってアクセスされると、そのページは「アクティブ」パイルに戻されます。
  • メモリが不足すると、「非アクティブ」ページがページアウトされます。

どのメモリをスワップアウトするかを決定するこのソートプロセスは、最新のすべてのオペレーティングシステムで類似していることに注意してください。Linuxには、「Linux Virtual Memory Managerについて」で説明されているように、アクティブページと非アクティブページの同じ2つのリストがあります。Windowsでは、3つ以上のクラスのリーセンシーで少し異なるものを使用する場合があります。現時点では、最近の信頼できる技術的な説明は見つかりません。その他の実装については、「ページ置換アルゴリズム」というタイトルのウィキペディアのページで説明しています。OS Xとの唯一の違いは、統計の表示方法でした。誰かが、アクティブtopモニターと非アクティブモニターまたはアクティビティモニターに別々の数値を表示することをお勧めします。振り返ってみると、これはおそらくそれほど良いアイデアではありませんでした(そして、これはOS X 10.9で変更されました)。

フラグを設定およびクリアし、アクティブ/非アクティブヒープを維持するこのプロセスには、わずかなプロセッサパワーが必要です。そのため、OS Xは多くの空きメモリがある場合は実行しません。したがって、最初に起動するプログラムは、空きメモリが少なくなり始めるまで、すべての「アクティブな」メモリとして表示されます。

したがって、白紙の状態から始めて、ますます多くのプログラムを開くと、アクティビティモニターに次のような進行状況が表示されます。

  • まず、多くの「空き」メモリがあり、非アクティブなメモリはほとんどありません。これは、メモリフラガーが実行を開始していないためです。
  • 空きメモリの量が減少すると、OS Xはメモリフラガーの実行を開始し、「非アクティブ」の量が増加し始めるのを確認します。「非アクティブ」の各ビットは、以前は「アクティブ」でした。
  • 空きメモリが不足すると、「非アクティブ」パイルのページがページアウトされます。メモリフラガーは、メモリをアクティブと非アクティブに分類するフルティルトも実行します。通常、swapが書き込まれている間、多くの「非アクティブ」が表示され、メモリフラガーが本来の動作をしていることを示します。

ページスワップアウトされる前に非アクティブとして分類されます。Apple開発者サイトからの引用は、「これらのページには有効なデータが含まれていますが、いつでもメモリから解放される可能性があります」という意味です。これは、非アクティブに降格されるまでリリースされないアクティブなページとは反対です。ページを解放するにはさまざまな方法があります。ページがファイルからマップされていて、変更されていない場合、すぐに削除してオンデマンドで再読み込みできます。同様に、以前にスワップアウトされ、スワップインされてから変更されていないメモリの場合。プログラムは、キャッシュとパージ可能なメモリを明示的に割り当てて、オンデマンドで忘れて再作成できるデータを格納できます(ただし、プログラムがキャッシュを割り当てる理由そのデータを再作成するのにかなりの時間がかかる場合です。

したがって、Activity Monitorで「非アクティブな」メモリの量を確認し、コンピューターがスワップへの書き込みを行うと同時に非アクティブなメモリが大量にあることを確認しても、システムが設計どおりに機能していることがわかります。

また、非アクティブなメモリとファイルキャッシュの間には混乱があります。Activity Monitorが既にそれらを別の見出しの下にリストしているので、なぜそのような混乱があるのか​​わかりません。キャッシュは、ファイルシステムに再度アクセスする必要がある場合に備えて、ファイルシステムに対して読み書きされた最近のデータを格納するために使用されるメモリです。メモリが少ない場合、OS Xは最初にキャッシュを削除する傾向があります。スワップスラッシングが発生していて、アクティビティモニターに大量のキャッシュ(非アクティブではない)が表示される場合、それは問題になります。しかし、非アクティブなメモリは別のものです。

疑わしい場合は、「非アクティブ」と「アクティブ」の区別を無視してください。それらを「プログラムが使用するメモリ」の塊であるとみなし、2つの数値を加算します。これは、メモリ使用量を通知するときに他のすべてのオペレーティングシステムが行うことです。

OS X 10.9の注: Mavericksは、「メモリ圧縮」を導入しました。これは、多かれ少なかれ、別のスワップ層です。現在、アクティブなページは非アクティブに分類され、圧縮され(使用しているツールによってはカーネルメモリとして表示される場合があります)、メモリ使用量の増加に応じてスワップに書き込まれます。Mavericksは、特に周囲の誤解を考えると、有用なものではないことが判明したため、Activity Monitorでアクティブと非アクティブの個別の数値の表示を停止しました。


4

現在、macos Xの動作(または呼ばれている)を調整する簡単な方法はありません。ただし、いくつかのハックが利用できます(開発者アカウントとSDKが必要です)。

http://cestdelamerde.com/archives/22-Killing-Mac-OS-X-Swapping-How-To-Disable-dynamic_pager.html

http://dropsafe.crypticide.com/article/3848

幸運を!

追記。MacOSXのアクティブメモリ、非アクティブメモリ、その他のメモリのより一般的なレビューを得るために、この回答(私も)を読むことをお勧めします。有線メモリとOS Xのアクティブメモリ


返信いただきありがとうございます。swappinessを調整することは間違いなく助けになります-それは簡単ではないのは残念です!最初のリンクについては、スワップの使用を無効にするためにあまりにも多くの労力が必要であり、システムが低容量に近づくと不安定になるため、swap / dynamic_pagerを完全に無効にして再起動することを含まないハックを本当に探しています非アクティブおよび空きメモリ。2番目のリンクは、増え続けるスワップファイルの問題を示しています。特に重要な問題は、スワップファイルが少なくなっている場合ですが、このスレッドの私の質問にはあまり関係ありません
...-Motin

4

恒久的な解決策ではありませんが、少なくとも非アクティブなメモリを回収するのに役立ち、恐ろしいスワッピングを潜在的に回避できます:http : //itunes.apple.com/nz/app/freememory/id460931672?mt=12

このツールは無料で、非常に使いやすいです。開始したら、システムのツールバー/メニューで「空きメモリ」オプションを選択します。

ActivityMonitorのメモリディスプレイとは異なり、空きメモリのみを表示します。これは、実行中のスワッピングのより良い指標と思われます。


約2か月前にあなたの提案からこのアプリを評価しています。実際、このアプリは、多くのメモリを積極的に要求してから解放するなど、さまざまなトリックによって「空き」メモリの量を増やしているようです。ただし、これにより、「解放」されたのと同じ量のメモリがスワップアウトされます。これは、メモリの内容をRAMからhdに移動するだけで、メモリの解放には役立たないということです。最終的に、メモリの解放中に開いていたアプリケーションを使用しようとすると、そのvmの多くがスワップ上にあるため、これにより多くのスワップインが発生します。:(
モティン

@Motin、私はFreeMemoryを何ヶ月も使用してきましたが、少なくとも私の経験ではそうしません。(Activity Monitorで見たものに基づいて)推測を行わなければならなかった場合、違いはFMが最初に「アクティブな」メモリを消費し、ディスクキャッシュよりも優先されることです。優先度を高くすることで他のメモリを「解放」し、その後、自身のメモリを解放ます。大幅にスワップに追加されるのを見たことはありません(消費中に割り当てられる少量かもしれません)。
まぶたのない

2

OS X 10.5から、MAC OS Xには明らかなメモリ管理の問題があります。Webは、しばらくすると、システムが劇的にスローダウンするという不満ですでに雑然としていました。当時、私はより遅いマシン、1GB RAMを搭載したMac Miniを持っていたので、(間違って)それは劣ったハードウェアによるものだと結論付けました。

今、私は2010 MBP、コアi7、8 GB RAM、デュアルGPUを持っています。Mac os X Snow Leopardは苦痛でしたが、OS X Lionに移行した後、MACでいくつかの深刻な作業を行うのは悪夢になり始めました。

やっと問題のあるシナリオを再現できたので、テストを実行して画面をビデオに記録しました。

MAC OS X Lionのパフォーマンスの問題-壊れたメモリ管理

Pictures /フォルダにある大量の画像ファイルに対して、基本的なUNIXのことであるtar + bzipコマンドを実行します。開始直前に、「パージ」コマンドを実行して、非アクティブ/キャッシュされたプログラムデータを削除します。

ビデオで、空きメモリが非常に急速に低下し始め、非アクティブが常に増加していることがわかります。「bsdtar」コマンドを見ると、RAMの断片だけが必要なので、問題はこのプロセスにはありません。プログラムのメモリリークであると言うことはできません。問題は非アクティブなRAMではなく、アクティブ/有線にあるためです。

無料のメモリが100 MBを下回ると、Safari、iPhoto、MS Wordなどのアプリを起動しました。動画で、アプリを起動するのに数分かかることがわかります(通常(空きRAMがある場合))ロードに3〜5秒かかります。

Linux Centos 6ボックスで同じシナリオと同じコマンドを実行しますが、問題ありません!メモリ使用量は10〜20 MB程度で、キャッシュ/バッファに問題はありません。

Mac OS Xでは、メモリ管理が非常に壊れている必要があります!


2
表示されているのは、ファイルをメモリにキャッシュするシステムです。キャッシュは決してパージされないように見えるという点で問題があることに同意しますが、キャッシュ自体(および結果としての非アクティブなメモリの増加)は健全で、時には有用なパフォーマンス機能です。
まぶたのない

また、テスト環境は無菌状態にはほど遠い。QuickTime Playerが何をしているか、または他のプログラムが開いているかどうかはわかりません。
chrishiestand

1

これに対する正しい答えはないと思う。これは、Macをスリープ状態にしたときにアクティブなままであるメモリと同じです。成長するたびに成長し、成長するたびに成長します。

「楽しい」(別名高価)側では、メモリをアップグレードしたり、HDDをSSDに交換したりできるので、スワッピングはパフォーマンスの低下になりません。Corsairのメモリが手頃な価格で利用できるようになったため、最初のオプションを選択しました。

16GB RAM


2
SSDの書き込みサイクルは限られていることに注意してください。また、トリム非対応のSSDの場合、フラッシュセルを消去する必要があるため、書き込みは最終的に高価になる可能性があることに注意してください。
波状のカニ

「スリープによりメモリ使用量が増加する」問題に関する情報源を引用できますか?
GordonM

私の経験を引用できますか?:)私は簡単な検索を行って、これを見つけました:Discussions.apple.com/message/21624847#21624847 +必要なときにクリアされない非アクティブなメモリに関連する多くのトピックがあります。私は個人的に、睡眠のたびに非アクティブな記憶が以前のように残り、増加する様子を見ました。「パージ」はオプションですが、20分ごとに非アクティブなメモリをパージしたくありません(4 GiB RAMの場合は間違いないでしょう)。

1
@WavyCrab SSDの書き込みサイクルは限られている場合がありますが、その制限に達する可能性はありません。それがデータセンターのSSDでない限り、私はそれについて心配しません。いずれにせよ、過度の書き込みによってSSDをダウンさせる場合は、HDDを早くダウンさせます。
andreadi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.