Java GC: PSYoungGen wächst von 4 GB nach der Vollständigen GC

Mir läuft ein application server benötigt viel Speicher (es gibt durchaus ein paar user). Es läuft auf eine 18 GB EC2-Instanz.

Gebe ich diese GC-Parameter für die VM:

-server -XX:GCTimeRatio=19 -Xmx12g -XX:+PrintGCDetails -XX:+PrintGCTimeStamps

Der server funktioniert für eine Weile (so gut wie Sie würde expecte ohne gleichzeitige GC), aber nach ein paar Tagen, dass es plötzlich wuchs der Haufen durch eine riesige Menge, und nahm uns in swap zerstört die server-performance und benötigt einen Neustart:

217408.525: [Full GC [PSYoungGen: 12935K->0K(530944K)] [PSOldGen: 5668446K->4551217K(5431168K)] 5681382K->4551217K(5962112K) [PSPermGen: 50534K->50480K(50816K)], 11.8155060 secs] [Times: user=9.73 sys=2.08, real=11.81 secs] 
217963.521: [Full GC [PSYoungGen: 13247K->0K(635776K)] [PSOldGen: 5422640K->4884067K(5741120K)] 5435887K->4884067K(6376896K) [PSPermGen: 50489K->50489K(50816K)], 8.4219030 secs] [Times: user=8.38 sys=0.05, real=8.43 secs] 
218452.573: [Full GC [PSYoungGen: 20879K->0K(877504K)] [PSOldGen: 5720236K->4873397K(5788544K)] 5741115K->4873397K(6666048K) [PSPermGen: 50502K->50502K(50816K)], 10.9450630 secs] [Times: user=9.13 sys=1.84, real=10.95 secs]
219061.305: [Full GC [PSYoungGen: 73587K->0K(4073600K)] [PSOldGen: 5790501K->5022476K(6031040K)] 5864088K->5022476K(10104640K) [PSPermGen: 50518K->50518K(50816K)], 11.1695740 secs] [Times: user=8.80 sys=1.81, real=11.17 secs] 

Letzten Zeile scheint sehr viel von dem, Schritt. Warum sollte die PS-Jungen gen heap plötzlich wachsen, um 4 GB?

Läuft die VM auf Ubuntu:

java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) 64-Bit Server VM (build 16.3-b01, mixed mode)

EDIT: Passiert ein zweites mal heute Abend.

101017.205: [Full GC [PSYoungGen: 73185K->0K(4095616K)] [PSOldGen: 6373373K->5318013K(6638016K)] 6446559K->5318013K(10733632K) [PSPermGen: 46183K->46183K(46272K)], 221.1337460 secs] [Times: user=8.13 sys=1.26, real=221.08 secs]

EDIT: Hier ist ein graph der letzten 3 Stunden auf unseren Produktionsserver.
Java GC: PSYoungGen wächst von 4 GB nach der Vollständigen GC

  • Mit Ihrer maximalen heap und perm nicht mehr als Ihren primären Speicher, wie genau hast du am Ende schlagen tauschen? Andere proggies laufen?
  • Nicht sicher.. oben zeigt, dass java dauert bis 15g ansässig, und alles andere ist standard-system-Prozesse, die nimmt ein paar meg. Siehe meinen editierten post, wo es wieder passiert, aber abgeschlossen ist der GC (das dauerte 221 Sekunden)
  • Das zusätzliche GB werden konnte-threads. Wir haben eine Menge threads.
  • Updates in 2012? Haben Sie jemals lösen?
  • NÖ. Aber ich benutze concurrent GC jetzt und es funktioniert viel besser. Auch mit Netty zu vermeiden, 1 thread pro Verbindung. (-XX:+UseConcMarkSweepGC -XX:+CMSIncrementalMode -XX:+CMSIncrementalPacing -XX:+UseCompressedOops -Xss128k etc.)
InformationsquelleAutor sehugg | 2010-09-30
Schreibe einen Kommentar