Tomcat funciona terriblemente sin razón aparente

Tomcat funciona terriblemente sin razón aparente

Estamos ejecutando una aplicación de juego .WAR en Tomcat 6 en un servidor Amazon EC2, procesador de 8 núcleos y 7 GB de RAM. La aplicación utiliza una base de datos MySQL alojada en Amazon RDS.

Se tarda mucho en acceder a esta aplicación de Facebook cuando solo entre 20 y 30 usuarios la juegan. Gran diferencia entre 1 y 2 usuarios. El .WAR completo pesa ~4 MB y todo el contenido estático está alojado en otro lugar.

El servidor nunca ha estado cerca de quedarse sin RAM. La utilización de la CPU nunca ha sido superior al 13,5-14%. Incluso con ~500 usuarios, eso ralentizó todo por completo hasta paralizarlo. El número de subprocesos o grupos de subprocesos no está cerca de alcanzar su máximo. Aumenté maxthreads pero no hizo una diferencia notable.

Mi teoría es que Tomcat solo puede usar un núcleo de procesador, lo que explicaría por qué se detuvo a pesar de que el uso de la CPU se mantuvo estable en un 13-14% en el pico de actividad.
Pero me cuesta entender por qué solo usaría un núcleo de CPU. No hay límite de procesador en server.xml. La aplicación contiene varios servlets (4 o 5). No se menciona SingleThreadModel en el código Java.

¿QUÉ podría estar causando que la aplicación se ejecute extremadamente lenta? Si solo hay entre 1 y 5 personas en la aplicación, la aplicación funciona bien. Con 20-30 personas apenas es contactable.

Respuesta1

Esto puede ser un defecto en el diseño de la aplicación. También tenemos una aplicación que ejerce el mismo comportamiento. Una parte importante de su código está sincronizada, por lo que no importa cuántas CPU le demos, efectivamente se ejecuta en un solo subproceso. No puede hacer prácticamente nada en esta situación aparte de ejecutar varias instancias de la misma aplicación y equilibrar la carga entre ellas.

información relacionada