Ho creato un server di messaggi personalizzato in Java che accetta un flusso di messaggi e consegna ogni messaggio al proprio client (1: 1, elimina msg se non connesso - molto semplice). Sto eseguendo Tomcat 7 su Win7x64 & Java 7 e sto utilizzando il connettore NIO (implementato un servlet Comet). Funziona alla grande, ma ora sto cercando di ridimensionare quella bestia e attualmente sto vedendo circa 85kb di RAM allocata per ogni client connesso. 10.000 client @ meno di 900 MB e scalabilità lineare. (Non sto facendo nient'altro se non mantenendo la connessione ancora) Questo è molto secondo me, quindi mi chiedo se ci sono alcune modifiche per far sì che Tomcat o Java risparmino più memoria con i loro impl di NIO. Tutte le impostazioni Tomcat che ho provato finora non hanno avuto alcun effetto su questo.minimizza l'ingombro di memoria "per connessione" di Tomcat
Qualcuno ha esperienza su come mettere Java o Tomcat su una dieta di memoria per quanto riguarda le connessioni socket?
AGGIORNAMENTO: Ora sono inferiore a 70kb/connessione troncando i buffer di socket e alcuni altri interni di tomcat. Non sono sicuro di come questo influenzi ora il throughput. Ho anche provato su linux a 32 bit/64 bit con lo stesso risultato.
Come hai misurato 85kb per client? – dash1e
Ho eseguito un piccolo test di carico e collegato 10.000 client. Nel codice server ho fatto dopo ogni 100 client un System.gc() e poi stampato Runtime.totalMemory() - Runtime.freeMemory() sulla console. – Daniel
Ciao. Puoi condividere le tue migliori impostazioni Tomcat/JVM? Inoltre, hai usato il connettore NIO? 10x – JRun