Java

out of memory 와 Runtime 객체 사이의 관계

_침묵_ 2007. 5. 9. 22:24

출처 :http://www.javaservice.net/~java/bbs/read.cgi?m=qna&b=qna2&c=r_p&n=1015292866

제목 : out of memory 와 Runtime 객체 사이의 관계....
글쓴이: pearljeong(guest) 2002/03/01 00:42:36 조회수:490 줄수:13
톰캣 실행에서 out of memory 문제로 고생하고 있네요..

java -Xms128m -Xmx128m

와 같이 메모리 설정을 하고 톰캣을 실행하면 좀더 오래 버티는 것을 확인 했는데요,
문제는 여기서 났습니다. 메모리 사이즈를 디폴트로 쓰지 않고 넉넉히 잡아서 실행을
하면 그동안 고생했던, out of memory 문제는 나지 않는데, 전혀 생각지도 못한 부분에서
문제가 나더군요.
Runtime 객체를 사용해서 시스템 커맨드를 사용한 부분에서 IOException 을 내면서
예외 상황이 나는군요.
처음에는 런타임으로 실행하는 부분이 왜 에러가 나는지 감을 못 잡았었는데,
알고 보니 메모리 사이즈 키운것이 문제가 됐드라구요.
혹시 저와 같은 문제를 경험 하신 분 계시면 도움말 주셨으면 하네요.
제목 : Re: out of memory 와 Runtime 객체 사이의 관계....
글쓴이: 이원영(javaservice) 2002/03/05 10:47:46 조회수:2127 줄수:17
Runtime.exec() 를 실행하면, 순간적으로 java 의 부모프로세스의 메모리 영역이 
복사되어 fork()를 한 후 사라지는 과정을 거칩니다.
따라서, Runtime.exec()를 호출하는 java 프로세스의 -Xms, -Xmx 값이 크면 클수록
동시에 Runtime.exec()를 실행 시킬 수 있는 개수는 제한을 받게 됩니다.

또한, 이 값은 ulimit -a 의 결과로 나온 stack 메모리 제한 값과도 영향이 있습니다.
stack 메모리 값을 충분히 늘려 주세요. 이 값보다 큰 메모리를 요구할 경우,
NOMEM IOException 을 발생합니다.

PS:궁극적으로는 Runtime.exec()는 OLTP성, 즉, 빈번한 호출상황에서는 바람직하지
않습니다.

================================================
  자바서비스넷 이원영
  E-mail: javaservice@hanmail.net
  PCS:011-898-7904
================================================

'Java' 카테고리의 다른 글

JNI  (0) 2007.05.09
Too many open files  (0) 2007.05.09
예제로 살펴보는 쓰레드 제어하기  (0) 2007.04.18