Processus Mémoire Vs Tas de la JVM
Nous avons une application web déployée sur un tomcat serveur. Il y a certaines tâches planifiées qui nous exécuter, d'après lequel le segment de mémoire des pics et s'installe, tout semble aller bien.
Cependant, le système d'administration est de se plaindre que l'utilisation de la mémoire ('top' sur Linux ) ne cesse d'augmenter, plus les tâches planifiées sont.
Quel est le co-relation entre la mémoire du tas et de la mémoire de la CPU? Peut-elle être contrôlée par une JVM paramètres? J'ai utilisé JConsole pour surveiller le système.
J'ai forcé la collecte des déchets par le biais de JConsole et l'utilisation du tas est venu vers le bas, cependant, l'utilisation de la mémoire sur Linux est demeuré élevé, et il n'a jamais diminué.
Des idées ou des suggestions serait d'une grande aide?
Savez-vous ce que la JVM du serveur est en cours d'exécution, et quelle était la différence entre le segment de l'utilisation de la mémoire et de l'utilisation réelle de la mémoire après avoir forcé la collecte des ordures?
>>cependant, l'utilisation de la mémoire sous Linux est demeuré élevé, et il n'a jamais diminué. << Qui est "l'utilisation de la mémoire"? Le GC habituellement n'aime pas en retour de la mémoire au système.
OriginalL'auteur user546352 | 2011-02-04
Vous devez vous connecter pour publier un commentaire.
Ce qui est susceptible d'être observé est la taille virtuelle et non le résident de la taille de l'ensemble du processus Java(es)? Si vous avez un objectif pour un faible encombrement, vous pouvez pas inclure
-Xms
ou de toute taille minimale sur le segment de la JVM arguments et d'ajuster les 70%-XX:MaxHeapFreeRatio=
à un nombre plus restreint pour permettre une plus agressif tas de retrait.Dans le temps, de fournir plus de détails quant à ce qui a été observé avec le commentaire de Linux, la mémoire jamais diminué? Ce système métrique?
%MEM est le % de RES en proportion de la mémoire primaire, de sorte que, généralement, les rapports du résident de taille dans le primaire. Qu'est-ce que le
-Xms
et-Xmx
options? Aussi de calculer le % de RES/VIRT et de % RES/SHR et d'en faire rapport. Il peut de rapport élevé, mais le processus(es) peuvent avoir une bonne partie partagée.Je suppose SHR est en kilo-octets et ce est la façon dont il montre. RES/VIRT = 56% et RES/SHR = 117.79 c'est le top de sortie avec 'M' option. PID UTILISATEUR PR NI VIRT RES SHR S %CPU %MEM TEMPS+ COMMANDE 14425 racine 17 0 1990m 1.1 g 9792 S 0.0 54.5 23:01.62 java C'est après que j'ai fait le changement que vous a suggéré de -XX:MaxHeapFreeRatio, il semble se comporter un peu mieux, je suis toujours en cours d'exécution des tests. J'ai remarqué que le CPU% est supérieur à 100% lorsque les travaux sont en cours d'exécution...
Ce qui signifie qu'un peu moins de la moitié de la mémoire est effectivement assis dans le primaire, le reste est soit utilisé ou paginée. Si le CPU est suffisant (tu dis que c'est) et compte tenu de la nature de la GC de la traversée de la plupart des tas, je serais prêt à parier que vous êtes réellement en utilisant uniquement qu' % de l'allocation. Et moins de 1% de partagé tellement négligeable ici.
Il est parfaitement normal de dépasser les 100% de CPU (%CPU est un mauvais métrique vraiment) pour le multi-processus et multithread apps (regardez vos charges moyennes à la place). De quoi avez-vous réglé votre maxheapfreeratio?
OriginalL'auteur Jé Queue
La mémoire allouée par le processus de JVM n'est pas la même que la taille du tas. L'employée de la taille du segment pourrait aller sans une réelle réduction de l'espace alloué par la JVM. La JVM a recevoir un déclencheur indiquant qu'il devrait réduire la taille de segment de mémoire. @Xepoch le mentionne, c'est contrôlée par
-XX:MaxHeapFreeRatio
.C'est parce que vous avez une sorte de fuite de mémoire. Les administrateurs système ont tendance à se plaindre quand ils voient les processus de mâcher lentement de plus en plus d'espace.
Avez-vous regardé le nombre de threads? Est vous demande de créer ses propres fils et de les envoyer à l'impasse et d'attendre les bras croisés à jamais?
Intégrez-vous avec un tiers des Api qui peut être en utilisant JNI?
OriginalL'auteur Tim Bender
Vous utilisez l'option-Xmx et -Xms paramètres pour ajuster la taille du tas. Avec tomcat, vous pouvez définir une variable d'environnement avant de commencer:
Initialement crée un segment de mémoire de 256 MO, avec une taille maximale de 512 MO.
Un peu plus de détails:
http://confluence.atlassian.com/display/CONF25/Fix+'Out+de+Mémoire les erreurs et+++augmentation de+disponible+mémoire
OriginalL'auteur wmacura