Print
카테고리: [ Java ]
조회수: 3742
서버 내에서 memory 사용량을 확인할 때마다 total 값이 변하는 경우가 있습니다. WAS 힙 사이즈 min/max 값을 정해놓았음에도 total heap size가 동적으로 변동되는 경우입니다. java에서 자동으로 New Generation의 사이즈를 동적으로 변경하는 것인데, 잘 사용하면 메모리를 효율적으로 사용할 수 있지만 잘못하면 FullGC 가 계속적으로 발생하여 서비스가 비정상적으로 될 수 있습니다.
 
위 내용의 Java 옵션 명은 -XX:+UseAdaptiveSizePolicy 입니다.
말 그대로 Parallel Collecto를 사용하는 경우 힙 사이즈를(size) 조정하여(adaptive) 사용하는(use) 정책(policy) 입니다.
 
1. default 설정값
 
JDK 1.4 이후 버전부터는 -XX:+UseAdaptiveSizePolicy 옵션의 default 값이 true 입니다.
 
-XX:+UseAdaptiveSizePolicy

Instructs the VM to keep track of some statistics and resize both the young and the old (tenured) generation based on the collected data.

This feature is on by default when the option -XX:+UseParallelGC is used.

Supported by: 1.4.1, 1.5
 
2. 옵션을 끄고싶다면?
 
사이즈 자동 조정 옵션을 끄고 싶다면 -XX:-UseAdaptiveSizePolicy 를 추가해주시면 됩니다.
 
 
3. 옵션 수정이 필요한 경우
 
버그 등의 이유로 New Generation 크기가 바뀌는 경우도 있긴 하지만 서버 메모리 자원이 충분한데도 Full GC가 발생한다면 -XX:+UseAdaptiveSizePolicy 옵션이 켜져있는지 확인을 해보아야 합니다. -XX:-UseAdaptiveSizePolicy 옵션을 이용해서 비활성화해보고 위 현상이 나타나는지 다시한번 확인해 보는 것도 좋습니다.
 
4. 관련 Java 옵션
 
위 옵션은 New Generation 의 크기를 자동 조절하는 옵션입니다. 따라서 -XX:NewSize 값과 -XX:MaxNewSize 값을 동일하게 지정해준다면 New Generation 의 크기가 고정되어 메모리 값이 변하지 않습니다.