Promedio de usuarios simultáneos máximos en Tomcat
-
06-07-2019 - |
Pregunta
Estoy haciendo una prueba de esfuerzo con JMeter
en la aplicación web (construida con Spring, Struts2 REST, usa PostgreSQL).
Estoy simulando el escenario típico del usuario con mi aplicación:
4 GET, 3 INSERT, 20 llamadas ACTUALIZAR.
Especificaciones del servidor:
4core Intel Xeon X5365 3GHz
8GB de RAM
disco SATA único de 320 GB
SO: Ubuntu 8.10 32 bits
DB: Postgresql 8.4
Tomcat 6.0.18
Java 1.6.0_14
Los resultados muestran que el servidor manejaría alrededor de 130 transacciones concurrentes. ¿Es posible este número? ¿Hay algún resultado en línea para comparar con el mío?
Solución
El cuello de botella estará en su base de datos, por lo que es muy difícil compararlo sin conocer el rendimiento de su base de datos.
Tenemos una máquina similar (excepto con 16GB de RAM, ejecutando Tomcat 5.5). En carga máxima, puede servir fácilmente 256 conexiones simultáneas. Estamos debatiendo cambiar los maxThreads a 512.
Algunos consejos de ajuste,
- Si ejecuta Apache como front-end, use
mod_jk
. Su rendimiento es mucho mejor quemod_proxy
. - Si sirve HTTP directamente o usa mod_proxy, use el conector NIO en Tomcat 6.
- Asegúrese de que su grupo de subprocesos (maxThreads) sea lo suficientemente grande, el valor predeterminado es solo 200.
- Hacer que Tomcat no tenga estado. Especialmente, no use HttpSession. El estado puede causar pérdida de memoria en la aplicación y degradar el rendimiento gradualmente. Empuje todo su estado a la base de datos o al cliente (cookies).
- Utilice la agrupación de bases de datos (DBCP). Tenemos MySQL, el controlador JDBC es muy hablador.
- Si ejecuta una instancia de JMeter, puede convertirse en el cuello de botella. Ejecute múltiples esclavos desde diferentes redes para simular una carga de producción real.