AWS
Bazel

ソースからbazelをコンパイルする時に"java.lang.OutOfMemoryError: Java heap space"というエラーが出たときの対処法

背景

AWSの無料利用枠、t2.microでbazelをコンパイルしようとしていました。
apt-getが使えないので、ソースをダウンロードしてきてunzipし、./compileしたところ、出てきたエラーがこれ

java.lang.OutOfMemoryError: Java heap space

Jave heap spaceというエラーで、どうやらJavaを実行する際に確保したメモリが足りないせいで出るらしい。

t2.microのメモリが1GBしかないのが原因らしいが(4GBが推奨と聞きました)、メモリが少なくてもコンパイルできる方法がわかったので書いていく。

対処方法

compile.shを実行してbazelをコンパイルするわけですが、その中からまず
run "${JAVAC}" -...
という部分を探します。

bazelの場合は、compile.shからscripts/bootstrap/compile.shを読んでコンパイルしているので、scripts/bootstrap/compile.shからrun "${JAVAC}" -...を探して、-J-Xms256m -J-Xmx512mというオプションを追加します。より具体的には以下のように編集しました。

-  run "${JAVAC}" -classpath "${classpath}" -sourcepath "${sourcepath}" \
+  run "${JAVAC}" -J-Xms256m -J-Xmx512m -classpath "${classpath}" -sourcepath "${sourcepath}" \

これで僕の場合はコンパイルに成功しました。

参考

https://github.com/bazelbuild/bazel/issues/1341