46 votes

Pourquoi les performances diminuent-elles après environ 6 heures d'utilisation de Java 9 G1 sans l'augmentation réelle de la charge?

Je suis passé de 1 instance (2 vCPU, 2 go de RAM, de charge ~4k req/sec) à Java 9 (à partir de la dernière version de Java 8). Pendant un moment, tout allait bien et d'utilisation de l'UC était comme avant. Cependant, après ~6 heures CPU consommation a augmenté de 4% (de 21% à 25%) pour aucune raison. Je n'avais pas de pics de trafic, pas d'augmentation de la consommation de mémoire, pas de métrique changements (j'ai des compteurs pour chaque méthode dans le code). Rien.

J'ai quitté cette instance intacte pour ~12 heures attendait que ça va revenir. Mais rien n'a changé. Il a juste commencé à consommer plus de ressources CPU.

top commande a montré que l'instance avait plus de CPU pointes que d'habitude pour le serveur Java processus. J'ai lu récemment que le G1 n'est pas adapté pour le haut débit. J'ai donc fait une conclusion que la raison pourrait être en G1.

J'ai redémarré exemple avec:

java -XX:+UseParallelGC -jar server-0.28.0.jar

Et après environ 20 heures de la surveillance, tout est très bien comme avant. La consommation CPU est au niveau de 21% comme c'était le nombre de jours avant.

Utilisation de l'UC à droite après Java 9 de déploiement (6h échelle):

enter image description here

CPU augmenter après 7 heures + 12 heures "intact" (7d échelle):

enter image description here

CPU après -XX:+UseParallelGC (24h à l'échelle):

enter image description here

Donc ma question est - est que le comportement attendu pour le G1? Quiconque voit quelque chose de similaire?

Ubuntu 16.04 x64

java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)

EDIT 03.01.2019

Essayé de l'exécuter sur le même serveur avec G1 sur le java 10.0.2:

java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)

G1 consomme 40% de plus de CPU que UseParallelGC à droite après le redémarrage du serveur.

2voto

Agoston Horvath Points 622

(Notez que GC réglage est extrêmement dépendant de l'environnement, donc il n'y a pas de recette magique.)

A très semblable à la question de G1. Par défaut, il semble être plutôt mal adapté pour le REPOS des points de terminaison (encore une fois, ce n'est que ce que j'ai connu dans mon quartier). Ce qui m'a aidé était d'expérimenter avec la GC drapeaux, comme décrit ici.

Pour nous, les améliorations les plus importantes provenaient de -XX:G1NewSizePercent=25 et -XX:MaxGCPauseMillis=50. G1 est également le réglage automatique de lui-même au fil du temps, de sorte que le max. GC pause limite a un effet significatif sur tous les autres paramètres.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X