2012-01-04 2 views
4

JVM이 충돌하여 JVM 코어 pid 파일을 만들었습니다. JMV 코어 파일에 익숙하지 않아 다음과 같은 도움을받을 수 있습니다.JVM 코어 파일 덤프의 쿼리

내가 점점 오전 오류는 :

코어 파일에서 위의 사항을 바탕으로
# 
# A fatal error has been detected by the Java Runtime Environment: 
# 
# java.lang.OutOfMemoryError: requested 32756 bytes for ChunkPool::allocate. Out of swap space? 
# 
# Internal Error (allocation.cpp:117), pid=20119, tid=797133728 
# Error: ChunkPool::allocate 
# 
# JRE version: 6.0_21-b06 
# Java VM: Java HotSpot(TM) Server VM (17.0-b16 mixed mode linux-x86) 
# If you would like to submit a bug report, please visit: 
# http://java.sun.com/webapps/bugreport/crash.jsp 
# 
And Heap memeory statistics is, 

Heap 
PSYoungGen  total 248832K, used 123509K [0x89850000, 0x9efa0000, 0xb42f0000) 
    eden space 238656K, 47% used [0x89850000,0x90701918,0x98160000) 
    from space 10176K, 99% used [0x98ab0000,0x9949bea0,0x994a0000) 
    to space 56448K, 0% used [0x9b880000,0x9b880000,0x9efa0000) 
PSOldGen  total 699072K, used 404738K [0x342f0000, 0x5eda0000, 0x89850000) 
    object space 699072K, 57% used [0x342f0000,0x4ce30870,0x5eda0000) 
PSPermGen  total 29056K, used 28878K [0x302f0000, 0x31f50000, 0x342f0000) 
    object space 29056K, 99% used [0x302f0000,0x31f23be8,0x31f50000) 

JVM arguments, 

VM Arguments: 
jvm_args: -Xms1024M -Xmx2048M -verbose:gc -XX:+HeapDumpOnOutOfMemoryError -Xss128k -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintCommandLineFlags -XX:+HeapDumpOnOutOfMemoryError 

--------------- S Y S T E M --------------- 

OS:Red Hat Enterprise Linux AS release 4 (Nahant Update 6) 

uname:Linux 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:58:04 EST 2007 i686 
libc:glibc 2.3.4 NPTL 2.3.4 
rlimit: STACK 10240k, CORE infinity, NPROC 274431, NOFILE 4096, AS infinity 
load average:1.32 1.50 1.52 

CPU:total 4 (2 cores per cpu, 1 threads per core) family 15 model 65 stepping 3, cmov, cx8, fxsr, mmx, sse, sse2, sse3, mmxext, 3dnow, 3dnowext 

Memory: 4k page, physical 16631944k(115380k free), swap 18940592k(18614440k free) 

vm_info: Java HotSpot(TM) Server VM (17.0-b16) for linux-x86 JRE (1.6.0_21-b06), built on Jun 22 2010 01:04:46 by "java_re" with gcc 3.2.1-7a (J2SE release) 

time: Sat Dec 24 11:09:25 2011 
elapsed time: 84994 seconds 

, 무료 스왑 ~ 18기가바이트, 어떤 생각으로

1) 오류가 부족 "왜 스왑 공간의 "?" 그것은 옳은 경우가 아니어야합니다. 실제 메모리 만 매우 낮습니다. 이는 115MB의 여유 공간입니다.

2) 16GB의 실제 메모리 중 2GB 만 JVM에 할당됩니다. 그러나 통계에 따르면 거의 16GB가 완전히 사용되고 115MB 만 무료입니다. 그래서, 다른 과정은 또한 기억을 점령했을 것입니다. 이 방향을 확인해야합니까?

3) 이상적으로 JVM은 Java 객체를 생성하고 처리하며 자체 고유의 라이브러리 객체를 만들어야합니다. JVM 고유의 네이티브 객체에 사용되는 메모리입니다. 지정된 힙 한계 내에 할당 될 것인가 아니면 힙 외부에 완전히 할당 될 것입니까?

내 이해와 분석을 위해 위 질문에 답할 수 있다면 정말 도움이 될 것입니다.

답변

2
메모리가 그 위에가는 경우

jvm_args, 당신은 OOM 예외를 얻을 수 있도록 당신은 단지 2기가바이트 응용 프로그램에 할당 한

: -Xms1024M -Xmx2048m ->이 중요하다

+0

OP에서 OutOfMemoryError가 발생하지 않습니다. Java 힙 공간이 부족하지 않습니다. – tgdavies

0

내가 찾을 수 없습니다 적절한 정보를 얻기위한 적절한 링크가 있지만 실제 메모리가 부족하여 99 %가 (객체 공간) 사용되어 오류를 일으키고 있습니다. 최대 힙 메모리 매개 변수 -Xmx만큼 힙 메모리 할당을 늘려야 할 수 있습니다.

0

가상 메모리가 부족하면이 오류가 발생합니다. 32 비트 JVM이 있고 2GB 힙이있는 한계에 가깝습니다. 사용 가능한 나머지 주소 공간을 공유 라이브러리, 스레드 스택 및 직접 메모리와 함께 사용하고 스왑 공간 부족 오류가 발생할 수 있습니다.

가장 간단한 해결책은이 문제를 완전히 피하는 64 비트 JVM을 사용하는 것입니다. 또한 여러 가지 수정 및 성능 개선 사항이 있으므로 Java 6 업데이트 30을 사용합니다.

은 BTW 당신은 ​​-Xms1024M -Xmx2048m

-ms1g -mx2g 

과 동일 추적을 쓸 수있는 당신이 볼해서는 안 JVM은 여전히 ​​최신의 JVM에서 32 비트 참조를 사용하는 64 비트 메모리 소비가 크게 증가합니다.