OutOfMemoryError: PermGen space

프로그래밍 2007.12.02 22:15
OutOfMemoryError: PermGen space

  근래에 들어와서 위의 메세지를 띄우면서 이클립스가 죽는 경우가 많이 생겼다. 'out of memory'라는 단어만으로 단순히 메모리가 부족해서라고 생각했고, 웹검색을 통해서 이클립스를 실행할 때 JVM의 힙 메모리의 용량을 지정할 수 있는 방법을 찾아냈다.

  메모리를 넉넉하게 지정하고 사용하면서 한동안 보이지 않았던 위의 에러 메세지가 얼마 전 부터 다시 보이기 시작했다. 또 다시 웹 검색을 시작했다. 덕분에 오늘 많은 것들을 배울 수 있었다.

  자바의 Heap공간은 내가 알던 것 보다 더 많은 부분으로 나누어져 있다는 것을 알게 되었고 더불어 GC(Garbage Collection)에 대한 부분도 몇 가지 GC알고리즘이 있고 그 중 어플리케이션의 사용 환경에 따라 선택하여 사용할 수 있게 하는 JVM옵션이 있다는 것도 알았다.


New/Young(신세대 힙)
- 객체가 생성되자마자 저장되고, 생긴지 얼마 안된 객체가 저장되는곳. 이 곳에 있는 객체들은 시간이 지남에 따라 우선순위가 낮아지면서 Old영역으로 옮겨진다.

Old 영역(구세대 힙)
- New/Young 영역에 저장되었던 객체중에 오래된 객체가 이동되어 저장되는 영역

Perm 영역(영구세대 힙)
- Class, Method 등의 Code 등이 저장되는 영역. JVM에 의해서 사용된다.


  JVM의 Heap공간은 위의 3가지가 있는데, 내 문제는 그 중에서도 Perm영역의 메모리 공간이 부족했던 것 같다. 이클립스의 WTP를 쓰다보면 클래스의 양이 늘어남에 따라 Permanent generation의 공간이 부족하게 되고, 부족하게 되면 종종 이클립스가 'OutOfMemoryError: PermGen space'에러를 내 뿜으며 쓰러지곤 한다고 한다는 글들을 발견했다.

-vmargs
-Xverify:none
-XX:PermSize=64M
-XX:MaxPermSize=256M
-Xms256m
-Xmx512m

    해결 방법으로 이클립스에 위의 내용처럼 옵션을 줘서 사용하기로 했다.

  이클립스 뿐만 아니라 JVM을 사용하는 어플리케이션에서 메모리로 인한 에러가 발생한다면 메모리 관련 JVM옵션을 사용 해 주면 해결되니 좀 더 관련 자료를 봐 두기로 했다.


  도움이 많이 되었던 문서들을 블로그에 남긴다.S
top
     TAG , ,
  1. Favicon of http://mewmew.tistory.com 야옹*^^* 2007.12.03 00:56 신고 수정/삭제 댓글

    신세대 hip 인줄 알았어요. ^^;;
    옵션 사용하기는 어디서나 어렵군요. ㅠㅠ

    • Favicon of http://signpen.net 싸인펜 2007.12.05 22:59 신고 수정/삭제

      저도 이런 부분이 있다는 것을 처음 알았습니다.
      에러 덕분에 어쩌다 공부가 되어버렸습니다^^

  2. Favicon of http://www.myhyuny.net/ 화현 2007.12.03 23:03 신고 수정/삭제 댓글

    저도 이것과 비슷한 이유로 고생했었는데, 도움이 될 것 같네요 ^^

    • Favicon of http://signpen.net 싸인펜 2007.12.05 23:01 신고 수정/삭제

      화현님도 벌써 접하신 에러 메세지였군요!!
      저는 얼마 전 부터.. 위에 문제가 속을 썩여서 최근에 알게 되었습니다.

댓글 쓰기