Ergonomics : de quoi s’agit-il ?

La version 5 de la plateforme java a introduit des mécanismes permettant de simplifier la façon d’optimiser le fonctionnement de la JVM. Ces nouvelles possibilités de paramétrage ont été appelées « generics ». Il s’agit de la combinaison des valeurs de paramètres de la JVM affectées par défaut en fonction des caractéristiques de la plateforme, et des objectifs de comportement du GC. Désormais l’utilisateur a la possibilité de décrire le comportement attendu et la JVM adapte automatiquement son fonctionnement pour satisfaire ces objectifs.

Le paramétrage par défaut de la JVM est fonction de la classe de la machine. Une machine de type « serveur » doit avoir plus d’un processeur et plus de 2 Go de RAM. Dans ce cas (à l’exception des OS Windows 32 bits), les JVM sont automatiquement configurées avec un algorithme GC « throughput », une taille minimale de heap égale à 1/64 de la mémoire physique (au maximum 1 Go), une taille maximale de heap égale à ¼ de la mémoire physique (au maximum 1 Go), et un compilateur runtime de type « server ».

De plus, deux nouveaux paramètres ont été introduits pour spécifier le comportement attendu par la JVM.

• Le temps maximum de pause « Maximum pause time » ;
L’objectif est de limiter le temps de pause introduit par le GC lors de la récupération de la mémoire. La JVM base son analyse à partir des statistiques de fonctionnement (moyenne des temps de pause, variance, pondération en fonction du caractère récent des évènements). Le paramètre est spécifié avec la syntaxe suivante -XX:MaxGCPauseMillis=<nnn> ou nnn est exprimé en millisecondes. Il signifie que le temps de GC ne doit pas être supérieur à cette valeur. Le GC ajuste donc la taille de la heap et d’autres paramètres pour que le temps de pause reste inférieur à cette valeur.

• Le débit de l’application « Application throughput »;
Cet objectif mesure le rapport entre le temps de pause et le temps passé en dehors des mécanismes de GC (temps consacré à l’exécution de l’application). Il est spécifié par le paramètre -XX:GCTimeRatio=<nnn> ou nnn permet de calculer le ratio du temps de collection versus temps d’exécution de l’application selon la formule (1/1+nnn).
Par exemple, si nnn=19 l’objectif est défini à 1/20 soit 5%. On accepte donc que le temps d’overhead du GC ne soit pas supérieur à 5% du temps total de fonctionnement compris entre 2 GC consécutifs.
Si l’objectif ne peut pas être atteint la JVM essaye d’ajuster la taille des différentes générations de la heap de façon à augmenter le temps d’exécution de l’application.

L’ensemble de ces mécanismes simplifie, dans la plupart des situations, la tâche d’optimisation du fonctionnement des GC. Dans d’autres cas il faut optimiser en fixant la taille des différentes générations de la heap, éventuellement la taille des « survivors spaces » et le seuil de promotion des objets de la jeune génération « young » vers la vieille génération « tenured/old ».

www.jperf.com

 

Publicités

A propos jlerbsc

founder of JavaPerf Consulting Http://www.jperf.com
Cet article a été publié dans JVM. Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s