コンパイルエラー:メモリ・スワップ領域

Vagrantでtherubyracerのgemをインストールしようとしたらcannot allocate memoryというコンパイルエラーが出たので対処しました。

実行環境

  • vagrant 1.7.2
  • virtualbox 4.3.28
  • guestOS ubuntu 14.04 memory:1024MB,HDD:40GB
  • ruby 2.1.1

今回はスワップファイルを作る事で問題を解決します。

コンパイルができない原因はメモリで作業領域の不足からきています。 解決する方法は2パターンあってメモリを割り当てを増やすかスワップ領域をつくるかです。

どちらにするか迷いましたがストレージの容量が余っていたのでスワップファイルを作る事にしました。

まずはスワップファイルの容量を確認

$ free -m
             total       used       free     shared    buffers     cached
Mem:           993        894         99          0          7         27
-/+ buffers/cache:        858        135
Swap:            0          0          0

スワップファイルが作られていないので0になっていました。

次はスワップファイルに割り当てる領域の作成しましょう。

$ sudo fallocate -l 4G /etc/swapfile
$ ls -lh /etc/swapfile
-rw-r--r-- 1 root root 4.0G Jun  4 08:30 /etc/swapfile

ちゃんと/etcの下に作られています。

先ほど作ったファイルをスワップファイルに指定します。

$ sudo mkswap /etc/swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=03657f48-fa60-4f66-b108-c12a7b029145

ここで終わりではありません。スワップファイルの確認をしてみるとまだ0の状態です。

$ free -m
             total       used       free     shared    buffers     cached
Mem:           993        899         94          0          8         30
-/+ buffers/cache:        860        133
Swap:            0          0          0

最後にスワップファイルを有効化します

$ sudo swapon /etc/swapfile
$ free -m
             total       used       free     shared    buffers     cached
Mem:           993        900         93          0          8         30
-/+ buffers/cache:        861        132
Swap:         4095          0       4095

4GB割り当てられています。

$ gem install therubyracer
Building native extensions.  This could take a while...
Successfully installed therubyracer-0.12.2
1 gem installed

無事にインストールできました。


All Rights Reserved