본문 바로가기

elasticsearch

[elasticsearch] [circuit_breaking_exception] [parent] Data too large, data for [<http_request>] 오류 해결법

반응형

 

엘라스틱 서치를 운영하다보면 가끔 아래와 같은 메시지를 마주할 때가 있다. 

 

[circuit_breaking_exception] [parent] Data too large, data for [<http_request>] would be [986822004/941.1mb], which is larger than the limit of [986061209/940.3mb], real usage: [986820872/941.1mb], new bytes reserved: [1132/1.1kb], usages [request=0/0b, fielddata=28905/28.2kb, in_flight_requests=1132/1.1kb, accounting=11596758/11mb], with { bytes_wanted=986822004 & bytes_limit=986061209 & durability="PERMANENT" }: Check the Elasticsearch Monitoring cluster network connection or the load level of the nodes.

 

한번에 너무 많은 document들을 처리할 때 위와 같은 메세지가 종종 발생한다고 한다. circuit breaker 즉 document 들이 너무 많은 메모리를 점유해서 out of memory를 발생시키지 않기 위해 엘라스틱 서치에서 만들어놓은 안전 장치인듯하다. 위 문제를 해결하는 방법은 인터넷을 검색해보니 아래와 같다.

 

 

조치 방법

1. 힙사이즈 올리기

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
 
-Xms8g
-Xmx8g

기존 1GB이던 힙사이즈를 8GB로 올렸다. (4GB에서도 에러나서 더 올려줬다)

 

참고로 xms는 JVM 최소 힙메모리 사이즈, xmx는 최대 힙 메모리 사이즈다. 

xms 사이즈로 사용하다가 필요에 따라서 xmx 만큼 사용한다. 

 

 

2. 임계치 올리기

$ curl -u 유저:'패스워드' -H 'Content-Type: application/json' -XPUT "노드:9200/_cluster/settings" -d '
{
"transient" : {
"indices.breaker.total.limit" : "80%"
}
}'

 

앞서 설명한 circuit breaker가 동작시키는데 필요한 임계치를 올리는 방법도 존재한다.

엘라스틱 서치에서는 메모리 사용량이 특정 임계 값에 도달할 경우 쿼리 실행을 거부하는데, 기본값인 70%를 80%로 늘려준다.
이렇게 설정하면 JVM 힙 메모리 사용량이 80프로를 넘지 않으면 쿼리 수행이 가능하다. 


반응형