Domanda

Sto facendo lo stress test con JMeter sull'applicazione web (costruita con Spring, Struts2 REST, usa PostgreSQL).

Sto simulando lo scenario dell'utente tipico con la mia app:

4 OTTIENI, 3 INSERISCI, 20 AGGIORNA le chiamate.

Specifiche del server:

Intel Xeon X5365 3GHz a 4 core

8 GB di RAM

singolo disco SATA da 320 GB

Sistema operativo: Ubuntu 8.10 a 32 bit

DB: Postgresql 8.4

Tomcat 6.0.18

Java 1.6.0_14

I risultati mostrano che il server gestirà circa 130 transazioni simultanee. Questo numero è possibile? Ci sono risultati online da confrontare con i miei?

È stato utile?

Soluzione

Il collo di bottiglia sarà nel tuo database, quindi questo è molto difficile da confrontare senza conoscere le prestazioni del tuo database.

Abbiamo una macchina simile (tranne con 16 GB di RAM, con Tomcat 5.5). Nel carico di picco, può facilmente servire 256 connessioni simultanee. Stiamo discutendo di cambiare maxThreads in 512.

Alcuni suggerimenti per la messa a punto,

  1. Se esegui Apache come front-end, usa mod_jk . Le sue prestazioni sono molto migliori di mod_proxy .
  2. Se si serve direttamente HTTP o si utilizza mod_proxy, utilizzare il connettore NIO in Tomcat 6.
  3. Assicurati che il tuo pool di thread (maxThreads) sia abbastanza grande, il valore predefinito è solo 200.
  4. Rendi Tomcat senza stato. In particolare, non utilizzare HttpSession. Lo stato può causare perdita di memoria nell'app e degradare gradualmente le prestazioni. Invia tutto il tuo stato al database o al client (cookie).
  5. Utilizza il pool di database (DBCP). Abbiamo MySQL, il driver JDBC è molto loquace.
  6. Se si esegue un'istanza di JMeter, potrebbe diventare il collo di bottiglia. Esegui più slave da reti diverse per simulare il carico di produzione reale.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top