개요
- kibana가 다운되어 확인해보니, kibana 최초 시작 시 elasticsearch에 요청하는 GET _cat/indices가 실패하고 있었다.
- 에러는 “circuit_breaking_exception”, [parent] Data too large
- 원인은 heap 메모리가 부족이고 elasticsearch에서 사용하는 heap 메모리를 늘려서 해결하였다.
“circuit_breaking_exception”, [parent] Data too large 에러의 원인
- GET _cat/indices 요청의 결과가 elasticsearch에서 지정한 heap 메모리보다 커서 발생하는 에러이다.
- elasticsearch 조회 요청을 작은 단위로 한다면 이 에러는 나지 않는다.
- GET _cat/indices은 elasticsearch에 생성된 모든 인덱스 개요를 조회하는 명령이다.
- kibana에서 최초 실행 시 GET _cat/indices 요청을 하므로 반드시 수정해야했다.
해결방안 1. heap 메모리 사용률 올리기
- 설명
- 기본 사용률은 50%인데 이를 올리면 해결할 수 있다.
- !주의 - 너무 많이 올릴 경우, elasticsearch가 다운된다.
- 명령
1 2 3 4 5 6 7 8 9
# heap 메모리 사용률 50% -> 60% curl -XPUT \ "http://localhost:9200/_cluster/settings" \ -H 'Content-Type: application/json' -d' { "transient" : { "indices.breaker.total.limit" : "60%" } }
해결방안 2. elasticsearch heap 메모리 크기를 올리기
- 설명
- elasticsearch의 jvm heap 메모리를 올린다.
- 기본 값은 1GB
- 방법
- /usr/share/elasticsearch/config/jvm.options.d/ 하위에 custom 파일을 하나 만든다.
- 1GB를 2GB로 올리기 위해 아래와 같이 작성한다.
1 2 3 4
# 최소 2gb 사용 -Xms2g # 최대 2gb 사용 -Xmx2g
- 주의
- heap 메모리는 32GB 미만으로 설정 가능하다.
- heap의 최소값은 물리적 RAM의 50% 이상으로 설정하지 않는 것이 좋다고 한다.
- heap 메모리를 크게 잡으면 캐싱하기에는 유리하나, Garbage collect 시간이 늘어나서 시스템 성능 저하에 원인이 될 수 있다고 한다.
- 참고 - 갓.바.조.아 ElasticSearch Heap 사이즈 설정