2010-06-07 6 views
0

Je suis responsable de la maintenance d'un serveur exécutant une application Web Java EE. Jboss 4.0 est utilisé comme conteneur de servlet et la JVM est démarrée avec suffisamment de mémoire pour exécuter l'application (je pense):Projet Java EE, trop de mémoire?

if ["x $ JAVA_OPTS" = "x"]; puis JAVA_OPTS = "- serveur -Xms1500m -Xmx1500m -Dsun.rmi.dgc.client.gcInterval = 3600000 -Dsun.rmi.dgc.server.gcInterval = 3600000" fi

je dois redémarrer jboss tous les jours parce que la Le processus Java commence à utiliser beaucoup de mémoire, donc l'application fonctionne très lentement.

Je voudrais simplement savoir si cela pourrait être un problème de conception ou un problème de configuration de jboss.

PD: Je sais que j'ai écrit seulement quelques détails, mais c'est ce que j'ai.

Merci.

Répondre

1

Il n'y a pas de problème fondamental avec l'utilisation de beaucoup de mémoire. Si la taille de la machine virtuelle est trop grande et que vous créez beaucoup d'objets qui doivent être collectés, vous devrez effectuer un GC plus souvent, ce qui signifie un GC complet plus souvent. Un GC complet sur une machine virtuelle de très grande taille peut provoquer des «gels» de quelques secondes. Pour certaines applications, cela peut être un réel problème. Dans d'autres peut-être pas.

Vous souhaitez effectuer le suivi de la taille de la machine virtuelle au fil du temps et tout profileur le fera. VisualVM est livré avec Java 6u14 (iirc) ou supérieur et ça va le faire. Si vous observez votre application au fil du temps, vous verrez la quantité de mémoire augmenter puis chuter soudainement lorsque des objets temporaires sont collectés en formant une structure en "scie".

Maintenant, avec le temps, cela peut augmenter (c.-à-d. Que la pente globale est en hausse). Cela peut indiquer ou non un problème. Cela pourrait indiquer que vous fuyez la mémoire. Cela pourrait signifier que vous détenez des références sur des objets dont vous n'avez simplement pas besoin pour ne pas être catalogués. Ou ça pourrait ne pas poser de problème du tout. Cela dépend de ce que vous faites. Si, par exemple, vous mettez en cache une quantité de données de plus en plus importante au fil du temps, cela peut ne pas être une fuite du tout, mais cela peut indiquer un problème d'architecture en ce sens que vous ne videz pas les caches.

1,5 Go Cependant, il ne s'agit pas de beaucoup de mémoire. Il suffit donc d'avoir votre VM en elle-même pour ne pas avoir à la redémarrer tous les jours. On dirait que vous avez un autre problème et que les références collantes sont les plus probables.