Mac OS X dynamic_pager の停止

今使っている MacBookは 4GB のメモリが入っているので、普通に?使っている時は、特に問題を感じませんが、Parallels などで仮想マシンを起動するとやはり、スワップします。それ自体はしょうがないのですが、その後、アプリケーションを終了させても、動作のモッサリ感が戻らない場合があります。もちろん再起動すれば元に戻るんですけど。

Google先生に聞いてみると、どうもメモリーから追い出された(スワップされた)プロセスは、メモリを食っているプロセスを終了させても実メモリに戻ってこないらしい。これじゃ、再起動しないでプロセスがスワップアウトされていくとモッサリするはずですね。

Mac OS X の スワップファイルの管理は dynamic_pager が行なっていますが、その設定についてはどうするの?と思ったらちゃんと、ターミナルから man dynamic_pager と入力すれば、設定の説明が出てきますね。色々パラメータ設定できるじゃありませんか。

管理ファイルは

/システム/ライブラリ/LaunchDaemons/com.apple.dynamic_peger.plist

です。

Xcode がインストールしてあれば /Developer/Applications/Utilities/Property List Editor を起動する事で簡単に上記ファイルを編集するこができます(もちろんテキストエディタで直接編集も可です)

Property List Editor を起動して、File -> Open から上記 plist ファイルを選択します。Xcode4 で統合されました。Xcode4 から上記 plist ファイルをオープンして書き換えてください。

OnDemand のチェックを外せば、swapファイルは作成されなくなります(というか dynamic_pager が起動しません)。また、ProgramAguments には、Item2 にスワップファイルの作成場所が設定できます。-S filesize(in byte) を設定すれば、スワップファイルの大きさも指定可能です。
(Item 0 を選択して右の “+” ボタンを押下すれば Item が増えるので -S 64000000 と設定すれば swap ファイルを 64MB に制限することができます)
(注: -S と 64000000 は別の Item として定義します)

OnDemand のチェックを外し、再起動後 /private/var/vm/swapfile* を消して運用していますが今のところ問題ありません。

ただし、メモリのフラグメンテーションまでは抑制はできません。それには専用のソフトを使うか再起動しかありませんね。
また、仮想メモリが必要な巨大メモリを使うアプリでは swap ファイルは必要ですので、パラメータの設定は用途にあわせて設定してください。

One Response to “Mac OS X dynamic_pager の停止”

  1. Jaundalynn より:

    That’s more than sesnible! That’s a great post!

Leave a Reply