오라클 java 문서(http://www.oracle.com/technetwork/java/ergo5-140223.html) 에 따르면,
jvm을 server class로 실행하면 초기 heap size는 메모리의 1/64 이고, 최대 heap size는 1/4까지 늘어난다고 적혀 있다.
initial heap size of 1/64 of physical memory up to 1Gbyte
maximum heap size of ¼ of physical memory up to 1Gbyte
그렇다면 리눅스에서 java 디폴트 머신의 메모리 한계를 알려면 다음의 명령어를 이용하면 된다.
$ java -XX:+PrintFlagsFinal -version 2>&1 | grep -i -E 'heapsize|permsize|version'
uintx AdaptivePermSizeWeight = 20 {product}
uintx ErgoHeapSizeLimit = 0 {product}
uintx InitialHeapSize := 62800640 {product}
uintx LargePageHeapSizeThreshold = 134217728 {product}
uintx MaxHeapSize := 1006632960 {product}
uintx MaxPermSize = 85983232 {pd product}
uintx PermSize = 21757952 {pd product}
전체 메모리가 4G인 리눅스 머신에서 initial heap size 는 60 m, max heap size는 1G정도 나온다.
perm size는 20M이고, max perm size 는 82M가 된다.
일반적인 오픈 소스는 java memory설정을 디폴트로 하는 경우가 많으나, 운영을 필요로 하는 오픈소스의 경우는 java 메모리 설정을 점차적으로 많이 지정하는 분위기로 가는 듯 하다.
아마도 사용자들이 디폴트로 사용하면서 이슈가 생기니 그러는 듯 하다. (디폴트는 오히려 좋은 것일수도 있다.)
hbase의 경우 conf/hbase-env.sh , bin/hbase 파일에 두어 주석을 달았지만 명시적으로 쓸 수 있도록 권고 하고 있다. hbase의 경우는 디폴트로 1G를 default메모리로 할당하고 있다.
conf/hbase-env.sh 파일
# The maximum amount of heap to use, in MB. Default is 1000.
# export HBASE_HEAPSIZE=1000
Zookeeper에 최근에 client와 server class에 따라서 java 디폴트 메모리 설정을 바꾸려는 시도가 진행중이다.
3.4.6에 포함될 예정이다..
https://issues.apache.org/jira/browse/ZOOKEEPER-1670
https://issues.apache.org/jira/secure/attachment/12577655/ZOOKEEPER-1670.patch
+ +# default heap for zookeeper server +ZK_SERVER_HEAP="${ZK_SERVER_HEAP:-1000}" +export SERVER_JVMFLAGS="-Xmx${ZK_SERVER_HEAP}m $SERVER_JVMFLAGS" + +# default heap for zookeeper client +ZK_CLIENT_HEAP="${ZK_CLIENT_HEAP:-256}"
+export CLIENT_JVMFLAGS="-Xmx${ZK_CLIENT_HEAP}m $CLIENT_JVMFLAGS"
* 참고
http://stackoverflow.com/questions/3428251/is-there-a-default-xmx-setting-for-java-1-5
http://www.oracle.com/technetwork/java/ergo5-140223.html
https://issues.apache.org/jira/browse/ZOOKEEPER-1670
'java core' 카테고리의 다른 글
Selector.open() 호출시 NPE 발생 - jdk 7에서 해결 (0) | 2013.08.07 |
---|---|
GC 로그 로테이션 (GC Log Rotation) (0) | 2013.07.02 |
Google Collection Package & Google Guava (0) | 2013.03.14 |
SofreReference, WeakReference, PhantomReference (0) | 2012.03.29 |
String의 codePointCount 메서드 (0) | 2012.03.13 |