오라클 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


conf/hbase 파일
JAVA_HEAP_MAX=-Xmx1000m

# check envvars which might override default args
if [ "$HBASE_HEAPSIZE" != "" ]; then
  #echo "run with heapsize $HBASE_HEAPSIZE"
  JAVA_HEAP_MAX="-Xmx""$HBASE_HEAPSIZE""m"
  #echo $JAVA_HEAP_MAX
fi


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


Posted by '김용환'
,