Tengo 7 daemons de Java diferentes que corro (los 7) en 3 servidores diferentes. La línea de comandos de java tiene -Xmx2048m y -Xss1024k. En estos 3 servidores, los 21 procesos muestran poco menos de 2,5 GB para tamaño VIRT en la parte superior y superior. El tamaño RES varía de 300 a 1.9 GB según el daemon que sea.¿Qué causaría que un proceso de Java excediera en gran medida el límite Xmx o Xss?
Eso es todo lo que debería ser.
Ingrese el nuevo servidor. CPU más rápida, más RAM (16 GB en lugar de 8 GB), Java un poco más nuevo (1.6.0_10-b33 en los servidores antiguos, 1.6.0_31-b04 en el nuevo servidor). Ambos sistemas (y JVM) son de 64 bits.
Movió 2 de los daemons al nuevo servidor. En el nuevo servidor, dada la misma tarea, los daemons consumen mucho más CPU (aproximadamente el valor de un núcleo) y obtienen Less. (Movido desde 5110 procesadores en los sistemas antiguos a 5620 en el nuevo).
Más o menos un núcleo extra completo de uso de CPU (GC thread ??) y reporta 5 GB VIRT y 2 GB RES para un daemon y 10.5 GB VIRT y 2 GB RES para el otro daemon.
¿Alguna idea de lo que causaría que java ignore (o parezca ignorar si ese es el caso) los límites de memoria?
VIRT es la memoria virtual, que no tiene relación directa con el espacio del montón. Recomiendo leer las respuestas a esta pregunta: http://stackoverflow.com/questions/4893192/process-memory-vs-heap-jvm –
¿Intentó con la misma versión de Java en la máquina nueva? ¿Son ambos los mismos bit-ness? –
'Xmx' no especifica el uso de memoria de la JVM; especifica el tamaño máximo del conjunto de asignación de montón, que es solo uno de los grupos de memoria utilizados por la JVM. – skaffman