Yosemiteでディスクキャッシュを無効にする方法


1

すべてのRAM(8GB)を使用しているため、MacBookは常にフリーズします。ディスクキャッシュが原因のようです。このコマンドsudo purgeは少しだけ役立ちます。一部の古いバージョンのOS Xでは、MacBookにXcodeを(大きなプロジェクトで)常にスワップすることなく実行するための(ちょうど)十分なRAMがあったため、うまく機能しました。

これは、プロジェクトを1回コンパイルした後のメモリ使用量です。Xcodeのメモリ使用量は、数時間使用した後に数百MB増加する可能性があります。

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


メモリが不足しているため、スワップが0であるため、メモリが不足しているとは思わない
マーク

システムがハングしているときのCPU使用率は低かった。ハングはメモリ使用量と高い相関がありました
-keithyip

ここに示されているメモリusuageは、最小限のではなく、問題である
マーク・

@keithyip 過去に少し実験しましたが、現在のvm_compressorの設定は何ですか?テストを実行するための「プロジェクト」(たとえば、github)は無料で利用できますか?
クラノマス

@klanomathデフォルト値の4に戻しました。OSXはゲームで一定のFPSを維持できなかったため、コンプレッサーを無効にしようとしました。唯一の欠点は、十分なRAMがない場合にOS Xがクラッシュすることでした。プロジェクトは私の会社のアプリです。クローズドソースです。Chromeを使用してRAMを占有する簡単な代替方法は、Chromeを数日間殺すことなく、またはmemory_pressureを使用してみることです。
keithyip

回答:


2

OSXでファイルキャッシュメカニズムを無効にする方法がわからないので、これはあなたの質問に直接答えていません。そうは言っても、そもそもそうしたい理由は考えられませんか?ファイルキャッシュが原因であると確信する理由は何ですか?

ファイルキャッシュは、ディスクでより多くのI / Oを行うと大きくなりますが、アプリケーションが何かを実行するためにRAMを必要とするとすぐに消去および縮小されるという点で動的なものです。ファイルキャッシュに保存されているのは、最近使用したファイルのコピーです。その後すぐに再び必要になった場合、I / Oは既にRAMにあるため、はるかに高速になります。これは古いMacOSのRAMキャッシュ機能に似ていますが、ここでの大きな違いは、それが完全に動的であり、システムで未使用のRAMを使用するために成長し、何でもRAMが必要になるとすぐに縮小することです。言い換えれば、それはあなたのメモリをロックしておらず、あなたのMacの速度低下の原因ではないはずです。

つまり、OSXがRAMを管理する方法にはある程度のバランスがあります。物事が「圧縮された」状態に出入りする際に小さな遅延があることを見てきましたが、一般的には、何かが圧縮されると、そうでなければ本当に必要になるまでそこにとどまるという考えです。遅延の最大の原因は、スワップを使用している場合です。これはメモリの最も遅い形式ですが、スクリーンショットではスワップ専用の0バイトも示しています。圧縮とスワッピングは別として、すべてのRAMが使用されているときにこれらすべてをシャッフルする結果としてオーバーヘッドと遅延が発生しても驚かないでしょう。ただし、この状況にあるときにどのアプリケーションがフリーズしているのかという質問の方が多いかもしれません。おそらくあなたのディスクでさえ容量に近づいていて、

一般に、ファイルキャッシュを削除または無効にすることで短期的なメリットが得られる可能性がありますが、ファイルシステムキャッシュのメリットが得られないため、実際にパフォーマンスが低下すると推測されます。


「sudoパージ」は非常に遅かった(数分)ので、問題はディスクキャッシュの管理のパフォーマンスの低さだったと思います。すべてのハングの問題は、新しいメモリ管理でOS Xを更新した後に現れました。それらが発生したとき、それらは7.99GBのメモリ使用量と高い相関がありました。フリーズはシステム全体で発生しました。XcodeとSafariは無反応のままでした。小さなチョークも悪くはありましたが、問題は少なく、別の話でした。参考までに、ディスクの空き容量は80GBです。私のプロジェクトの派生データは6GBです。古いメモリ管理は、それを扱うのに非常に優れていました。小さなチョーク、大きなフリーズはありません。
-keithyip

誰かがテストのためにディスクキャッシュを無効にするコマンドを提供できると便利です。新しいメモリ管理は、古いMacデバイスの冗談(またはビジネス戦略?)です。
-keithyip

@keithyip、私は実際に10.9で内部で行われているものと比較して10.8未満のRAMパフォーマンスを好みました(アップルがスマートカードの処理を中断するため10.10にアップグレードできません)。あちこちで一時停止に気づくのは間違いありませんが、アンロードが有効であると見なされるメモリ内アプリの一部の分析と解放が想像できます。おそらくここのどこかで、最新のAppleコーディングの方向性がObjCのガベージコレクターに依存することから逃れようとしているのはなぜでしょうか?
bjb

@keithyip&bjb-Mavericksではメモリ管理が素晴らしかったことに同意します。実際のRAMに近づくまで、それはひどいものでした。私の解決策は、別の16ギガバイトを置くことだった-私は:(もう存在し得ることは決してないように、私はどのようにヨセミテそれとの取引見当もつかない
鉄人

2011 Macbook proを使用しています。Xcodeには最新のOS Xが必要なので、残念ながらOS Xの更新を続ける必要があります。RAMをアップグレードする価値はないので、ソフトウェアの修正を探しています。
keithyip

0

sudo purge助けにならなかった場合、動的ページャーを無効にしてみてください、例えば

sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

警告:これにより、Mac OS Xのページング機能が完全に無効になるため、RAMが大量にあるが、Macはまだスワップファイルを使用している場合にのみ使用してください。システムにSIP保護がある場合は、まず無効にする必要があります(推奨されません)。

また、から手動でスワップファイルを削除することができ/private/var/vm/、例えば

sudo rm -f /private/var/vm/swapfile*

その後、コンピューターを再起動します。

出典:Mac Virtual Memory –内容、スワップの場所、およびスワップを無効にする方法


メモリスワッピングを完全に無効にするには、などに設定vm_compressorします1

sudo nvram boot-args="vm_compressor=2"

または4デフォルトに設定するには、他の値を参照してください(からvm_pageout.h):

#define VM_PAGER_DEFAULT                0x1 /* Use default pager. */
#define VM_PAGER_COMPRESSOR_NO_SWAP         0x2 /* In-core compressor only. */
#define VM_PAGER_COMPRESSOR_WITH_SWAP           0x4 /* In-core compressor + swap backend. */
#define VM_PAGER_FREEZER_DEFAULT            0x8 /* Freezer backed by default pager.*/
#define VM_PAGER_FREEZER_COMPRESSOR_NO_SWAP     0x10    /* Freezer backed by in-core compressor only i.e. frozen data remain in-core compressed.*/
#define VM_PAGER_FREEZER_COMPRESSOR_WITH_SWAP       0x20    /* Freezer backed by in-core compressor with swap support too.*/

現在の値を確認するには、次を実行します。

sysctl vm.compressor_mode

通常に戻すには、次の方法でブート引数を削除します。

sudo nvram -d boot-args

NVRAMを再起動してリセットします。

参照:Yosemiteのvm_compressor = VM_PAGER_DEFAULTは、物理メモリがいっぱいのときにフリーズを引き起こした

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