L'utilisation de la mémoire de la Playframework
Juste une petite question sur l'utilisation de la mémoire de la pièce-cadre.
J'ai une instance de production, qui semble utiliser 680768 ko de mémoire. La plupart des il est situé dans le swap.
Le serveur (virtuel) a propos de 750 MO, mais aussi s'exécute le serveur MySQL et 12 Apache serveurs virtuels. Devient parfois temporaire unrespondent (ou très lentement) pour de courtes périodes.
Je suppose que c'est à cause de l'échange (c'est pas le CPU).
Le cadre besoin de beaucoup de mémoire?
Je pourrait limiter l'utilisation de la mémoire avec un paramètre de JVM -Xmx256m
, mais quelle est la valeur à mettre, et ce est la raison pour laquelle il utilise moins de mémoire?
C'est l'utilisation par le Jeu! avant et après démarrage:
Java: ~~~~~ Version: 1.6.0_26 À La Maison:
/usr/lib/jvm/java-6-sun-1.6.0.26/jre
Mémoire Max: 194641920 Gratuit
mémoire: 11813896
Mémoire totale: 30588928
Les processeurs disponibles: 2Après un redémarrage: Java: ~~~~~ Version: 1.6.0_26 à la Maison:
/usr/lib/jvm/java-6-sun-1.6.0.26/jre
Mémoire Max: 194641920 Gratuit
mémoire: 9893688
Mémoire totale: 21946368
Les processeurs disponibles: 2
pouvez-vous envoyer le mémoire de sortie qui jouent état de vous donner (au début de l'état). Pour ma part, je suis en cours d'exécution jouer applications avec -Xmx64Mo sans aucun problème. Si vous avez besoin de plus de mémoire, vous pouvez avoir de la fuite de mémoire dans votre code
Je vais l'ajouter à la question. Seulement 71 MO de l'actuel 665 MO dans la mémoire active (en haut). 665 semble assez stable sur la figure. Après une réplique de la pièce! demande (et au moins une demande) la mémoire signalée par le haut est 524m. (mettre de l'utilisation de la mémoire signalé par le Jeu! dans la question)
OriginalL'auteur Luuk D. Jansen | 2012-02-12
Vous devez vous connecter pour publier un commentaire.
Cela dépend de beaucoup de choses, mais oui java besoin de la mémoire pour les natifs de l'allocation, le tas et les non tas d'espace mémoire.
Jouer de statut indique que votre tas consomme seulement 30588928 octets, mais au démarrage de java alloue 194641920 pour le tas. Vous pouvez essayer de démarrer avec -Xmx64M de limiter l'allocation de tas.
Vous pouvez ensuite enregistrer environ 128 Mo de RAM, mais, java aussi alloue de la mémoire de la jvm, de sorte que l'empreinte du processus sera plus de 64 Mo, cela dépend de votre plate-forme, mais il sera au moins 200/250 Mo.
Essayez de limiter votre tas de 64Mo mais 750 Mo peut ne pas être suffisante pour faire fonctionner la jvm et mysql.
Avoir à l'esprit que vous ne devez pas utiliser le swap avec java, car la mémoire est allouée dans un bloc de sorte que vous swap/swap sur l'ensemble du tas.
Dans votre application.fichier conf, ajouter une ligne "de la jvm.mémoire=-Xmx64M"
Je l'ai fait, et cela a entraîné une chute. Avant le changement: mémoire Max: 249364480 libérer de la mémoire: 20543688 Totale de la mémoire: 59219968 processeurs Disponibles: 2 Haut donne: (Virt) 627m (Res) 185 m Après le changement: mémoire Max: 64880640 libérer de la mémoire: 2793576 Totale de la mémoire: 53366784 processeurs Disponibles: 2 Haut donne (la saleté) 470m (res) 199m serait prendre le Xmx64M être la bonne valeur à mettre dans sans compromettre le cadre? C'est un peu claire pour moi exactement quelles sont les raisons de le faire d'une manière ou l'autre (je sais que je devrais le lire!)
"la mémoire est allouée dans un bloc de sorte que vous swap/swap sur l'ensemble du segment de mémoire" -- ce n'est pas vrai, est-il? VM swaps pages in et out. Je ne pense pas que l'OS se soucie ou même sait que le processus de la mémoire est un gros tas de terre. Il sait juste qu'il a appelé
brk
pour obtenir plus de pages.OriginalL'auteur Seb Cesbron
Je suis en supposant que le 680768 ko de mémoire que vous signalez est à partir d'un OS de l'outil comme le ps ou le gestionnaire des tâches. La quantité totale de mémoire utilisée par la JVM n'est pas la cause du gel temporaire de l'application. La cause probable de la pause, c'est que le Garbage collector de la JVM est en cours d'exécution un full GC qui permettra de suspendre tous les threads dans la JVM qui le complète GC est en cours d'exécution (sauf si vous avez un concurrent à l'gc configuré).
Vous devez exécuter la JVM de l'exécution de l'playframework avec -verbosegc -XX:+PrintGCDetails pour voir ce que le GC est en train de faire.
Votre question "est-ce la Jouer Cadre besoin de beaucoup de mémoire" ne peut pas être répondu parce que la quantité de mémoire utilisée dépendra de ce que votre demande est à faire avant la demande de base. Aussi la JVM va laisser les tas de courir vers le bas et ensuite faire un cycle de GC pour nettoyer le Tas. Une bien comportés JVM application doit afficher une dent de scie motif sur la GC graphique.
Je ne sais pas qui JVM vous utilisez si vous utilisez le point d'accès VM lire la JVM de s'écouler guide. http://www.oracle.com/technetwork/java/javase/gc-tuning-6-140523.html Vous aurez généralement besoin de comprendre la suite GC concepts avant de lire la JVM guide de réglage pour le guide du bon sens.
http://www.amazon.com/Garbage-Collection-Handbook-Management-Algorithms/dp/1420082795/ est probablement un bon livre sur ce sujet
Un couple d'outils gratuits fournis avec la JVM hotspot que vous pouvez utiliser sont jconsole, et jvisualvm. jvisualvm a une belle plugin appelé VisualGC ce qui est formidable à apprendre le hotspot vm qui gère la mémoire.
OriginalL'auteur ams