2012-01-23 5 views
2

25GB RAM, 2 배 쿼드 코어 Intel Xeon (8 코어 모두) 의 RHEL5 시스템이 있으며 힙 크기 오류가 임의로 발생합니다.tomcat : OutOfMemoryError : Java 힙 공간 - 24GB 시스템

우리의 자바 옵션은 -Xmx10240m-Xms10240m-XX:PermSize=256m-server-Xss1024k입니다. 위의 설정에 문제가 있습니까?

오류 :

java.lang.OutOfMemoryError: Java heap space 
    at net.sf.ehcache.store.DiskStore.throwableSafeExpireElementsIfRequired$ 
    at net.sf.ehcache.store.DiskStore.spoolAndExpiryThreadMain(DiskStore.ja$ 
    at net.sf.ehcache.store.DiskStore.access$800(DiskStore.java:65) 
    at net.sf.ehcache.store.DiskStore$SpoolAndExpiryThread.run(DiskStore.ja$ 

TIA

+0

64 비트 시스템과 java 또는 RHEL + PAE 커널을 사용하고 있습니까? 누출을 파악하기 위해 메모리 덤프를 디버그해야 할 가능성이 큽니다. –

+0

64 비트 RHEL 죄송합니다. –

+0

힙 OOM은 일반적으로 누출을 의미합니다. 힙의 어떤 부분이 문제입니까? 에덴, 생존자, 종신? jconsole 또는이 툴을 사용한 적이 있습니까? http://www.yourkit.com/java/profiler/ 30 일 평가판이 있지만 우리는 누수를 발견하는 데 익숙합니다. 큰 힙 덤프가있는 경우 큰 메모리 디버그 시스템을 고려해야합니다. 그렇지 않으면이를 잠시 바꿔야합니다. –

답변

0

-XX:+HeapDumpOnOutOfMemoryError로 JVM을 실행하고 힙을 먹고 무엇을 분석하는 프로파일 러로 덤프를 엽니 다. 그렇지 않으면 당신은 무엇이 잘못되었을 지 짐작할 수있는 끝없는 시간을 보낼 것입니다.

this SO post도 참조하십시오.

+0

아마도 ehcache가 될 것입니다. :-) (Granted, OOME을 던진 스택은 실제로 누가 가장 많은 메모리를 사용하고 있는지와 관련이 없습니다. 내 진술은 ehcache가 JVM 내에서 사용 중임을 보여주기 때문입니다.) – ziesemer

+0

예,하지만 더 깊게 갈 수는 있습니다. Ehcache의 내용을보십시오. 예를 들어 1.5G 문자열을 몇 번 캐시하면 문제의 원인을 알 수 있습니다. – mindas

0

많은 메모리를 사용하고 있다면 응용 프로그램 자체에 다른 문제가있을 수 있습니다.

당신의 JVM에 다음 옵션을 설정하고 다시 실행 해보십시오 :

-XX:HeapDumpPath=myHeapDumpPath 
-XX:+HeapDumpOnOutOfMemoryError 

그런 다음 힙 메모리 분석을 통해 덤프 실행합니다. Eclipse Memory Analyzer은 잘 작동하며 오픈 소스입니다. 메모리 누수를 분석 할 수있는 옵션이 있습니다.

클래스가 ehcache에서 제공된 경우는 너무 많은 개체를 캐싱하고 메모리가 부족한 것 같습니다. 저장량을 제한하려면 ehcache 설정을 조정해야합니다. 메모리 분석기 도구를 사용하면 캐싱 할 항목을 너무 많이 결정할 수 있습니다.

0

-Xmx10g를 쓰면 분명합니다. 프로필 작성 시간. 무료 인 VisualVM으로 시작할 수 있으며 메모리를 모두 사라지는 부분에 대한 프로파일 정보를 얻을 수 있습니다.

+1

10240m은 10 기가 바이트이며 1이 아닙니다. – Wyzard

+0

오, 이런. 편집 됨. – bmargulies

관련 문제