【Elasticsearch】メモリ不足に対応する

このブログはAWSの無料枠のみを使用して運用しています。

サーバはEC2のt2.micro、DBはRDSのMySQLです。

したがってメモリ1Gの制限の中でapacheやelasticsearchを動かす必要があります。

AWS EC2 では多様なインスタンスタイプを選択できるので、ターゲットワークロードの要件を満たすようにクラウドリソースをスケールできます。
スポンサーリンク

メモリ不足になるとどうなるか

Elasticsearchを入れたばかりで特に対処していなかった時はよくメモリ不足になってました。

メモリ不足になるとElasticsearchが停止してしまい、Elasticsearchによる検索が使用できなくなってしまいました。

これに対応するために、いろいろ設定を調整しました。

Apacheの設定

プロセス数

preforkによっていくつかapacheのプロセスが起動する設定になっていました。

ひとつのプロセスごとにメモリを消費するため、このプロセス数が多くなり過ぎないように設定を変更しました。

これらの設定を

このようにしました。

スタート時は3プロセス、待機用のプロセスは2〜4プロセス、最大プロセス数は6と、小さめの設定です。

プロセス1つあたり約85MB消費していたので、最大約510MB使用する設定です。

リクエスト数

次にプロセスが捌くリクエスト数を設定しました。

この設定値の数のリクエストを捌くと、プロセスは終了します。

メモリリークを起こしている場合にメモリの消費の総量を抑えることができます。

このようになっていたのを

このように設定し直しました。

設定を反映させるにはapacheの再起動が必要です。

Elasticsearchの設定

Elasticsearchの方も2箇所設定しました。

メモリサイズの固定

/etc/elasticsearch/elasticsearch.yml

という行があるので、先頭の#を外します。

この設定で、起動時にメモリサイズが固定されます。

ヒープサイズ

上の設定で固定されるサイズの指定を行います。

/etc/elasticsearch/elasticsearch.ymlに以下の記述があります。

# Make sure that the ES_HEAP_SIZE environment variable is set to about half the memory

# available on the system and that the owner of the process is allowed to use this limit.

使用できるメモリの半分程度を割り当てれば良さそうです。

設定は /etc/init.d/elasticsearch で行います。

となっている箇所を

のように書き換えました。

こちらも設定を反映させるためにElasticsearchの再起動が必要です。

止まった時のために

プロセス監視

monitを使用してプロセスを監視することができます。

停止している場合に起動させることが可能になります。

## インストール 細かい監視などはzabbixでやるとして、障害発生時の自動復旧などを実施するためにmonitの設定をしました。 ```bash:インストール $ sudo yum -y install monit $ rpm...
Amazon Linuxで構築したサーバでプロセス監視したいなぁと思って調べたところ、( "monit")が簡単そうだったので導入してみた。 ## 初期セットアップ ...

プログラムによる対応

現在このブログで使用しているWordPressのプラグインは「Fantastic Elasticsearch」です。

【WordPress】Fantastic Elasticsearchを導入してみた
前回の記事で「Fantastic ElasticSearch」でkuromojiの使用ができないと紹介しましたが、プラグインの修正をしなくても使用できました。 Fantastic Elast...

このプラグインはElasticsearchが停止している場合、自動的にWordPressの検索を行うようになっています。

Elasticsearchが停止した時のために、設定したTimeout以内にレスポンスがない場合に、別の検索に切り替えるような仕組みにしておくと良いと思います。

まとめ

Elasticsearchがよく止まって困っている方は参考にしてみてください。

スポンサーリンク

シェアする

フォローする