[JVM] OS 와 튜닝

2021. 12. 16. 17:24 JAVA/JVM

최적의 성능을 내기 위해서는
모든 자바 프로세스가 차지하고 있는 공간의 총합이 머신의 물리 메모리보다 작아야 한다.

-Xms512m -Xmx2048m
실제로 어플리케이션이 처음 시작할 때는 512M를 사용하지만,
2048M를 시스템에 예약한다.
시스템에 예약할때 과도하게 할 경우?
성능상의 이슈는 되지 않음

-XX:MaxDirectMemorySize=N
네이티브 메모리 버퍼의 최대 크기를 지정한다
JNI를 이용해서 네이티브 메모리에 버퍼를 직접할당해서 사용할 수 있음
이러한 기능이 있는 이유는, 소켓 프로그래밍을 예로 들 수 있다. 
allocateDirect()를 이용해서 네이티브 메모리에 버퍼를 직접 할당하지 않고, 
자바 버퍼를 사용할 경우 소켓을 이용해서 다른 머신과 통신할 경우
소켓은 자바 버퍼와 바로 통신하지 못하기 때문에 네이티브 버퍼로 한번 복사가 발생한다. 
때문에 네이티브 버퍼를 바로 사용하는 경우에 비해서 느리다. 

-XX:+UseLargePages
OS에서 기본 사이즈보다 큰 Page를 사용한다. 
OS의 Paging관련한 옵션이다. OS에서의 메모리 할당의 가장 작은 단위는 Page이다. Paging은 OS에서 메모리를 관리하는 기법을 말한다. 여러 Page에 나뉘어서 저장될 경우 Page를 Swap해야 한다. Page Swapping이 자주 발생하면 프로그램이 느려진다. 따라서 보통 Page 크기를 늘리면 어플리케이션의 성능이 높아진다.