最近Oracle Cloud VPSのFree Tier Always Free枠で遊んでいます.
今日はなんだかとても重くなりましたRAMが1GBあるのですが,9割以上利用していました.swapは未設定.swapを設定してみました.
Oracle Cloudですが大抵の環境でも同じように出来るはずです.
タグ: swap
スワップファイルを作ってお手軽にスワップを増やす
RAMを大量に必要とするプログラムがあって遅くてもいいから一時的にスワップを増やしてやり過ごすことがあります.また,RAMの少ないマシンでディスクの構成をいじるのが面倒なときにもスワップファイルが使えます.ということで今回RAMが2GBでそこそこあるけど偶に使い切ってしまう(主にchromium!)のでスワップファイルを用意してみました.
スワップファイルを作成します.今回は/var/tmp/swap.img
というファイルで2GB用意しました.
$ sudo install -o root -g root -m 0600 /dev/null /var/tmp/swap.img
$ sudo dd if=/dev/zero of=/var/tmp/swap.img bs=1M count=2048
$ sudo mkswap /var/tmp/swap.img
とりあえずスワップファイルをアドホックに有効にします.
$ sudo swapon /var/tmp/swap.img
.スワップが増えています.
$ swapon -s
Filename Type Size Used Priority
/dev/zram0 partition 254688 80024 5
/dev/zram1 partition 254688 80016 5
/dev/zram2 partition 254688 79940 5
/dev/zram3 partition 254688 79928 5
/var/tmp/swap.img file 2097148 0 -1
一時的に必要な場合はこれで良いのですが,恒久的に利用したい場合はこのままでは再起動後には有効になりません./etc/fstab
に設定を書いて起動時に有効になるようにします.
$ sudo vi /etc/fstab
$ grep -i swap.img /etc/fstab
/var/tmp/swap.img none swap sw 0 0
一旦swapoff
でスワップを無効にしてswapon -a
でfatabの設定が有効か試します.swapon -a
はfstab
のスワップの設定を全て有効にします.
$ sudo swapoff /var/tmp/swap.img
$ sudo swapon -a
$ swapon -s
Filename Type Size Used Priority
/dev/zram0 partition 254688 80020 5
/dev/zram1 partition 254688 80016 5
/dev/zram2 partition 254688 79940 5
/dev/zram3 partition 254688 79928 5
/var/tmp/swap.img file 2097148 0 -1
念のため再起動してスワップファイルが有効かも試せばOKです :)
スワップファイルの利用はお手軽ですが,スワップパーティーションに比べると性能は少し落ちるので可能ならスワップパーティーションを利用したほうが良いです.RAMが増設できるならそれが一番です.
環境
$ dpkg-query -W mount
mount 2.27.1-6ubuntu3.6
$ lsb_release -d
Description: Ubuntu 16.04.4 LTS
$ uname -m
aarch64
Btrfsでswap fileが作れないことを知らずに嵌まる
ファイルからswapを設定しようとして失敗しました.
$ fallocate -l 500M test
$ /sbin/mkswap test
mkswap: test: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 500 MiB (524283904 bytes)
no label, UUID=aaf26c11-4653-40d5-b279-faa7d8c8625d
$ sudo chmod 600 test
$ sudo chown 0.0 test
$ ls -l test
-rw------- 1 root root 524288000 10月 3 07:26 test
$ sudo swapon test
swapon: /home/mk/test: swapon failed: 無効な引数です
$ sudo swapon -v /home/mk/test
swapon: /home/mk/test: found signature [pagesize=4096, signature=swap]
swapon: /home/mk/test: pagesize=4096, swapsize=524288000, devsize=524288000
swapon /home/mk/test
swapon: /home/mk/test: swapon failed: 無効な引数です
$ LANG=C sudo swapon -v /home/mk/test
swapon: /home/mk/test: found signature [pagesize=4096, signature=swap]
swapon: /home/mk/test: pagesize=4096, swapsize=524288000, devsize=524288000
swapon /home/mk/test
swapon: /home/mk/test: swapon failed: Invalid argument
検索するとBtrfsでswap fileがサポートされていないとか.知らなかったorz
性能低下するけどloop deviceを使えばいけるよというワークアラウンドが.
A workaround, albeit with poor performance, is to mount a swap file via a loop device.
試してみます.
$ /sbin/losetup -l
$ sudo /sbin/losetup loop0 ./test
$ /sbin/losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO
/dev/loop0 0 0 0 0 /home/mk/test 0
$ sudo swapon -v /dev/loop0
swapon: /dev/loop0: found signature [pagesize=4096, signature=swap]
swapon: /dev/loop0: pagesize=4096, swapsize=536870912, devsize=536870912
swapon /dev/loop0
$ /sbin/swapon -s
Filename Type Size Used Priority
/dev/dm-2 partition 16658428 0 -1
/dev/loop0 partition 524284 0 -2
うまく行きました. もとに戻しておきます.
$ sudo swapoff /dev/loop0
$ sudo /sbin/losetup -d /dev/loop0
$ sudo rm ./test