Java ist abgestürzt, Anwendung - so finden Sie heraus, warum Java abgestürzt?

Meine java-server gestartet-Absturz wiederholt, und ich kann nicht herausfinden, warum.

Ich habe server mit 7,5 GB Speicher und ich habe reserviert 3GB für den java-Prozess.

Server war einwandfrei läuft und lief garbage collection viele Male, aber die JVM-Crash bei unter Speicherdruck.

Hier die info von JConsole, nach dem Absturz:

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

Habe ich 0,5 GB nach einem GC-Lauf, so dass alle die Zeit, die er aufwirft, von 0,5 bis 3 GB und als fall-back 0,5, ist es absolut kein problem mit hängenden Objekte. In der Tat sollte es werfen OutOfMemoryException statt abzustürzen. Ich bin mit diesen Parametern:

-Xmn256m -Xms768m -Xmx3000m -XX:NewRatio=2 -server -verbosegc -XX:PermSize=256m -XX:MaxPermSize=256m -XX:SurvivorRatio=8 -XX:+UseParallelGC -XX:ParallelGCThreads=2 -XX:+UseParallelOldGC

Was ist falsch und was soll ich tun? Die gezeigte Ausgabe war:

Current thread (0x00007fe899755800):  JavaThread "508616253@qtp-1871151428-3352" [_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
...
Gibt es irgendwelche JNI Komponenten?
die Tatsache, dass du bist 'tun' GC viele Male sollten von alarm-Glocken. was ist der server Verhalten, wenn Sie nicht tun, keine GC und verlassen Sie sich auf die JVM zu führen, wie es sieht am besten?
Welche Programme ausgeführt werden? Java führt die garbage collection durch sich selbst, aber wenn ein Programm verursacht einen Speicherverlust dies kann nicht genug sein.
Nein, es ist kein JNI verwendet.
Server ist auf heavy load, houndrets der angeschlossenen online-Nutzer, die oft die garbage-collection-Aufrufe sind schnelle garbage-collection-algorithmen konfiguriert von mir, die helfen, zu verhindern, dass Zeit-Lecks, während Sie regelmäßige GB colection.

InformationsquelleAutor Libor Havlicek | 2011-02-15

Schreibe einen Kommentar