Elasticsearchが応答しなくなったのを解決
概要
ある時、KibanaからElasticsearchへのクエリを投げようと思ったら、KibanaからElasticsearchにアクセスできなくなっていました。
この問題を解決したので、この時の状況と解決方法をここに書いておきます。
環境
- Elasticsearch 6.2.2
原因
原因を調べる過程でElasticsearchの方では、次のようなログがたくさん記録されていました。
[2018-03-28T00:58:42,808][INFO ][o.e.m.j.JvmGcMonitorService] [cB9XeE8] [gc][1681] overhead, spent collecting in the last
ログからは、JavaのGCが行われていることが分かります。GCは主に使えるメモリが少ない時におこります。
このことから、Elasticsearchの方でメモリが枯渇しておりクエリに対して応答ができなくなっていたようです。
実は、Elasticsearchが応答しなくなることに気づく少し前からElasticsearchのCPU使用率が高くなっていました。
GCが頻繁に行われていたということで、CPUの使用率が高くなっていたのだと考えられます。
解決方法
メモリが枯渇しているということは、たくさんのメモリを割り当てればこの問題は解決できるということです。
なので、JVMの方で割り当てるメモリの量を次のように増やしました。
-Xms1G -Xmx1G
私の環境では、元々-Xms512m -Xmx512m
としていたので、ヒープメモリとして元の倍のメモリを割り当てるようにして、この問題は解決しました。
この値は、それぞれの環境にあった値で書き換える必要があります。
さいごに
Elasticsearchはメモリを非常に使うのは分かっていたのですが、ログの収集場所として使って1ヶ月ちょっとでこのようなことになると思いませんでした。
使い方によってElasticsearchの設定は変えるべきという情報を見ていたので、今回のことからなるべくElasticsearchを状況を見ておいて、何か起きないように見ておくべきだということがよく分かります。