java - maquina - efecto secundario para aumentar maxpermsize y el tamaño máximo de almacenamiento dinámico
aumentar memoria java (2)
¿Alguien puede explicar los efectos secundarios para aumentar el maxpermsize y el tamaño máximo de almacenamiento dinámico?
Sé que a veces aumentamos -Xmx cuando nos topamos con el problema de la memoria. Pero me pregunto si hay algún efecto secundario que deba tener en cuenta cuando aumentemos el -Xmx. ¿Y cómo el incremento de maxpermsize afecta el tiempo de ejecución?
Gracias.
Resuelto cambiando la configuración de abajo. Archivo -> Opciones -> Centro de confianza -> Configuración del centro de confianza -> Contenido externo -> Habilitar actualización automática para todos los enlaces del libro de trabajo.
--Gracias
Respuesta corta
Al duplicar el tamaño del montón de java, se duplica el tiempo de espera para las pausas de la recolección de basura, que con las tecnologías JVM actuales se convierten en varios segundos cuando el montón está en el orden de Gb. Parece que el recién lanzado Java 7 va a cambiar eso .
Respuesta larga
MaxPermSize es el tamaño máximo para el montón de generación permanente, un montón que contiene el código de bytes de las clases y se mantiene separado del montón de objetos que contiene las instancias reales. Una cosa a tener en cuenta en el caso de las aplicaciones web, es que en cada reintroducción en caliente este uso de la memoria aumentará con múltiples copias de las mismas clases. A menos que se especifique -XX: + CMSClassUnloadingEnabled.
Max Heap Size (-Xmx) y MaxPermSize deben configurarse teniendo en cuenta la cantidad de memoria que necesitan las clases e instancias de la aplicación, la memoria total del servidor y la memoria que necesitan otras aplicaciones.
Otro punto importante es que expandir la memoria desde el tamaño del montón mínimo (-Xms) es una operación costosa. Especialmente en el caso de las aplicaciones financieras esto podría significar retrasos. Con requisitos similares en tiempo real, podría ser una buena idea establecer -Xms y -Xmx con el mismo valor.
La siguiente charla puede ser de interés http://www.infoq.com/presentations/Java-without-the-GC-Pauses
De la charla puede demostrar que el efecto secundario de aumentar el montón más allá de un cierto límite de 2Gb, 10Gb, 100Gb, significa un tiempo de pausa más largo para la recolección de basura que podría detener todo por segundos o un minuto en caso de montones muy grandes.
Por esa razón, con la tecnología JVM actual, desea configurar el montón lo suficientemente grande como para ejecutar su aplicación, pero no demasiado grande. Una forma de encontrar el tamaño correcto, se puede establecer en el valor más grande posible, luego cortar a la mitad y seguir cortando a la mitad hasta que encuentre problemas, cuando lo haga, doble el último valor encontrado y manténgalo como el tamaño de pila elegido para la producción.
Por supuesto, este consejo se aplica a montones grandes, en el orden de Gb, si su aplicación funciona bien con 256 MB de memoria, solo conservaría ese valor sin más investigación.
Y finalmente para referencia aquí hay algunas configuraciones de ejemplo:
-Xms512m -Xmx512m -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled