문제

종종 IBM WebSphere Application Server에서 OutefMemoryException을 발견했습니다. 내 응용 프로그램이 데이터베이스에서 거대한 데이터를 검색하기 때문에이 예외가 발생한다고 생각합니다. 따라서 모든 쿼리가 데이터를 1000 개 이상 레코드하지 말고 JVM을 설정했습니다.

+ Verbose garbage collection
+ Maximum Heap size = 1024 (RAM on my server is 16 GB and now I already change to 8192)
+ Debug arguments = -Djava.compiler=NONE -Xdebug -Xnoagent  
                    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=7777
+ Generic JVM arguments = -Dsun.rmi.dgc.server.gcInterval=60000 
                          -Dsun.rmi.dgc.client.gcInterval=60000 -Xdisableexplicitgc  
                          -Dws.log=E:\WebApp\log -Dws.log.level=debug
(ws.log and ws.log.level are my properties)

그리고 나는 찾았다 heapdump, Javacore 그리고 스냅 프로파일 폴더의 파일 문제의 원인에 대해 말해 줄 수 있다고 생각하지만 HeapDump, Javacore 및 SNAP 파일을 읽거나 사용하는 방법을 모르겠습니다.

OutofMemoryException을 방지/피하는 방법을 알려주십시오. 감사

도움이 되었습니까?

해결책

이에 대한 답은 OutofMemoryException과 관련된 메시지에 따라 다릅니다. -xx : maxpermsize = ...을 시도하고 256m와 같은 것으로 설정할 수도 있습니다.

또한 어딘가에 재귀 기능이있는 경우 스택 오버플로가 발생할 수 있습니다.

가능하면 예외와 관련된 메시지를 게시하십시오. StackTrace도 도움이 될 수 있습니다.

다른 팁

힙 덤프 파일을보고 싶다면 IBM이이를 분석하는 도구를 제공합니다. 여기.

"기억에 감사드립니다" JVMS 메모리 사용에 대한 좋은 기사로,이 문제를 분석하는 데 도움이 될 수 있습니다 ...

감사합니다 Bwalliser 이 링크를 위해

JPROFILER와 같은 도구를 사용하여 디버깅 할 수 있도록 문제를 로컬로 재현하십시오. 로컬로 OOM을 강요 할 수 없더라도 JPROFILER의 메모리가 증가 할 가능성이 있습니다. 그런 다음 스냅 샷을 찍고 수집되지 않은 수업을 찾습니다. 정확한 과학은 아니지만 IBM HeepDump를 보는 것보다 훨씬 쉽습니다. 그러나 만약 당신이해야한다면, 힙 덤프를 검사하는 오래된 방법은 heproots와 함께있었습니다. 당신이있는 버전에 따라 다를 수 있습니다. 나는 일부 버전의 IBM JDK가 압축에 문제가 있으므로 메모리가 충분히 많더라도 충분히 큰 조각이 없기 때문에 OOM을 얻을 수 있습니다.

귀하의 최대 절전 모드/JPA를 지속성 제공 업체로 사용한다고 가정합니까? 두 번째 레벨 캐시를 사용하고 있습니까? 그렇다면 캐시에서 큰 결과 세트를 퇴치하는 것을 고려 했습니까?

우리가 무엇을 모른다면 질문은 대답하기 어렵다 친절한 OutofMemoryError의 경우; permgen 그리고 heapspace 두 개의 매우 다른 짐승입니다.

JBoss에서 몇 달 동안 Perm-Gen을 쫓고 있었지만 특정 유형의 문제는 웹 애플리케이션을 즉석에서 다시로드 한 응용 프로그램 서버에 일반적이었습니다. 사가가 문서화되어 있습니다 여기.

당신이 가진 힙 덤프는 ... 당신이 그것들을 분석 할 수 있다는 것일 수 있습니다. 일식 매트.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top