Les paramètres de démarrage appropriés de Tomcat 5.5 pour régler la JVM pour une application web de grande taille et à très forte demande?
Nous avez récemment migré à un grand, haut de la demande d'applications web Tomcat 5.5 de Tomcat 4 et ont remarqué que certains particulière ralentissement de comportement qui semble être liée à la JVM des pauses. Afin d'exécuter notre application et de soutenir l'augmentation de la charge au fil du temps sur Tomcat 4, nombre de pas si standard JVM paramètres ont été fixés et à l'écoute que par le bas, et je suis en espérant que quelqu'un avec Tomcat JVM expérience de réglage peuvent faire des commentaires sur tout ce qui serait susceptible de porter préjudice à un Tomcat 5.5 installer. Notez également que certains de ces pourrait être reporté à partir de versions précédentes de Java (nous avons été en cours d'exécution de Tomcat 4 sur la version 1.6 de Java avec ces paramètres avec succès depuis un certain temps, mais certaines peuvent avoir été introduites pour aider à la collecte des ordures sur Java 1.4 qui a été la base de notre Tomcat 4 installer pour une longue période de temps, et peut maintenant faire plus de mal que de bien).
Quelques remarques:
- La mémoire de l'Application de l'empreinte est
autour de 1 GO, probablement un peu plus. - Le CPU n'est pas un problème - toutes les machines
servir de l'application (équilibrage de charge) sont
< 30% de CPU - Beaucoup d'espace libre sur la mémoire physique de la machine.
- -XX:MaxPermSize=512m était le seul paramètre ajouté dans le cadre de l'5.5 mise à niveau et a été réactif à un dépassement de mémoire permgen space (qui il résolu).
- En cours d'exécution sur la version 1.6 de Java, Solaris OS
-serveur -Xms1280m -Xmx1280m -XX:MaxPermSize=512m -XX:ParallelGCThreads=20 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:SurvivorRatio=8 -XX:TargetSurvivorRatio=75 -XX:MaxTenuringThreshold=0 -XX:+AggressiveOpts -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading -Dsun.io.useCanonCaches=false -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000
source d'informationauteur Peter
Vous devez vous connecter pour publier un commentaire.
L'un de la Java des Champions, Kirk Pepperdine du blog : http://kirk.blog-city.com/how_to_cripple_gc_ergonomics.htm.
Citation 1
"GC de la documentation va vous dire ce que le paramètre affecte, mais souvent sans le dire à ce que l'effet sera. La plus grande idée de ce que vous avez pris la mauvaise fourchette dans la route, c'est quand vous définissez explicitement une valeur, puis donner un indice de GC ergonomie. Un autre indice est que si vous n'avez pas une bonne raison pour ajuster un paramètre. Et juste parce que certains soi-disant experts dit ce paramètre fonctionne le mieux est que le bruit, pas de son et certanly pas une raison."
Devis 2
"Comme je l'ai dit dans un précédents entrée de blog , de ne pas toucher les boutons, sauf si vous avez une très bonne raison de le faire. Si vous devez toucher les boutons, tred légèrement en utilisant uniquement ceux qui aident à l'ergonomie et pas ceux que la broche choses paralysant l'ergonomie capacité à répondre à vos temps de pause et le débit de buts."
Donc, je vous suggère d'aller retour brut
-serveur -Xms1280m -Xmx1280m -XX:MaxPermSize=512m -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-TraceClassUnloading -Dsun.io.useCanonCaches=false -Dsun.net.client.defaultConnectTimeout=60000 -Dsun.net.client.defaultReadTimeout=60000
Trouver si cela vous donne de meilleures performances. Si oui, s'en tenir à elle
BTW, avez -XX:MaxPermSize=378 m avez des questions ?
La version 1.6 de Java a beaucoup mieux à l'ergonomie de 1.4. Vous pouvez ajuster moins de 1,4
BTW, avez-vous essayer de Tomcat 6 ? Tomcat 6 fonctionne beaucoup mieux sur la version 6 de Java que Tomcat 5.5.
P. S : j'ai été en utilisant Tomcat pour un certain temps maintenant, et généralement essayer de donner de sun JDK gratuit règne avec peu de tuning ici et là.
viens de trouver un webinaire de tomcat développeurs sur le réglage du tomcat : http://springsource.com/node/555. un suivi pour le webinaire : http://blog.springsource.com/2008/10/14/optimising-and-tuning-apache-tomcat-part-2/
BR,
~Un
Comme quelqu'un qui est au milieu de vous embêter avec cela, je certainement n'ont pas de réponses définitives, en particulier à la manière dont l'application spécifique de ce genre de chose est. Une bonne référence, vous avez probablement vu, c'est ici:
http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html
Cependant,c'est une assez longue liste de paramètres de la jvm, ce qui suggère qu'il est probablement inutile paramètres fixés, en particulier étant donné que vous disposez de plusieurs options de débogage (PrintGCDetails, PrintGCTimeStamps, TraceClassUnloading) qui ne peut pas être bon sur une production de l'app. 60 deuxième délais d'attente peuvent aussi manger des ressources. "server" est par défaut, mais ne fera aucun mal.
Comment fonctionne l'exécution de l'application avec un minimum de paramètres de réglage (jvm taille, MaxPermSize)?
Vous pouvez également jeter un oeil à la modification de la fonction min/max nombre de threads que Tomcat va utiliser pour gérer les demandes en
conf/server.xml
:Une règle de base que j'avais entendu dans un travail précédent a été que le maxThreads doit être égale à la quantité de connexions simultanées vous attendre à gérer. Je ne suis pas sûr de la façon scientifique que la demande est bien, même si je pense certainement qu'il ne fait sens que vous ne souhaitez pas que les clients bloqués en attente d'un thread pour gratuit jusqu'à la poignée de leur demande..
Il peut également être intéressant d'expérimenter avec un autre JVM (comme JRockit) pour voir si les différences dans la collecte des ordures modèle sont bien adaptés à votre application.