2010-09-30 3 views
2

Je cours un serveur d'application qui utilise un peu de mémoire (il y a pas mal d'utilisateurs). Il fonctionne sur une instance EC2 de 18 Go.Java GC: PSYoungGen augmente de 4 Go après GC complet

Je passe ces paramètres GC à la machine virtuelle:

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

Le serveur fonctionne très bien pendant un certain temps (aussi bien que vous auriez attendues d'sans GC concurrente), mais après quelques jours, il a grandi soudainement le tas par une somme énorme, et nous a pris en échange qui a détruit les performances du serveur et un redémarrage nécessaire:

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] 

Cette dernière ligne semble très bien déphasé. Pourquoi le tas de jeune génération du PS serait-il soudainement passé à 4 Go?

L'exécution de cette machine virtuelle sur 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: Happened une seconde fois ce soir.

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: Voici un graphique des 3 dernières heures sur notre serveur de production. alt text

+0

Avec votre maximum de mémoire et votre perm ne dépassant pas votre mémoire principale, comment exactement avez-vous fini par échanger? D'autres programmes en cours? – Xailor

+0

Je ne suis pas sûr que ... top montre que java prend 15g résident, et tout le reste est un processus système standard qui prend quelques méga-octets. Voir mon post édité où c'est arrivé encore, mais a accompli le GC (qui a pris 221 secondes) – sehugg

+0

Le GB supplémentaire pourrait être des discussions. Nous avons beaucoup de discussions. – sehugg

Répondre

1

Essayez le réglage -XX:NewRatio:2 (peut-être 3) garder votre nouvelle en échec contre l'ancien dans le rapport, ou limiter avec -XX:MaxNewSize? S'il vous plaît commenter sur ma question ci-dessus pour savoir pourquoi avez-vous frappé échange?

Questions connexes