2015-06-12 39 views
10

Tôi mở kibana và thực hiện tìm kiếm và tôi gặp phải lỗi khi phân đoạn không thành công. Tôi nhìn trong file elasticsearch.log và tôi thấy lỗi này:Dữ liệu FIELDDATA quá lớn

org.elasticsearch.common.breaker.CircuitBreakingException: [FIELDDATA] Data too large, data for [@timestamp] would be larger than limit of [622775500/593.9mb] 

Có cách nào để tăng rằng giới hạn của 593.9mb?

+1

Bạn cũng có thể thấy lỗi này trực tiếp trong Chrome bằng cách mở Công cụ nhà phát triển, chọn tab Mạng, sau đó chạy lại truy vấn tìm kiếm. Thông báo lỗi này sẽ có sẵn trong trường 'Response'?' Của sự kiện ''. Điều này sẽ giúp ích nếu bạn không có quyền truy cập trực tiếp vào nhật ký máy chủ. – anothermh

Trả lời

15

Bạn có thể thử để tăng giới hạn fielddata circuit breaker-75% (mặc định là 60%) trong elasticsearch.yml tập tin cấu hình của bạn và khởi động lại cluster của bạn:

indices.breaker.fielddata.limit: 75% 

Hoặc nếu bạn muốn không khởi động lại cluster của bạn, bạn có thể thay đổi cài đặt tự động sử dụng:

curl -XPUT localhost:9200/_cluster/settings -d '{ 
    "persistent" : { 
    "indices.breaker.fielddata.limit" : "40%" 
    } 
}' 

Hãy thử.

+0

Điều này ngay lập tức giải quyết được sự cố mà tôi đang gặp phải và sẽ hoạt động cho đến khi tôi có thể tăng bộ nhớ khả dụng. – anothermh

+0

Làm thế nào để bạn làm điều này cho elasticsearch 5.x? – Amar

+0

Tôi đã thử điều này cho _cluster và tên cụm của tôi nhưng khi tôi làm một nhận được trên _cluster/cài đặt nó dường như không áp dụng. –

1

Tôi cũng gặp vấn đề này. Sau đó, tôi kiểm tra bộ nhớ fielddata.

sử dụng dưới đây yêu cầu:

`GET /_stats/fielddata?fields=*` 

màn hình hiển thị đầu ra:

"logstash-2016.04.02": { 
    "primaries": { 
    "fielddata": { 
     "memory_size_in_bytes": 53009116, 
     "evictions": 0, 
     "fields": { 

     } 
    } 
    }, 
    "total": { 
    "fielddata": { 
     "memory_size_in_bytes": 53009116, 
     "evictions": 0, 
     "fields": { 

     } 
    } 
    } 
}, 
"logstash-2016.04.29": { 
    "primaries": { 
    "fielddata": { 
     "memory_size_in_bytes":0, 
     "evictions": 0, 
     "fields": { 

     } 
    } 
    }, 
    "total": { 
    "fielddata": { 
     "memory_size_in_bytes":0, 
     "evictions": 0, 
     "fields": { 

     } 
    } 
    } 
}, 

bạn có thể thấy chỉ số của tôi tên datetime cơ sở, và trục xuất là tất cả 0. Ngoài ra, 2016/04/02 nhớ là 53.009.116, nhưng 2016.04.29 cũng là 0.

vì vậy tôi có thể làm cho kết luận, các dữ liệu cũ có chiếm tất cả các bộ nhớ, do đó dữ liệu mới không thể sử dụng nó, và sau đó khi tôi làm agg truy vấn dữ liệu mới, nó nâng cao CircuitBreakingException

bạn có thể đặt config/elasticsearch. yml

indices.fielddata.cache.size: 20% 

nó làm cho es có thể đuổi dữ liệu khi đạt tới giới hạn bộ nhớ.

nhưng có thể là giải pháp thực sự bạn nên thêm bộ nhớ trong furture.and theo dõi việc sử dụng bộ nhớ fielddata là thói quen tốt.

chi tiết hơn: https://www.elastic.co/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html

0

Tôi nghĩ rằng điều quan trọng là phải hiểu tại sao điều này đang xảy ra ở nơi đầu tiên.

Trong trường hợp của tôi, tôi đã gặp lỗi này vì tôi đang chạy tập hợp trên các trường "analyzed". Trong trường hợp bạn thực sự cần trường chuỗi của mình là analyzed, bạn nên xem xét sử dụng multifields và làm cho nó analyzed cho các tìm kiếm và not_analyzed cho tổng hợp.

0

Tôi đã gặp sự cố này vào ngày khác. Ngoài việc kiểm tra bộ nhớ fielddata, tôi cũng cân nhắc kiểm tra bộ nhớ JVM và OS. Trong trường hợp của tôi, quản trị viên đã quên sửa đổi ES_HEAP_SIZE và để nó ở 1gig.

Các vấn đề liên quan