He creado un servidor de mensajes personalizado en Java que toma una secuencia de mensajes y entrega cada mensaje a su cliente (1: 1, soltar mensaje si no está conectado, muy simple). Estoy ejecutando Tomcat 7 en Win7x64 & Java 7 y estoy usando el conector NIO (implementado un servlet Comet). Funciona muy bien, pero ahora estoy buscando escalar esa bestia y actualmente estoy viendo unos 85 kb de RAM asignados para cada cliente conectado. 10.000 clientes @ por debajo de 900MB y escalado linealmente. (No estoy haciendo otra cosa más que mantener la conexión aún). Eso es bastante en mi opinión, por lo que me pregunto si hay algunos ajustes para hacer que Tomcat o Java guarden más memoria con su impl de NIO. Todas las configuraciones de Tomcat que probé hasta ahora no afectaron esto en absoluto.minimizar la huella de memoria "por conexión" de Tomcat
¿Alguien tiene experiencia en cómo poner a Java o Tomcat en una dieta de memoria con respecto a las conexiones de socket?
ACTUALIZACIÓN: Ahora tengo menos de 70kb/conexión al recortar los buffers de socket y algunas otras partes internas de tomcat. No estoy seguro de cómo esto ahora influye en el rendimiento. También lo probé en 32 bits/64 bits con el mismo resultado.
¿Cómo midió 85kb por cliente? – dash1e
Hice una pequeña prueba de carga y conecté 10.000 clientes. En el código del servidor, hice después de cada 100 clientes un System.gc() y luego imprimí Runtime.totalMemory() - Runtime.freeMemory() en la consola. – Daniel
Hola. ¿Puedes compartir tus mejores configuraciones de Tomcat/JVM? Además, ¿usaste el conector NIO? 10x – JRun