Jenkinsの「OutOfMemoryError : Java heap space」の対応方法・調査まとめ
概要
- JavaのHeapサイズエラーに遭い、いくつか調べて対応方法を調べてみた
- 発生箇所やケースによって対応すべき箇所が違うので、いくつか参考文献含めてまとめていく
実行中のOutOfMemory
対応方法
対応方法: Node・MasterのJavaのメモリ量を増やしてみる。
実行中突然OutOfMemoryが発生する場合は実行メモリが足りないケースの可能性大です。
公式の対応方法Wikiも一読するのをおすすめしておきます。 wiki.jenkins.io
対応詳細
実際に対応するとして、どこを増やすのかについて詳細なメモを残しておきます。NodeやMasterでJavaで実行する際のオプションにメモリオプションを渡しておきます。 具体的には以下のようなオプションを指定するのが良いです。
# Java実行時の引数で最小メモリxmsと最大メモリxmxをMBで指定 java -Xms256m -Xmx256m <Jenkinsの実行パス> # Java実行時の引数で最小メモリxmsと最大メモリxmxをGBでも指定できる java -Xms2g -Xmx2g <Jenkinsの実行パス>
また上記のオプションでは固定メモリになりますが、Docker等で実行している場合はマシンの割合で指定するのが良いでしょう。
# Java実行時の引数で最小メモリと最大メモリをパーセンテージで指定する java -XX:InitialRAMPercentage=50 -XX:MaxRAMPercentage=75 <Jenkinsの実行パス>
場合によってはjenkins.xmlやサービスの実行ファイルで指定する場合もあるので各自の環境でそこは読み替えること。
プラグイン実行時のOutOfMemory
対応方法
対応方法: プラグインのエラーを怪しんでみる、違うプラグインを使う
「Post Build Task」といった外部プラグイン処理が要因でメモリエラーが発生することもあるようです。私の環境では大きすぎるログ・ファイルとPost Build Taskプラグインという条件でメモリエラーが確認できました。(Post Build Taskでは内部でログの文字列比較をしているため、その処理部分が原因のようです)
メモリエラーが発生した場合、そのログが出ている箇所を確認し、プラグインが要因かもしれないと目星をつけることが可能かもしれません。ただしOutOfMemoryが発生している場合は突然処理が落ちるため、ログがある場合のない場合がありました。何度か実行してログを取ってみるのが良いでしょう。
参考リンク
「BERT/GPT-3/DALL-E 自然言語処理・画像処理・音声処理 人工知能プログラミング実践入門」を読んだ
概要
以前が積んでいたこの本を読んでみた。内容としては、自然言語処理、画像処理、音声処理や音声言語処理の話題になっているAIをモデルから動かしてみようという感じでした。 環境としてはローカルのPythonだったり、GoogleColaboだったり。そのあたりの手順解説も載っていて親切さを感じた。 https://www.amazon.co.jp/gp/product/B09DPC4KG7/ref=dbs_a_def_rwt_hsch_vapi_tkin_p1_i3
おすすめなところ
- (AI系のモデルは進化が進んでいるので古いものにはなるが) 2020年ごろの最新AIモデルをハンズオン形式で色々触れるのは良い
- ネットに落ちている色々なハンズオン記事よりも丁寧な解説になるのでそこはなかなか良い
- 10分で2020年ごろ話題になったものをとりあえず動かしたい!という人にはもってこいのものだと思った
おすすめしないところ
- ネットに落ちている代表的なモデルを動かすところにフォーカスなので、理論やもういっぽ先の活用は考えられてない。ご注意ください。
- プログラミング未経験の人にはちょっとわかりずらいかも(そのあたりがターゲットなのか微妙ですが)
感想
「あーこんなモデル聞いたことあったけど、とりあえず遊んで見る?」という感じでラフに色々触るにはとても良いです。著者の人がまた最新のAIモデルの本も出されているようでそちらも気になりました。また自然言語処理には疎いので自然言語処理のモデルやLLMの話題はためになりました。気になるところ読むだけなら数時間でできるので買ってみて週末の遊びにもってこいの1冊だと思います。
https://www.amazon.co.jp/gp/product/B0C8YJRGW8/ref=dbs_a_def_rwt_hsch_vapi_tkin_p1_i0