Netty를 통해 JVM 옵션을 여러가지 설정 할 수 있지만 핵심이라고 생각하는 4가지만 정리하였다.



1) 메모리 leak 검출


java -Dio.netty.leakDetection.level=advanced ...


 DISABLED

  메모리 릭 감지를 비활성화

 SIMPLE

  디폴트 설정이며 버퍼의 1%의 누출이 있는지 나타낸다.

 ADVANCED

  누출된 버퍼의 액세스 위치를 나타낸다.

 PARANOID

  모든 단일 버퍼라는 점을 제외하면 advanced와 동일. 

  leak 검출 시 빌드가 실패 될 수 있다.







2)  DirectBuffer 선호 여부 


java -Dio.netty.noPreferDirect=true ...


noPreferDirect 옵션은 netty는 ByteBufAllocator.buffer(..) 메소드가 호출 될 때, direct buffer는 선호되지 않는다고 개발자에게 알려준다. 그렇다고 해서 . ByteBufAllocator.directBuffer(...)가 직접적으로 directBuffer를 호출할 때 Direct Buffer가 사용되지 않는 것은 아니다. 여전히 사용 중이다.






3) ByteBuf allocator의 풀링 타입


java -Dio.netty.allocator.type=unpooled ...


풀링 여부에는 pooled / unpooled 가 존재한다. 여기서 말하는 풀은 DBCP의 Connection Pool  혹은 Thread Excutor의 Thread Pool과 같은 맥락이다.


즉, ByteBuf의 레퍼런스 카운트와 같은 자원관리를 Pool이 관리할 것이냐 아니면 unpooled 함으로 써 ByteBufAllocator에서 직접 얻어 올 것이냐로 나뉠 수 있다.






4) sun.misc.Unsafe의 사용을 중지하도록 허용


java -Dio.netty.tryUnsafe=false ...


Java 9 이상에서 sun.misc.unsafe 기능이 활성화 됨에 따라 NETTY에서 WARN 및 ERROR를 발생할 만한 요소가 있는데, unsafe 옵션을 비활성화 함으로써 사용을 중지 할 수 있다.


https://github.com/netty/netty/issues/272












+ Recent posts