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?

¿Fue útil?

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,

  1. Si ejecuta Apache como front-end, use mod_jk . Su rendimiento es mucho mejor que mod_proxy .
  2. Si sirve HTTP directamente o usa mod_proxy, use el conector NIO en Tomcat 6.
  3. Asegúrese de que su grupo de subprocesos (maxThreads) sea lo suficientemente grande, el valor predeterminado es solo 200.
  4. 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).
  5. Utilice la agrupación de bases de datos (DBCP). Tenemos MySQL, el controlador JDBC es muy hablador.
  6. 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.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top