현재까지 정확한 원인을 찿지는 못했다.
대략 250의 클라이언트 데몬이 1개 서버데몬으로 접근하고 있는 상태..
부하가 생겨서 Waiting을 하다가 time out 나는 거 말고는 다른 것을 추측할수가 없었다.
그래서 우선 서버쪽에 옵션을 주기로 하였다.
public static void runServer() throws Exception {
SelfSignedCertificate ssc = new SelfSignedCertificate();
SslContext sslCtx = SslContextBuilder.forServer(ssc.certificate(), ssc.privateKey())
.build();
bossGroup = new NioEventLoopGroup(1);
workerGroup = new NioEventLoopGroup();
try {
bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.handler(new LoggingHandler(LogLevel.INFO))
// add Option
.option(ChannelOption.SO_BACKLOG, 1024)
.childOption(ChannelOption.TCP_NODELAY, true)
.childOption(ChannelOption.SO_LINGER, 0)
//.childOption(ChannelOption.SO_KEEPALIVE, true)
.childHandler(new ObjectEchoServerInitializer(sslCtx));
// Bind and start to accept incoming connections.
bootstrap.bind(PORT).sync().channel().closeFuture().sync();
}
finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
- SO_BACKLOG : 동시에 수용할 수 있는 소켓 연결 요청 수
- TCP_NODELAY : 반응속도를 높이기 위해 Nagle 알고리즘을 비활성화
- SO_LINGER : 소켓이 close될 때 신뢰성있는 종료를 위해 4way-handshake가 발생하고
이때 TIME_WAIT로 리소스가 낭비됩니다. 이를 방지하기 위해 0으로 설정.
- SO_KEEPALIVE : 현재 시스템에서는 주기적으로 데이타 전송을 하는 것이라 KEEPALIVE 주석처리하였다.
채팅프로그램이라면 옵션을 주 었을것이다
현재는 서버쪽에만 위 옵션을 추가 하였고, 모니터링 후에 클라이언트쪽도 추가 할 예정이다.
위 옵션 설정은 우아한형제들 블로그를 참고하였다.
https://woowabros.github.io/experience/2020/06/19/chat-app.html
'개발경험 및 메모 > Netty' 카테고리의 다른 글
Netty - handshake timed out 에러 (1) (0) | 2020.06.23 |
---|---|
Netty Error - adjusted frame length exceeds 1048576 (0) | 2020.06.21 |
Netty 로깅 핸들러 (0) | 2020.06.20 |
최근댓글