web-dev-qa-db-fra.com

Limite de frais généraux du GC dépassée

Quelle est la durée d'échantillonnage utilisée par JVM pour générer le message "Java.lang.OutOfMemoryError: limite de temps système GC dépassée"? Je sais que vous pouvez contrôler 98% et 2% avec les paramètres GCTimeLimit et GCHeapFreeLimit mais quel est le temps d'échantillonnage?

93
PRK

À partir de réglage de la récupération de place de la machine virtuelle via Java SE 6 HotSpot [tm]

le suivant

Temps GC excessif et erreur OutOfMemoryError

Le collecteur simultané émettra une erreur OutOfMemoryError si trop de temps est passé dans la récupération de place: si plus de 98% du temps total est passé dans la récupération de place et si moins de 2% du segment est récupéré, une erreur OutOfMemoryError est générée. Cette fonctionnalité est conçue pour empêcher les applications de s'exécuter pendant une période prolongée tout en faisant peu ou pas de progrès car le tas est trop petit. Si nécessaire, cette fonctionnalité peut être désactivée en ajoutant l'option -XX: -UseGCOverheadLimit à la ligne de commande.

La règle est la même que celle du collecteur parallèle, sauf que le temps passé à effectuer des collectes simultanées n'est pas compté dans la limite de 98%. En d'autres termes, seules les collectes effectuées lorsque l'application est arrêtée sont prises en compte pour un temps GC trop long. De telles collections sont généralement dues à une défaillance du mode simultané ou à une demande de collection explicite (par exemple, un appel à System.gc ()).

en conjonction avec un passage plus bas

L'une des utilisations les plus courantes de la récupération de place explicite se produit avec la récupération de place distribuée (DGC) RMI. Les applications utilisant RMI font référence à des objets d'autres machines virtuelles. Les déchets ne peuvent pas être collectés dans ces applications distribuées sans collecter occasionnellement le segment de mémoire local. RMI impose donc des collectes complètes de façon périodique. La fréquence de ces collections peut être contrôlée avec des propriétés. Par exemple,

Java -Dsun.rmi.dgc.client.gcInterval=3600000

-Dsun.rmi.dgc.server.gcInterval=3600000 spécifie une collecte explicite une fois par heure au lieu du taux par défaut de une fois par minute. Toutefois, cela peut également entraîner la récupération de certains objets beaucoup plus longtemps. Ces propriétés peuvent être définies sur Long.MAX_VALUE pour que le temps entre les collections explicites soit réellement infini, si aucune limite supérieure n'est souhaitée pour l'actualité de l'activité DGC.

Cela semble impliquer que la période d'évaluation permettant de déterminer les 98% dure une minute, mais peut éventuellement être configurée sur la JVM de Sun avec la définition correcte.

Bien entendu, d'autres interprétations sont possibles.

82
Edwin Buck