Je fais construire une Java web app, à l'aide de la Jouer! Cadre. Je suis d'hébergement sur playapps.net. J'ai été une énigme pour un tandis que sur la condition des graphiques de consommation de mémoire. Voici un exemple:
Le graphique vient d'une période de cohérent mais nominal de l'activité. Je n'ai rien pour provoquer la chute de mémoire, donc je suppose que cela s'est produit parce que le garbage collector a couru qu'il y a presque atteint son admissible consommation de mémoire.
Mes questions:
- Est-il juste pour moi, à supposer que mon application ne pas avoir une fuite de mémoire, comme il semble que la mémoire est correctement récupéré par le ramasse-miettes quand il fonctionne?
- (dans le titre) Pourquoi java en attente jusqu'à la dernière seconde pour exécuter le garbage collector? Je vois une dégradation significative des performances que de la consommation de mémoire pousse vers le haut quatrième du graphique.
- Si mes affirmations ci-dessus sont correctes, alors comment puis-je résoudre ce problème? Les autres posts que j'ai lu sur de SORTE semblent opposés à des appels d'
System.gc()
, allant de neutre ("c'est uniquement une demande d'exécution de GC, de sorte que la JVM peut tout simplement vous ignorer") à une franche opposition ("le code qui s'appuie sur l'System.gc()
est fondamentalement cassé"). Ou suis-je à côté de la base ici, et je devrais être à la recherche de défauts dans mon propre code qui est à l'origine de ce comportement et intermittent perte de performance?
Je m'excuse pour le cerveau de vidage de questions; j'ai été de débogage ce problème pendant un certain temps maintenant, et vous serions reconnaissants de tous les pointeurs.
Mise à JOUR
J'ai ouvert une discussion sur PlayApps.net pointant à cette question et d'en mentionner quelques-uns des points ici; plus précisément @Affe commentaire concernant les paramètres pour un full GC être défini de façon très conservatrice, et @G_H du commentaire à propos de paramètres pour le rapport initial et le max de la taille du segment.
Voici un lien vers la discussion, si vous le malheureusement besoin d'un playapps compte pour l'afficher.
Je vais rapporter les commentaires ici quand je l'obtenir; merci beaucoup à tous pour vos réponses, j'ai déjà appris beaucoup d'eux!
Résolution
Playapps de soutien, ce qui est encore grande, n'avait pas beaucoup de suggestions pour moi, leur seule pensée d'être que si j'ai été en utilisant le cache amplement ce peut-être de garder les objets en vie plus longtemps que nécessaire, mais ce n'est pas le cas. J'ai encore appris une tonne (woo hoo!), et j'ai donné @Ryan Amos la case verte que j'ai pris sa suggestion de l'appel d' System.gc()
chaque demi-journée, ce qui pour l'instant fonctionne bien.
Merci encore pour toute l'aide, comme toujours!