ver4.2以降のkibanaが突然死する問題について

追記

2015/12/17に問題がないバージョン (4.1.4 / 4.2.2 / 4.3.1) がリリースされました!

追記ここまで

2016/07/27 追記

Segmentation faultsでプロセスが落ちる

本番サーバも同様に250MB割当でしばらく運用していた所、頻繁にプロセスが落ちるようになりました。 ログ上にSegmentation faultsとだけ表示されなんの前触れもなく落ちるので困っていました。

当初は自動再起動等で対処していたのですが、原因はメモリ割当量が少ないことにあることが分かり2GBまであげた所全く落ちなくなりました。 リソース監視を見ると500MB程度までは使うことがあるようなので最低500MB-1GBは割当てた方が良いかもしれません。

2016/07/27 追記ここまで

最近ようやくサーバ周りをやらせてもらえるようになってきたのでとても楽しいです。

kibanaのプロセスが突然死する問題

今回はver4.2以降のkibanaのプロセスが突然死する問題についてです。

結論から言うとこの問題は仮想化環境などのメモリ容量が低いサーバにおいてのみ発生する問題のようです。というのもnode *1 は実行環境におけるメモリ上限を検知しておらず、設定値によって決められた値でGCを行うという仕様らしいです。この設定値のdefault値が1.5GB *2 になっているため、1.5GBよりも使えるメモリ容量が少ないサーバ上で動かしているとnodeのGCが起きる前にOOMでプロセスが殺されてしまうことがあるとのことです。

github.com

devcenter.heroku.com

この辺の仕様周りについては軽く調べてみたのですが、あまり情報がなくいまいちよく分かっていません。nodeにの --v8-options にあるそれっぽい値について調べてみても default: 0 になっていました。

$ node --v8-options | grep old_space_size -A 1
  --max_old_space_size (max size of the old space (in Mbytes))
        type: int  default: 0

解決策

解決策としては、実行ファイルのnode呼び出し箇所を $NODE_OPTIONS を渡すように修正して、外から --max-old-space-size を渡してあげるように修正してあげればOKです。なお、この修正は次回のリリースに含まれる予定のようです。

github.com

bin/kibana (for Linux/Mac)

// 24行目
-exec "${NODE}" "${DIR}/src/cli" ${@}
+exec "${NODE}" $NODE_OPTIONS "${DIR}/src/cli" ${@}

bin/kibana.bat (for Windows)

// 21行目
-"%NODE%" "%DIR%\src\cli" %*
+"%NODE%" %NODE_OPTIONS% "%DIR%\src\cli" %*

実行時に--max-old-space-sizeを付与

ちなみに、適切値については議論の対象となっており(まだ始まってませんが)、とりあえず250をdefaultにするPRがあるのでその辺りを目安にすればいいのではないかと思います。

NODE_OPTIONS="--max-old-space-size=250" bin/kibana

https://github.com/elastic/kibana/issues/5595 https://github.com/elastic/kibana/issues/5170#issuecomment-157656028

*1:というよりV8エンジンのa lazy and greedy garbage collectorという機能のようです

*2:nodeのversionによって差異はあるかもしれない