현재까지 정확한 원인을 찿지는 못했다.

대략 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
         


  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기