[DEV] 기록

[RestTemplate] "[circuit_breaking_exception][parent]" Data too large, data for "[<http_request>]" would be error

꾸준함. 2021. 2. 21. 17:35

 

개요

현재 프로젝트에서 RestTemplate을 통해 elasticsearch document들을 받아오는데 제목처럼 아래와 같은 에러가 발생했습니다.

"[circuit_breaking_exception][parent]" Data too large, data for "[<http_request>]" would be error

 

문제점

저 같은 경우 한 번에 너무 많은 document들을 받아오기 때문에 문제가 발생하는 것이었습니다.

하지만, github 이슈를 확인해보면 버전 변경에 따라 위와 같은 문제가 발생하는 것 같기도 합니다.

이슈를 올린 개발자분은 circuit breaker memory를 증가시키거나 비활성화시키는 방법으로 문제를 해결했지만 stackoverflow에 이와 상충되는 답변이 있어 아래에 정리해보고자 합니다.

 

해결방법

1. 이슈에서의 해결방법과 달리 circuit breaker memory를 비활성화해서는 안됩니다. 왜냐하면 이는 Out of Memory 에러를 야기할 수 있고 이에 따라 elasticsearch에 문제가 발생할 수 있습니다.

 

2. circuit breaker memory 퍼센티지를 동적으로 증가시키는 일시적인 해결방법도 있지만 결국에는 증가시킨 퍼센티지도 꽉 채울 수 있기 때문에 추천하는 방법은 아닙니다.

 

3. JVM 힙 영역을 디폴트 값인 1GB에서 증가시키는 방법이 있습니다.

* 주의: ES에서 권고한 대로 Heap 영역을 32GB 이상 설정하지 마시길 바랍니다.

또한, 전체 메모리의 50% 이하로 설정하시길 권장드립니다. (출처: brunch.co.kr/@alden/35)

 

4. 마지막으로, 제가 해결한 간단한 방법입니다. 앞서 개요에서 말씀드린 대로 제가 composite aggregation을 통해 한번에 5000개씩 받아오며 페이징을 진행하고 있었는데 사수님의 조언대로 1000개씩 받아오는 것으로 줄이며 문제를 해결했습니다. 물론, 이렇게 할 경우 api 호출 횟수가 증가하여 성능은 소폭 하락하겠지만 에러가 발생하는 것보다는 성능을 희생시키더라도 정상적으로 서비스가 운용되는 것이 중요하기 때문에 해당 방법을 사용했습니다.

 

[출처]

stackoverflow.com/questions/61870751/circuit-breaking-exception-parent-data-too-large-data-for-http-request

반응형