2011-08-01 14 views
28

¿Alguien puede explicar los efectos secundarios para aumentar el tamaño maxpermsize y el tamaño máximo de almacenamiento dinámico?efecto secundario para aumentar maxpermsize y el tamaño máximo de almacenamiento dinámico

Sé que, a veces, aumentamos -Xmx cuando nos topamos con el problema de outofmemory. 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.

Respuesta

80

Respuesta corta

Duplicar java tamaño de la pila, se duplica el tiempo de espera para las pausas de recolección de basura, que con las tecnologías actuales de JVM sido de varios segundos cuando la pila está en el orden Gb. Parece que el recién lanzado Java 7 is going to change that.

Respuesta larga

El 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 los casos 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.

Tamaño máximo del montón (-Xmx) y MaxPermSize tienen que establecerse teniendo en cuenta la cantidad de memoria que se necesita por las clases de la aplicación e instancias, la memoria total del servidor y la memoria necesaria por otras aplicaciones.

Otro punto importante es que expandir la memoria desde el Tamaño de 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 conversación se puede evidenciar que el efecto secundario de aumentar el montón más de un cierto límite de 2 Gb, 10 Gb, 100 Gb, significa más largo el tiempo de pausa para la recolección de elementos que podrían detenga todo por segundos o un minuto en caso de montones muy grandes.

Por esa razón, con la tecnología JVM actual, desea establecer el montón lo suficientemente grande como para ejecutar su aplicación, pero no demasiado grande. Una forma de encontrar el tamaño correcto, puede establecerlo en el mayor valor posible, luego cortar a la mitad y seguir cortando a la mitad hasta que encuentre problemas, cuando lo haga, duplique el último valor encontrado y manténgalo como el tamaño de pila elegido para producción

Este consejo por supuesto se aplica a montones grandes, en el orden Gb, si su aplicación funciona bien con 256Mb de memoria, solo mantendría ese valor sin más investigación.

Y finalmente para referencia aquí son algunas configuraciones de ejemplo:

-Xms512m -Xmx512m -XX:MaxPermSize=256m -XX:+CMSClassUnloadingEnabled 
+0

¡Gracias por el ejemplo de referencia! Copiar y pegar no funcionó para mí por alguna razón (máquina virtual), para aquellos que podrían preguntarse por qué no funciona ... – Fico

+0

@Fico ¿Quizás no haya suficiente espacio para copiar y pegar en el montón de su máquina virtual? –

-3

resuelve cambiando la configuración a continuación. Archivo -> Opciones -> Centro de confianza -> Configuración del centro de confianza -> Contenido externo -> Habilitar la actualización automática para todos los enlaces del Libro de trabajo.

--Gracias

Cuestiones relacionadas