GitBucketでerror: unpack failed: error Java heap spaceが発生

Unityプロジェクトの管理にGitを利用しており、管理用にGitBucketサーバを自前で建てて運用しています。
巨大なプロジェクトをPushする際、上記のエラーが発生したため対応しました。

エラーの原因はメモリ不足

Java heap spaceのエラーメッセージからメモリ不足が原因だろうというあたりが付きます。
もともと運用しているサーバが低スペック(メモリ1GB)しか積んでいないので、今回は以下の2つの対応を行いました。

・スワップメモリの拡張
・Java割り当てメモリの変更

スワップメモリの拡張

スワップメモリとは、PCに搭載されているメモリが不足した場合、外部記憶装置(HDDやSSD)をメモリとして利用する機能ですね。
今レンタルしているサーバは1GBしかメモリを積んでいないため、スワップメモリとして4GB確保することにしました。
スワップメモリの拡張方法は、こちらの記事が参考になりました。

2GB → 4GBにスワップメモリ拡張(一度設定をミスって7GB確保してしまった・・・)

Javaオプションの変更

現在利用しているGitBucketはDocker Hubの公式イメージを利用しています
https://hub.docker.com/r/gitbucket/gitbucket

こちらの設定を確認すると、どうやらjavaオプションについての設定は準備されていないようでした。
ただ、公式以外のイメージを利用するのはちょっと怖いかな、ということで、GitBucket公式Dockerファイルの内容を修正し、直接Javaオプションを記述することで対応しました。

https://github.com/gitbucket/gitbucket-docker/blob/master/Dockerfile
上記が公式のDockerファイルなので、一番サイトのjavaコマンドを修正しました

CMD ["sh", "-c", "java -jar /opt/gitbucket.war"]
↓
CMD ["sh", "-c", "java -Xms128M -Xmx4096M -jar /opt/gitbucket.war"]

上記のように修正したDockerファイルをビルドし、使用することでPush時のエラーを解消することができました

以上です

メモリエラーが発生したので一時的にgogsなんかも使ってみましたが、gogsはプルリク作成時にエラーが出てしまい結局利用できず・・・
引き続きGitBucketにお世話になることになりました。

今は安定稼働しているので良いのですが、開発環境の問題に時間を取られるのは好きじゃないので、本当はマネージドサービスを利用するのが一番いいのですけどね・・・(お金が払えないので自前でカバー中)