2013-06-26 2 views
2

Netty-4 CR6의 최신 빌드로 응용 프로그램을 테스트하고 있습니다. 응용 프로그램의 서버 쪽 끝에 약 200 요청/초의로드시 다음과 같은 오류가 발생합니다.Netty-4.0.0.CR6이 OutOfMemoryError를 throw합니다.

io.netty.handler.codec.DecoderException: java.lang.OutOfMemoryError: Direct buffer memory 
     at io.netty.handler.codec.ReplayingDecoder.callDecode(ReplayingDecoder.java:393) 
     at io.netty.handler.codec.ByteToMessageDecoder.messageReceived(ByteToMessageDecoder.java:129) 
     at io.netty.channel.DefaultChannelHandlerContext.invokeMessageReceived(DefaultChannelHandlerContext.java:379) 
     at io.netty.channel.DefaultChannelHandlerContext.fireMessageReceived(DefaultChannelHandlerContext.java:364) 
     at io.netty.channel.DefaultChannelHandlerContext.fireMessageReceived(DefaultChannelHandlerContext.java:347) 
     at io.netty.channel.DefaultChannelPipeline.fireMessageReceived(DefaultChannelPipeline.java:780) 
     at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:92) 
     at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:489) 
     at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:464) 
     at io.netty.channel.nio.NioEventLoop.run(NioEventL 

파일 전송 응용 프로그램입니다. Netty-4 CR6 jar로 클라이언트 및 서버 빌드를 사용하고 있습니다. 모든 요청에서 클라이언트는 WebSocket 연결을 만들고 약 850KB의 파일을 전송 한 다음 CloseWebSocketFrame을 보내서 연결을 닫습니다.

+0

그리고 질문은? –

+0

안녕하세요, 서버 끝 부분에서이 예외가 발생하므로 많은 요청이 처리되지 않습니다. 전체 히트의 거의 절반이 실패했습니다. – GauravTheGeek

+0

아마도'-XX : MaxDirectMemorySize' 옵션을 사용하여 최대 다이렉트 메모리를 늘려야할까요? 재생산을위한보다 상세한 단계가 인정 될 것입니다. – trustin

답변

0

다음을보십시오 : bug. 당신은 그것에 뛰어들 수있었습니다. 여기에있는 옵션은
입니다. 1. 업스트림 처리기에서 msgs.releaseAll()을 사용하십시오.
2. 소모 핸들러로 io.netty.channel.SimpleChannelInboundHandler 클래스를 사용하십시오. 그렇다면 당신은 내부적으로 netty에 의해 당신을 돌보아주기 때문에 releaseAll 논리를 사용할 필요가 없습니다.

+0

안녕하세요, Jetty-8 Websocket API를 사용하여 동일한 시나리오를 시도했지만 나에게 적합합니다. – GauravTheGeek

+0

@Trustin 예 해당 JVM 옵션을 제공하고 값을 256M로 설정했지만 동일한 문제가 발생했습니다. – GauravTheGeek

관련 문제