본문 바로가기
Spring

[Spring] Exceeded limit on max bytes to buffer : 262144 해결책

by 노력남자 2023. 12. 3.
반응형

문제

 

WebClient로 api 호출하는데 간헐적으로 "org.springframework.core.io.buffer.DataBufferLimitException: Exceeded limit on max bytes to buffer : 262144"가 발생했다.

 

참고, webflux나 netty를 사용 중이면 아래 에러가 추가로 발생한다.

 

io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1

 

에러 로그

 

- Error was received while reading the incoming data. The connection will be closed. io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1

- An exception has been observed post termination, use DEBUG level to see the full stack: io.netty.util.IllegalReferenceCountException: refCnt: 0, decrement: 1

 

원인

 

WebClient의 기본 버퍼 사이즈는 256K다. api 응답 값의 크기가 256K가 넘어서 발생한 에러다.

 

해결책

 

WebClient codec의 maxInMemorySize에 원하는 값을 설정해주면 해결된다.

 

제한을 두고 싶지 않은 경우 -1로 설정하면 된다.

 

터무니 없이 큰 값을 설정할 경우 timeout이나 서버 메모리 부족 문제가 발생할 수 있으니 신중하게 정해야 한다.

 

WebClient.builder()
    .baseUrl("http://localhost:9000")
    .codecs {
        it.defaultCodecs().maxInMemorySize(1024 * 1024 * 10) // 1MB 제한
    }
    .build()
반응형

댓글