En el curso de perfilar una aplicación Java de 64 bits que está teniendo algunos problemas, noto que el generador de perfiles en sí (YourKit) está utilizando cantidades verdaderamente colosales de memoria. Lo que tengo en la secuencia de comandos de lanzamiento YourKit es:La estimación del tamaño del montón de JVM máxima de seguridad en Java de 64 bits
JAVA_HEAP_LIMIT="-Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m"
Ingenuamente, asumiendo cierta sobrecarga, esto me lleva a suponer que YourKit va a usar un máximo de algo tal vez un poco más de cuatro GB. Sin embargo, lo que realmente veo en PS es:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
dmoles 31379 4.4 68.2 14440032 8321396 ? Sl 11:47 10:42 java -Xmx3072m -XX:PermSize=256m -XX:MaxPermSize=768m -XX:+HeapDumpOnOutOfMemoryError -Dyjp.probe.table.length.limit=20000 -Xbootclasspath/a:/home/dmoles/Applications/yjp-9.5.6/bin/../lib/tools.jar -jar /home/dmoles/Applications/yjp-9.5.6/bin/../lib/yjp.jar
Eso es un tamaño virtual de casi 14 GB y un tamaño residente de casi 8 GB - casi 3 veces la pila de Java.
Ahora, tengo suficiente memoria en mi cuadro de desarrollo para ejecutar esto, pero volviendo al problema de memoria original que estoy tratando de diagnosticar: ¿Cómo puedo saber con cuánto montón de Java tengo que jugar?
Claramente, si el cliente tiene, digamos, 16 GB de RAM física, no es una gran idea para mí decirles que configuren -Xmx
en 16 GB.
Entonces, ¿qué es un número razonable? 12 GB? 8 GB?
¿Y cómo lo calculo?
+1 por decir que es una buena idea estimar cuánto montón necesita la aplicación e ir desde allí. La pregunta "¿cómo lo estimo?" Me recuerda la publicación de Eric Lippert sobre [la tragedia de la felicidad del hilo] (http://blogs.msdn.com/b/ericlippert/archive/2004/02/15/the-tragedy- of-thread-happiness-disease.aspx). –
@AdamMihalcin Ouch. :) –
@ AdamMihalcin Es un buen consejo, pero hay dos lados de la moneda.Cabezas (estimando cuánto necesita la aplicación), "aquí está la cantidad de usuarios que esperamos, ¿cuánto servidor deberíamos comprar?" Tails es, "aquí tenemos la cantidad de servidores que tenemos: ¿cuántos usuarios deberíamos esperar poder manejar antes de que se quede sin memoria?" –