MeWrite Docs

Elasticsearch: CircuitBreakingException

Elasticsearchのメモリ保護機能(サーキットブレーカー)が発動した際のエラー原因と解決策

概要

Elasticsearchがメモリ不足を防ぐためにリクエストを拒否するサーキットブレーカー機能が発動した際のエラーです。

エラーメッセージ

``` CircuitBreakingException: [parent] Data too large, data for [<http_request>] would be [1234567890/1.1gb], which is larger than the limit of [1073741824/1gb], real usage: [1073741824/1gb], new bytes reserved: [123456789/117mb] ```

原因

  1. クエリ結果が大きすぎる: 大量のドキュメント取得
  2. Aggregationの複雑さ: 高カーディナリティフィールドの集計
  3. ヒープメモリ不足: JVMヒープサイズが小さい
  4. 同時リクエスト過多: 複数の重いクエリが同時実行

解決策

1. クエリを最適化

```json // 悪い例: 全件取得 GET /logs/_search { “size”: 100000 }

// 良い例: scroll APIまたはsearch_after GET /logs/_search?scroll=1m { “size”: 1000, “sort”: ["_doc"] } ```

2. Aggregationを制限

```json // 悪い例: 高カーディナリティのterms { “aggs”: { “users”: { “terms”: { “field”: “user_id”, “size”: 1000000 } } } }

// 良い例: サイズ制限とfilter { “aggs”: { “users”: { “terms”: { “field”: “user_id”, “size”: 100 } } } } ```

3. サーキットブレーカー設定を調整

```yaml

elasticsearch.yml

indices.breaker.total.limit: 70% indices.breaker.request.limit: 40% indices.breaker.fielddata.limit: 30% ```

4. ヒープサイズを増加

```bash

jvm.options

-Xms8g -Xmx8g ```

よくある間違い

  • サーキットブレーカーを無効化
  • ヒープサイズを32GB以上に設定(圧縮ポインタが無効化)
  • fielddataを多用

関連エラー

関連エラー

Elasticsearch の他のエラー

最終更新: 2025-12-10