18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VagrantでUbuntuにSwapを4GBほど追加したい

Posted at

複数のScalaのプロジェクトを、Ubuntu上で同時に起動するような開発していると、メモリが512MB程度では到底足りず、ScalaのビルドツールであるsbtのプロセスがOOM Killerに殺されてしまいがちです。

VagrantでVMのメモリを4GBくらい追加してもいいですが、そうなるとフルカスタムのMacBook Proがないと開発に参加できない…といった状況になってしまい、開発のハードルが上がってしまいます。

そこで、VMにメモリを追加するのではなく、swap領域を増やしてScalaのプロセスが終了されないように、VagrantでUbuntuをプロビジョンするようにします。

まず、swapを増やすためのプロビジョンスクリプトを作成します。このスクリプトは「Vagrant Quickstart – jeqo's blog」の記事のものをほぼそのまま使います。

increase_swap.sh
#!/bin/sh

# size of swapfile
swapsize=4G

# does the swap file already exist?
grep -q "swapfile" /etc/fstab

# if not then create it
if [ $? -ne 0 ]; then
  echo 'swapfile not found. Adding swapfile.'
  fallocate -l ${swapsize} /swapfile
  chmod 600 /swapfile
  mkswap /swapfile
  swapon /swapfile
  echo '/swapfile none swap defaults 0 0' >> /etc/fstab
else
  echo 'swapfile found. No changes made.'
fi

# output results to terminal
df -h
cat /proc/swaps
cat /proc/meminfo | grep Swap

Ubuntuにswapを追加する方法は「Linux - Swap領域が足りないときに、ささっと追加する - Qiita」で紹介されているとおり、ddコマンドでスワップファイルを作成し、mkswapswaponでスワップ領域を増やすことができます。しかし、Ubuntuが再起動してしまうと、スワップ領域が無くなってしまいます。起動するたびに、この手順を踏むのは面倒です。再起動してもスワップ領域が無くならないようにするには、/etc/fstab/swapfile none swap defaults 0 0などを書いておきます。上のスクリプトincrease_swap.shは、スワップ領域を作成するだけでなく、/etc/fstabにスワップ領域の設定を追記することまでやってくれます。

次に、Vagrantfileに下記の行を加えます。これにより、初回のvagrant up時などプロビジョニングは実行されるときにswap領域が追加されるようになります。

Vagrantfile
  config.vm.provision "shell", path: "increase_swap.sh"

すでにvagrant up済みのVMに対して、swapを追加するときは、Vagrantfileを修正後vagrant provisionすることで適用されるようになります。

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?