Azure上のUbuntuにスワップファイルを追加する

gem updateの途中でメモリ不足によりアップデートを継続出来ないことがあったので、Ubuntuにメモリスワップを追加することにしました。Azure上のUbuntuは標準設定では仮想メモリを使用しないので、仮想マシンのサイズをA0とか小さいサイズにしていると、容易にメモリ不足に陥ります。

Microsoft Azure上のLinux仮想マシンにスワップファイルを追加するには/etc/waagent.confの次の3ヶ所をを変更します。

# Format if unformatted. If 'n', resource disk will not be mounted.
ResourceDisk.Format=y

# Create and use swapfile on resource disk.
ResourceDisk.EnableSwap=y

# Size of the swapfile.
ResourceDisk.SwapSizeMB=2048

この後、仮想マシンを再起動すると自動的にスワップ領域が確保されて、仮想メモリが有効になります。sudo swapon -sとかfreeコマンドを叩いて確認してください。

ちなみにResourceDisk.SwapSizeMBは無暗に大きくしないでください。私は最初に4096MBを指定して再起動したのですが、エラーになってしまいスワップ領域が作られませんでした。

waagentは/var/log/waagent.logにログを出力しているので見てみます。

$ more /var/log/waagent.log
2015/06/06 07:39:11 Finished processing ExtensionsConfig.xml
2015/06/06 07:55:02 ERROR:CalledProcessError. Error Code is 1
2015/06/06 07:55:02 ERROR:CalledProcessError. Command string was mkswap /mnt/swapfile
2015/06/06 07:55:02 ERROR:CalledProcessError. Command result was mkswap: error: /mnt/swapfile is mounted; will not make swapspace
2015/06/06 07:55:03 ERROR:CalledProcessError. Error Code is 255
2015/06/06 07:55:03 ERROR:CalledProcessError. Command string was swapon /mnt/swapfile
2015/06/06 07:55:03 ERROR:CalledProcessError. Command result was swapon: /mnt/swapfile: swapon failed: Device or resource busy
2015/06/06 07:55:03 ERROR:ActivateResourceDisk: Failed to activate swap at /mnt/swapfile

mkswapコマンドで失敗したために、以降の処理が全部エラーになってしまったようです。仕方ないので手動でマウント操作を実施します。

sudo chmod 600 /mnt/swapfile
sudo mkswap /mnt/swapfile
sudo swapon /mnt/swapfile

以上の操作で仮想メモリが有効になります。試しに次のコマンドを実行してみます。

$swapon -s
Filename Type Size Used Priority
/mnt/swapfile file 3000208 2068 -1

$ free
total used free shared buffers cached
Mem: 684468 552240 132228 3412 24496 243612
-/+ buffers/cache: 284132 400336
Swap: 3000208 2004 2998204

・・・が、swapsizeが約3GBほどになっています。もしかして・・・というわけで、ResourceDisk.SwapSizeMBを2048に変更して再起動すると、今度は正常にスワップファイルが作られました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です