Hemos migrado recientemente una aplicación web grande y de gran demanda a Tomcat 5.5 de Tomcat 4 y hemos notado un comportamiento peculiar de desaceleración que parece estar relacionado con las pausas de JVM. Para ejecutar nuestra aplicación y soportar una mayor carga a lo largo del tiempo en Tomcat 4, se configuraron y ajustaron muchos parámetros de JVM no tan estándar como se muestra a continuación, y espero que alguien con experiencia de ajuste de JVM de Tomcat pueda comentar cualquier cosa que pueda ser perjudicial a una instalación de Tomcat 5.5. Tenga en cuenta también que algunos de estos podrían ser transferidos de versiones anteriores de Java (estábamos ejecutando Tomcat 4 en Java 1.6 con estos parámetros con éxito durante algún tiempo, pero algunos pueden haberse introducido para ayudar a la recolección de basura en Java 1.4 que fue la base de nuestro Tomcat 4 se instala durante mucho tiempo, y ahora puede hacer más daño que bien).Parámetros de arranque de Tomcat 5.5 apropiados para sintonizar JVM para una aplicación web de gran demanda y gran demanda.
Algunas notas:
- huella de memoria de aplicaciones es alrededor de 1 GB, probablemente un poco más.
- CPU no es un problema - todas las máquinas servir a la aplicación (carga equilibrada) son < 30% de la CPU
- Las porciones de espacio libre en la memoria física en las máquinas.
- -XX: MaxPermSize = 512m fue el único parámetro agregado como parte de la actualización 5.5 y fue reactivo a un problema de espacio permgen fuera de memoria (que resolvió).
- se ejecuta en Java 1.6, el sistema operativo Solaris
-server -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
Tengo muchas JVM de producción ejecutándose con PrintGCDetails, siempre hay * algún * sobrecarga, pero insignificante por el valor que proporcionan. – Xailor