java heap memory 관련에러

2010.05.11 10:53

조인상 조회 수:20503

원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어

Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea

+++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어

+++++++++++++++++++++++++++++++++++++++++++++++++++++++


에러내용

Unable to alloc heap of requested size, perhaps the maxdata value is too small -
see README.HTML for more information.
Unable to allocate an initial java heap of 268435456 bytes.
**Out of memory, aborting**

*** panic: JVMST016: Cannot allocate memory for initial java heap

에러후 대처

어플리 케이션에서 필요한 초기 java heap 크기는 256MB MX 256MB 입니다.
>위의 에러가 생겼을때 일단 lsattr -El mem0  와 errpt 에러 메세지를 봤을때 메모리 에러는 없었구요
>시스템을 리부팅을 두세번 해도 증상은 같았습니다.
>setenv IBM_JAVA_MMAP_JAVA_HEAP
>setenv LDR_CNTRL MAXDATA
>결국 옵션으로 해결이 되었습니다. 그리고 나중에는 위이 옵션 설정 없이도 잘 실행이 되었습니다.
>
>이상한것이 시스템 기본으로 설정이 되어 있는것은 1GB까지는 java heap 싸이즈를 할당해 해줄수 있는 것으로
>세팅이 되어 있었고 이제까지 문제 없이 잘 작동을 하였는데
>오라클 공유 sherd 값을 변경 200MB에서 300MB로 늘리고 시스템을 재부팅한 이유로 위의 에러 메세지가 떴습니다.
>그래서 다시 오라클 세팅값을 변경을 해주고 다시 시스템을 리부팅을 해도 같은  메세지가 떴습니다.
>
>위와 같은 현상이 일어날수 있는 가능성은 무엇일까요?
>물리적 메모리 문제 . 환경세팅값 문제.. 아님 정보가 꼬여서 그렇게 되었을까요.
>
>그런데 이상한것은 위의 환경세팅값으로 프로그램을 실행후 메모리 슬롯을 한번 뺐다가 끼운후
>시스템을 리부팅하고 나서는 환경 세팅값 없이도 잘 되었던것 같아요....


이에관련된 문서들

1. "java Heap 크기에 대하여" 라는 제목으로 올려져 있는 내용입니다.

32-bit java 의 메모리 limit 은 기본적으로 다음과 같습니다.

java Version    -Xms(Default, Supported max)    -Xmx(Default, Supported max)      o_maxdata (dump -ov)
-------------------------------------------------------------------------------------------------------
    1.1.8                        1 MB, 2 GB - 1                          32 MB, 2 GB - 1                          0x00000000
    1.2.2                        1 MB, 1280 MB                          64 MB, 1280 MB                          0x50000000
    1.3.0                        1 MB, 1 GB                              64 MB, 1 GB                              0x80000000
    1.3.1                        1 MB, 1 GB                              64 MB, 1 GB                              0x80000000

Java 관련 heap 에는 Java heap 과 Native(or system) heap 이 있습니다. Java heap 은 java objects instance 가
사용하는 메모리이고 native heap 은 java 내 thread, JNI 등이 사용합니다.

Java 1.2.2 의 경우는 java heap 이 shared memory segments 에 mmap() 으로 할당되고 native heap 은 process
private segments 에 malloc() 을 통해 할당됩니다.

java 1.3.X 에서도 native heap 은 process private segments 에 malloc() 을 통해 할당됩니다.
Java 1.3.X 경우 java heap 크기 1 GB 미만은 process private segments 에서 malloc() 을 통해서 메모리를
구하고 1 GB 이상은 shared memory segments 에서 mmap()을 통해 메모리를 확보합니다.
Java heap 크기 1 GB 미만의 경우 MAXDATA 범위내에서 java heap 과 native heap 을 나누어 가지게 됩니다.

32-bit process memory 체계에서 활용할 수 있는 shared memory segments 개수는 총 10 개이며 이 것의 메모리 크기는 2.5 GB 입니다.

따라서 java heap 크기를 1 GB 이상으로 하려면 export LDR_CNTRL=MAXDATA=0xn0000000 에서 n 값을 7 이하로 줄여 가야합니다.
      n = 8  : Max java heap size =  1  GB
      n = 4  : Max java heap size = 1.5  GB
      n = 2  : Max java heap size = 2.0  GB
      n = 0  : Max java heap size = 2.5  GB

Java 관련 OutOfMemory 에러의 경우 java heap 이나 native heap 중 어데서 발생하는지가 먼저 밝혀져야 합니다.
Native heap 에서 발생하는 것이라면 단순하게는 MAXDATA 를 크게하면 되지만 1 GB 이상의 Java Heap 을 사용하는 경우라면 java Heap 크기가 반대로 줄어들 수 있으니 주의해야 합니다.

만약 이 이상의 Java Heap memory가 필요하다면 64-bit java 를 사용해야 합니다.


2. 아래 문서 참조
http://www-128.ibm.com/developerworks/eserver/articles/aix4java/

http://www-128.ibm.com/developerworks/eserver/library/es-javaonaix_memory.html
AIX 자바관련 사이트

http://www.redbooks.ibm.com/abstracts/tips0154.html?Open
번호 제목 글쓴이 날짜 조회 수
공지 [공지] 게시자료 열람자유. 불펌금지입니다. 조인상 2010.12.07 108779
211 AIX 시스템상의 core수 확인하기 ischo 2013.01.10 102135
210 AIX에서 하드웨어구성상태 확인방법 조인상 2010.05.11 81497
209 lsof 설치 없이 해당 포트를 열고 있는 프로세스 확인하는 법 ischo 2012.10.17 58250
208 AIX ssh 설치하기 조인상 2010.05.11 51022
207 AIX 6.1에 Apache 설치하기 ischo 2013.02.01 48739
206 AIX에서 시스템의 hostname 변경하기 ischo 2013.04.30 45251
205 AIX에서의 mirrorvg. 디스크 미러링 조인상 2011.07.06 44465
204 AIX에서 TCP wrapper 사용하기 조인상 2010.05.11 44318
203 IBM AIX Version 6.1 Differences Guide file 조인상 2012.07.26 44161
202 AIX 튜닝포인트 - CPU,MEM,VG + FAQ [1] ischo 2012.11.20 41710
201 AIX 환경에서 usb드라이브 사용하기 조인상 2011.09.01 41093
200 AIX 에서의 Comp , Noncomp 의 메모리 사용확인및 튜닝 조인상 2011.01.03 40838
199 시스템 성능의 병목원인 분석 조회 조인상 2010.05.11 40818
198 AIX 환경에서 NFS port번호 range 지정방법 조인상 2010.06.04 37787
197 errpt 4C41C0D0 : JFS2 LOG RECORDS FORCED OVERWRITTEN 조인상 2010.05.11 36404
196 AIX에서 process 당 thead 개수 (maximum number of thread per process) ischo 2013.02.06 35394
195 p시리즈 펌웨어 업데이트 방법 조인상 2012.07.20 35048
194 IBM AIX Version 7.1 Differences Guide file 조인상 2012.07.26 34719
193 etherchannel (teaming : 티밍) 구성방법 [1] file 조인상 2010.05.11 34388
192 AIX 시스템 퍼포먼스를 그래프로 확인 nmon + nmon analyser file 조인상 2010.05.11 33974
서버에 요청 중입니다. 잠시만 기다려 주십시오...