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 108725
31 AIX 메모리 사용량 측정. sar -P All 2 5 // lsps -a Unix 조인상 2010.05.11 29807
30 IBM p시리즈 ASM/시리얼접속방법 조인상 2010.07.01 30807
29 p시리즈 일반적인 점검방법 조인상 2010.11.17 30955
28 HMC 관련 교육자료 [4] file 조인상 2010.05.11 31026
27 FIN_WAIT_2 상태에 대하여 조인상 2010.05.11 31066
26 IBM xSeries 펌웨어 업데이트를 위한 BoMC(Bootable Media Center) 사용법 file 조인상 2010.06.29 31419
25 OP 판넬의 주황색 경고등 끄기 조인상 2010.05.11 32325
24 [정욱이네] IBM AIX java 설치 하기. 조인상 2010.05.11 32483
23 RAID 1+0 과 0+1의 차이점 file 조인상 2010.05.11 32645
22 AIX 유니코드 한글 표시 조인상 2010.05.11 33045
21 디버그툴 dbx 사용법 file 조인상 2012.07.26 33910
20 AIX 시스템 퍼포먼스를 그래프로 확인 nmon + nmon analyser file 조인상 2010.05.11 33974
19 etherchannel (teaming : 티밍) 구성방법 [1] file 조인상 2010.05.11 34388
18 IBM AIX Version 7.1 Differences Guide file 조인상 2012.07.26 34715
17 p시리즈 펌웨어 업데이트 방법 조인상 2012.07.20 35041
16 AIX에서 process 당 thead 개수 (maximum number of thread per process) ischo 2013.02.06 35387
15 errpt 4C41C0D0 : JFS2 LOG RECORDS FORCED OVERWRITTEN 조인상 2010.05.11 36400
14 AIX 환경에서 NFS port번호 range 지정방법 조인상 2010.06.04 37787
13 시스템 성능의 병목원인 분석 조회 조인상 2010.05.11 40816
12 AIX 에서의 Comp , Noncomp 의 메모리 사용확인및 튜닝 조인상 2011.01.03 40835
서버에 요청 중입니다. 잠시만 기다려 주십시오...