はじめに
どうも!生産技術部で製品の検査工程を担当しているエンジニアです。脱Excel Elastic Stack(docker-compose)でcsvログを分析・可視化 - Elastic Stackとはの続きになります。
対象読者
この記事では、Elastic Stackをそもそも知らない方、これから試そうと思っている方を対象としています。
この記事の内容
大量のファイルをfilebeatからlogstashに転送すると、以下のエラーが出てlogstashが落ちることがあります。その対応方法を紹介します。
java.lang.OutOfMemoryError: Java heap space
Dumping heap to java_pid1.hprof ...
Heap dump file created [3178685347 bytes in 34.188 secs]
warning: thread "[main]>worker11" terminated with exception (report_on_exception is true):
warning: thread "[main]>worker4" terminated with exception (report_on_exception is true):
java.lang.OutOfMemoryError: Java heap space
GitLabに設定ファイル一式を置いておきましたので参考にしてください。
リポジトリはこちら -> elastic-stack
エラーの原因
エラー内容が示す通り、ヒープサイズが足りないことが原因です。
物理メモリのサイズに余裕がある場合の対応方法
jvm.optionsファイルを作成し、以下のヒープサイズを変更します。
どれくらいに設定すればいいのかは、JVM Settingの説明に従い、使用するマシンと相談してください。
## JVM configuration
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g
物理メモリのサイズに余裕がない場合の対応方法
pipeline.batch.sizeもしくはpipeline.workersを変更することで、処理量に制限をかけることが出来ます。
batchサイズのデフォルト値は125、workersはホストPCのCPUの数となっています。
公式のドキュメントはこちらです。
- pipeline.id: filebeat-processing
pipeline.batch.size: 50
最後に
Elasticsearchに関してですが、公式のブログによると、7.7からElasticsearchのヒープ領域使用量が大幅にダウンするそうです。Elasticsearchのメモリでお困りの方はバージョンを見直してみてください。