Macとかの雑記帳

swapファイル作成の有効/無効を切り替えたり、作成される場所を変更する方法です。デフォルトのswapの挙動が我慢ならないギークな方は設定を変えてみても良いかもしれません。

検証環境
  • iMac mid 2007 20-inch
  • OSX 10.6.7

swapファイル作成を無効にする

swapを無効にすることでMacのパフォーマンスが向上したり、SSDの場合寿命がのびたりするのかもしれませんが、swapを無効にした状態で実メモリの空き容量が足りなくなると、OSがフリーズしたり、カーネルパニックが発生するので注意してください。

  • swapファイル作成を無効にする
  • #swapを無効にする。
    $ sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist

    #無効にしたらOS再起動。
    $ sudo reboot

    #再起動後、swapファイルの残骸を削除。
    $ sudo rm /var/vm/swapfile*


    #元に戻す場合は下記を実行。
    $ sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.dynamic_pager.plist



    swapファイルの作成場所を変更する

    UnixやLinux系のOSではOSインストール時にswap専用のパーティーションを作成しますが、OSXではシステムと同じ場所にswapファイルを作成して仮想メモリとして使用しています。これを別の場所に変更する方法です。


    swap領域の作成

    通常は、搭載しているメモリと同等か2倍程度の容量を割り当てるのですが、

    何かのプロセスが暴走 → swapを大量に作成 → swap不足でカーネルパニックorフリーズ

    といった流れになると怖いので、最低でも3~4倍の容量を。
    もしくは、思い切って20GBくらい割り当ててもいいと思います。それくらい割り当てておけば、swap不足のカーネルパニックやフリーズは避けられるのではと思います。


    作成する場所ですが、なるべくなら内蔵HDの先頭のパーティションにします。

    clam.png

    ファイルの読み書きの関係でそこが一番適しているからなのですが、本気でやるならOSを再インストールしてでも、先頭にパーティーションを作成した方がいいと思います。


    swapの設定ファイルを編集

    下記コマンドを順に実行し、swap関連のデーモンである「dynamic_pager」というプロセスの設定ファイルを編集します。
  • com.apple.dynamic_pager.plistの編集
  • #編集するcom.apple.dynamic_pager.plistファイルのコピーをとっておく。
    $ cd /System/Library/LaunchDaemons
    $ sudo cp com.apple.dynamic_pager.plist{,_bak}

    #ファイル形式をバイナリからxmlに変更して、編集できる様にする。
    $ sudo plutil -convert xml1 com.apple.dynamic_pager.plist

    #com.apple.dynamic_pager.plistファイルを編集。
    $ sudo nano com.apple.dynamic_pager.plist

    上記のコマンドを実行すると、下の様な内容が表示されます。
  • com.apple.dynamic_pager.plistの編集



  •     EnableTransactions
        
        HopefullyExitsLast
        
        Label
        com.apple.dynamic_pager
        OnDemand
        
        ProgramArguments
        
            /sbin/dynamic_pager
            -F
            /private/var/vm/swapfile
        


    このファイルの太字部分を下記の様に編集します。
  • com.apple.dynamic_pager.plistの編集
  • ProgramArguments

        /bin/bash
        -c
        /bin/wait4path /Volumes/usb_16gb/ && /sbin/dynamic_pager -F /Volumes/usb_16gb/.vm/swapfile
    上の例では、usb_16gbというボリューム内にある、.vmという不可視フォルダにswapファイルが作成される様に設定してあります。赤字部分は環境に合わせて変えてください。

    ちなみにボリュームのルートディレクトリを指定してもswapファイルを作成してくれました。



    ファイルを編集したら、下記を実行して終了です。
  • com.apple.dynamic_pager.plistの編集
  • #ファイル形式をバイナリに戻す。
    $ sudo plutil -convert binary1 com.apple.dynamic_pager.plist

    #OSを再起動。
    $ sudo reboot

    #swapファイルが作成されているか確認。
    $ cd /Volumes/usb_16gb/.vm
    $ ls -l

    #確認後、swapファイルの残骸を削除。
    $ sudo rm /var/vm/swapfile*

    ※注意:私は問題ありませんでしたがOSが起動できなくなる可能性もあります。その場合はシングルユーザーモードから、コピーしたファイルをリネームでもして元にもどしてください。


    参考Link:
    osx - Moving the swapfiles to a dedicated partition in Snow Leopard - Super User

    MacOSX Snow Leopardのswapを止めたりいじったりするメモ (blog@browncat.org)

    スポンサード リンク