자바 서버가 계속해서 충돌하기 시작했는데 이유를 찾을 수 없습니다.Java 충돌 응용 프로그램 - Java 충돌 원인을 찾는 방법?
저는 7.5GB 메모리가있는 서버가 있으며 Java 프로세스를 위해 3GB를 할당했습니다.
서버가 정상적으로 실행되고 가비지 수집을 여러 번 실행했지만 메모리 부족시 JVM이 손상되었습니다. 그것을 내가 GC의 실행 후 0.5 GB가
Current heap size:
2 958 868 kbytes
Maximum heap size:
3 066 816 kbytes
Committed memory:
3 066 816 kbytes
Pending finalization:
0 objects
Garbage collector:
Name = 'PS MarkSweep', Collections = 66, Total time spent = 7 minutes
Garbage collector:
Name = 'PS Scavenge', Collections = 43 055, Total time spent = 44 minutes
Operating System:
Linux 2.6.31-302-ec2
Architecture:
amd64
Number of processors:
2
Committed virtual memory:
8 405 760 kbytes
Total physical memory:
7 882 780 kbytes
Free physical memory:
34 540 kbytes
Total swap space:
0 kbytes
Free swap space:
0 kbytes
, 그래서 모든 시간은 0.5 3 GB에 0.5로 다시 하락보다 상승 : 여기
는 충돌 후 JConsole의에서 정보입니다 매달려있는 물건에 절대적으로 문제가되지 않습니다. 실제로 그것은 충돌 대신OutOfMemoryException
을 던져야합니다. 해당 매개 변수를 사용하고 있습니다.
-Xmn256m -Xms768m -Xmx3000m -XX:NewRatio=2 -server -verbosegc -XX:PermSize=256m -XX:MaxPermSize=256m -XX:SurvivorRatio=8 -XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:+UseParallelOldGC
무엇이 잘못 되었습니까? 표시된 출력은 다음과 같습니다.
Current thread (0x00007fe899755800): JavaThread "[email protected]" [_thread_in_vm, id=11941, stack(0x00007fe86a4e5000,0x00007fe86a5e6000)]
siginfo:si_signo=SIGSEGV: si_errno=0, si_code=128(), si_addr=0x0000000000000000
Registers:
RAX=0x00007fe9c60333b8, RBX=0x00007fe899755800, RCX=0x0d00007fe8f58787, RDX=0x00007fe9c6031888
RSP=0x00007fe86a5e3fd0, RBP=0x00007fe86a5e4020, RSI=0x00007fe899755800, RDI=0x00007fe95bae1770
R8 =0x00007fe9be341620, R9 =0x0000000000000001, R10=0x00007fe9c5b84460, R11=0x00007fe9c051a52b
R12=0x00007fe9c051a529, R13=0x00007fe9c6034ac0, R14=0x00007fe9c051a599, R15=0x0900007fe8f58787
RIP=0x00007fe9c5bd562d, EFL=0x0000000000010246, CSGSFS=0x000000000000e033, ERR=0x0000000000000000
TRAPNO=0x000000000000000d
Stack: [0x00007fe86a4e5000,0x00007fe86a5e6000], sp=0x00007fe86a5e3fd0, free space=3fb0000000000000030k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x64d62d]
V [libjvm.so+0x5fc4df]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
v ~RuntimeStub::_complete_monitor_locking_Java
J sun.nio.ch.SocketChannelImpl.write(Ljava/nio/ByteBuffer;)I
J org.mortbay.io.nio.ChannelEndPoint.flush(Lorg/mortbay/io/Buffer;)I
J org.mortbay.jetty.HttpGenerator.flush()J
...
JNI 구성 요소가 있습니까? –
당신이 GC를 여러 번하고 있다는 사실은 경고음을 설정해야합니다. 어떤 GC도하지 않고 JVM을 사용하여 최상의 성능을 발휘한다면 서버의 행동은 무엇입니까? – anirvan
어떤 프로그램이 실행되고 있습니까? Java는 자체적으로 가비지 콜렉션을 수행하지만 프로그램에서 메모리 누수가 발생하면 충분하지 않을 수 있습니다. –