Guía de optimización de JVM (edición general)

La Máquina Virtual Java (JVM para abreviar) es una instancia virtual de "motor de ejecución" que ejecuta el código de bytes en un archivo de clase Java en un microprocesador. La forma en que ajusta su JVM puede afectar el rendimiento de WebLogic Server y su aplicación.

Tabla de factores de referencia de ajuste de JVM:

La siguiente tabla describe consideraciones generales de ajuste de JVM para WebLogic Server.

Factores de sintonización Referencia de información
Proveedor y versión de JVM Utilice únicamente JVM de producción certificadas que hayan sido certificadas con WebLogic Server. Esta versión de WebLogic Server solo admite JVM que cumplen con el estándar J2SE 5.0.
Ajustar el tamaño del montón y la recolección de basura Para obtener más información sobre el tamaño del montón de WebLogic Server, consulte Recolección de basura.
Elija el plan GC Dependiendo de su aplicación, existen varios esquemas de GC disponibles para administrar la memoria del sistema, como se describe en Elección de un esquema de recolección de basura.
JVM cliente/servidor híbrido WebLogic Server admite el uso de diferentes versiones de JVM para la implementación de clientes y servidores. Consulte la sección JVM de cliente/servidor híbrido en la página de soporte.
modelo de hilo UNIX Su elección del modelo de subprocesos de Solaris puede tener un impacto significativo en el rendimiento de su JVM en Solaris. Los detalles varían de JVM a JVM.

Tamaño del montón de VM y recolección de basura

  1. El montón de Java es donde se almacenan los objetos de los programas Java. Contiene objetos vivos, objetos inútiles y memoria libre. Cuando no se puede acceder a un objeto desde ningún puntero del programa, se considera "basura" y está listo para ser recolectado. Una mejor práctica es ajustar el tiempo de recolección de basura para que no represente más del 5% del tiempo de ejecución.

  2. El tamaño del montón de JVM determina la frecuencia y duración de la recolección de basura. La frecuencia adecuada de recolección de basura es específica de la aplicación y debe ajustarse después de analizar el tiempo y la frecuencia reales de recolección de basura. Si se establece un tamaño de montón mayor, la recolección completa de basura será más lenta pero ocurrirá con menos frecuencia. Si el tamaño del montón se establece adecuadamente según los requisitos de memoria, la recolección completa de basura es más rápida pero ocurre con más frecuencia.

  3. El objetivo de ajustar el tamaño del montón es minimizar el tiempo que la JVM dedica a realizar la recolección de basura y al mismo tiempo maximizar la cantidad de clientes que WebLogic Server puede manejar en un tiempo determinado. Para garantizar un rendimiento óptimo durante la prueba comparativa, puede establecer un valor de tamaño de montón más alto para garantizar que no se produzca recolección de basura durante la ejecución de la prueba comparativa.

  4. Si se queda sin espacio en el montón, es posible que obtenga el siguiente error de Java:

java.lang.OutOfMemoryError <<no stack trace available>>
java.lang.OutOfMemoryError <<no stack trace available>>
Exception in thread "main"
  1. Para modificar el valor del espacio del montón, consulte " 指定堆大小值" más adelante en este artículo.

  2. Para configurar WebLogic Server para detectar y manejar automáticamente condiciones de poca memoria cuando el espacio del montón es insuficiente:

WebLogic Server puede registrar automáticamente las condiciones de poca memoria observadas por el servidor. Detecta condiciones de poca memoria muestreando la memoria libre disponible una cierta cantidad de veces dentro de un intervalo de tiempo. Al final de cada intervalo, el promedio de memoria libre resultante se registra y se compara con el promedio obtenido para el siguiente intervalo. Si el valor promedio cae por un valor configurado por el usuario después de cualquier intervalo de muestreo, el servidor registra un mensaje de advertencia de memoria baja en el archivo de registro y establece el estado de salud del servidor en "Advertencia". Para obtener más información, consulte la ayuda de Oracle WebLogic Server Management Console.

Elija la solución de recolección de basura adecuada:

Diferentes JVM tienen diferentes esquemas de recolección de basura para administrar la memoria del sistema.

Por ejemplo, ciertos esquemas de recolección de basura son más adecuados para tipos específicos de aplicaciones. Una vez que comprenda la carga de trabajo de su aplicación y los diferentes algoritmos de recolección de basura utilizados por la JVM, podrá optimizar su configuración de recolección de basura.

Puede consultar el siguiente enlace para obtener una discusión detallada sobre las opciones de recolección de basura de JVM:

documento Enlace
Descripción general de las opciones de recolección de basura disponibles con HotSpot VM de Sun http://java.sun.com/docs/hotspot/gc5.0/gc_tuning_5.html
Descripción general completa de las opciones de recolección disponibles http://wireless.java.sun.com/midp/articles/garbagecolletion2/
Discusión de las soluciones de recolección de basura disponibles en JRockit JDK http://download.oracle.com/docs/cd/E13150_01/jrockit_jvm/jrockit/webdocs/index.html
Consejos de HP para la recogida de basura http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1604,00.html

Determine el tamaño del montón mediante la recolección de basura detallada

La opción de recolección de basura detallada (verbosegc) puede ayudarlo a medir con precisión el tiempo y los recursos utilizados por la recolección de basura. Para determinar el tamaño de montón más eficiente, puede activar la recolección de basura detallada y redirigir la salida a un archivo de registro con fines de diagnóstico.

paso:

  1. Supervise el rendimiento de WebLogic Server bajo carga máxima mientras ejecuta su aplicación.

  2. Utilice la opción -verbosegc para activar la salida detallada de recolección de basura para su JVM y redirigir tanto el error estándar como la salida estándar a archivos de registro. Esto coloca la información del volcado de subprocesos en el contexto correcto con la información y los mensajes de error de WebLogic Server y proporciona un registro más útil para fines de diagnóstico.

Por ejemplo, en Windows y Solaris, ingrese el siguiente comando:

java -ms32m -mx200m -verbosegc -classpath $CLASSPATH
-Dweblogic.Name=%SERVER_NAME% -Dbea.home="C:\Oracle\Middleware"
-Dweblogic.management.username=%WLS_USER%
-Dweblogic.management.password=%WLS_PW%
-Dweblogic.management.server=%ADMIN_URL%
-Dweblogic.ProductionModeEnabled=%STARTMODE%
-Djava.security.policy="%WL_HOME%\server\lib\weblogic.policy" weblogic.Server >> logfile.txt 2>&1

logfile.txt 2>&1El comando redirige tanto el error estándar como la salida estándar a un archivo de registro.

En HPUX, utilice las siguientes opciones para redirigir stderr stdout a un archivo:

-Xverbosegc:file=/tmp/gc$$.out

Donde $$ se asigna al ID de proceso (PID) del proceso Java. Dado que el resultado incluye la marca de tiempo de la ejecución de la recolección de basura, puede inferir con qué frecuencia se produjo la recolección de basura.

Analice los siguientes puntos de datos:

1. ¿Con qué frecuencia se realiza la recolección de basura? En el archivo weblogic.log, compare las marcas de tiempo de la recolección de basura.

2. ¿Cuánto tiempo lleva la recolección de basura? 完整的垃圾回收时间不应超过3到5秒.

3. ¿Cuál es el uso promedio de memoria? En otras palabras, ¿hasta qué punto se recupera el montón después de cada recolección completa de basura? Si el montón es siempre 恢复到85%的空闲状态, tal vez 需要减小堆大小.

4. Verifique el tamaño del montón de nueva generación (Sun) o el tamaño del vivero (Jrockit).

5. Asegúrese de que el tamaño del montón no sea mayor que la RAM libre disponible en el sistema.

Para evitar que el sistema mueva datos de la memoria al área de intercambio del disco duro (es decir, intercambio de páginas), configure un tamaño de memoria dinámica mayor si es posible. La cantidad de RAM libre disponible en su sistema depende de la configuración del hardware de su computadora y de la cantidad de memoria requerida por otros programas en ejecución. Se recomienda consultar al administrador del sistema para determinar cuánta RAM libre hay disponible en el sistema. En resumen, es necesario aumentar el tamaño de la memoria dinámica para mejorar el rendimiento sin ocupar excesivamente los recursos del sistema.

6. Si descubre que el sistema dedica demasiado tiempo a la recolección de basura (la memoria virtual asignada excede la capacidad de procesamiento de la RAM), puede reducir el tamaño del montón. Generalmente, el 80% de la RAM disponible (sin incluir la parte utilizada por el sistema operativo u otros procesos) debe usarse para la JVM.

7. Si descubre que queda mucha RAM libre disponible, ejecute más instancias de WebLogic Server en la máquina.

Además, el proveedor de JVM puede ofrecer otras opciones para imprimir un informe completo de recolección de basura. Por ejemplo, puede utilizar JRockit JVM的-Xgcreport选项, para imprimir un informe detallado de recolección de basura cuando se complete el programa.

Nota especial: el objetivo de dimensionar el montón es minimizar el tiempo que le toma a la JVM realizar la recolección de basura y al mismo tiempo maximizar la cantidad de clientes que WebLogic Server puede manejar en un tiempo determinado.

Especificar el valor del tamaño del montón

El valor del tamaño del montón de Java tiene un gran impacto en el rendimiento del sistema. Esta sección describe las opciones de la línea de comando para definir valores de tamaño de montón. El valor del tamaño del montón de Java se debe especificar cada vez que inicia una instancia de WebLogic Server. Esto se puede hacer a través de la línea de comando de Java o modificando los valores predeterminados en el script de inicio de muestra proporcionado con la distribución WebLogic.

Consejos para ajustar el tamaño del montón

Principios generales de ajuste para el tamaño del montón de VM:

  1. El tamaño del montón se debe establecer en un valor tal que la cantidad máxima de memoria utilizada por la VM no exceda la RAM física disponible. Si se excede este valor, el sistema operativo comienza a paginar y el rendimiento se degrada significativamente. La VM siempre usa más memoria que el tamaño del montón. Además de la configuración del tamaño del montón, se asigna memoria adicional para funciones internas de la VM, bibliotecas nativas fuera de la VM y memoria de generación permanente (solo Sun VM: memoria utilizada para almacenar clases y métodos).

  2. Cuando se utiliza un esquema de recolección de basura generacional, el tamaño de la generación joven no debe exceder la mitad del tamaño total del montón de Java. Normalmente, entre el 25% y el 40% del tamaño del montón es suficiente.

  3. En un entorno de producción, establezca los tamaños de montón mínimo y máximo en el mismo valor para evitar desperdiciar recursos de VM en el crecimiento y reducción constante del montón. Este principio también se aplica al tamaño del montón de la generación joven (Sun) o al tamaño del vivero (Jrockit).

Parámetros opcionales para la configuración del tamaño del montón de JRockit JVM

Para diferentes aplicaciones, necesitamos ajustar las opciones de tamaño del montón de JRockit de acuerdo con las condiciones reales para obtener el mejor rendimiento. Estas opciones incluyen configurar el tamaño del espacio del montón de nueva generación, el tamaño del montón inicial y mínimo, el tamaño del montón máximo y el método de recolección de basura. Al configurar estas opciones adecuadamente, podemos hacer que la aplicación alcance un equilibrio óptimo entre la recolección de basura y la utilización de la memoria, mejorando así el rendimiento del sistema.

Tarea Opciones describir
Establecer el tamaño del espacio del montón de nueva generación -Xns Establezca el tamaño del montón de la generación joven lo más grande posible mientras mantiene tiempos de pausa de recolección de basura aceptables. Esto es importante para aplicaciones que crean una gran cantidad de objetos temporales. El tamaño máximo del montón de nueva generación no puede exceder el 95% del tamaño máximo del montón.
Establecer el tamaño de montón inicial y mínimo -Xms Oracle recomienda establecer el tamaño de montón mínimo (-Xms) en el tamaño de montón máximo (-Xmx) para reducir la frecuencia de recolección de basura.
Establecer el tamaño máximo del montón -Xmx Si el valor máximo del montón se establece bajo en relación con la cantidad real de datos en vivo, el rendimiento disminuirá porque se requerirá una recolección frecuente de basura.
Establecer el método de recolección de basura -Xgc: paralelo Realice una optimización adaptativa lo antes posible mientras se ejecuta su aplicación Java.
Realizar optimizaciones adaptativas lo antes posible en el tiempo de ejecución de una aplicación Java. -XXagresivo:memoria Para ello, el detector de cuellos de botella funciona inicialmente a una frecuencia más alta y luego disminuye gradualmente la frecuencia. Esta opción también le indica a JRockit que utilice agresivamente la memoria disponible.

Por ejemplo, cuando usa la línea de comando para iniciar una instancia de WebLogic Server, puede especificar el valor del tamaño del montón de VM JRockit de la siguiente manera:

java -Xns10m -Xms512m -Xmx512m

Las unidades predeterminadas para estos valores son bytes:
agregue este ejemplo después del valor 字母'k'或'K'表示千字节, 'm'或'M'表示兆字节, 'g'或'G'表示千兆字节。
para asignar 10 megabytes de memoria al tamaño de almacenamiento dinámico de la generación joven y 512 megabytes de memoria a la suma mínima de la instancia de WebLogic Server que se ejecuta en la JVM. Tamaño máximo de almacenamiento dinámico .

Otros documentos Enlace
Detalles sobre cómo configurar el tamaño de montón apropiado para JRockit JVM de WebLogic http://download.oracle.com/docs/cd/E13150_01/jrockit_jvm/jrockit/webdocs/index.html
Otras opciones de máquina virtual JRockit http://download.oracle.com/docs/cd/E13150_01/jrockit_jvm/jrockit/jrdocs/refman/index.html

Parámetros opcionales para la configuración del tamaño del montón de VM Java HotSpot

Tarea Opciones Comentario
Establecer el tamaño del espacio del montón de nueva generación -XX:NuevoTamaño Normalmente, establezca -XX:NewSize en un cuarto del tamaño del montón. Aumente el valor de esta opción para manejar una mayor cantidad de objetos de corta duración. A medida que aumenta la cantidad de procesadores, asegúrese de aumentar adecuadamente el tamaño del montón de la generación joven. La asignación de memoria puede ocurrir en paralelo, pero la recolección de basura no.
Establecer el tamaño máximo del montón de la generación joven -XX:MaxNuevoTamaño Establezca el tamaño máximo del montón de la generación joven.
Establecer una nueva proporción de tamaño de montón -XX: Ratio de supervivencia El área Cenozoica se divide en tres subáreas: el Edén y dos espacios de supervivientes de igual tamaño. Configure la relación de tamaño del espacio Eden/Survivor. Intente establecer este valor en 8 y supervise la recolección de basura.
Establecer el tamaño del montón inicial -Xms Normalmente, el tamaño del montón inicial (-Xms) se establece en el tamaño del montón máximo (-Xmx) para reducir la cantidad de recolecciones de basura.
Establecer el tamaño máximo del montón -Xmx Establezca el tamaño máximo del montón.
Configurar un montón grande y memoria compartida -XX:+UsoISM -XX:+Montón agresivo Consulte la documentación del proveedor para conocer las opciones de ajuste de JVM específicas de la plataforma.

Por ejemplo, al iniciar una instancia de WebLogic Server usando la línea de comando de Java, puede especificar el valor del tamaño del montón de HotSpot VM de la siguiente manera:

java -XX:NewSize=128m -XX:MaxNewSize=128m -Xms512m -Xmx512m

Este ejemplo establece el tamaño del montón de la generación joven en 128 megabytes y establece los tamaños de montón mínimo y máximo en 512 megabytes.

Java HotSpot VM también proporciona otras opciones de línea de comandos que se pueden utilizar para mejorar el rendimiento de la VM. La forma exacta en que utilice estas opciones depende de cómo esté codificada su aplicación.

Para determinar qué opciones funcionan mejor para su aplicación, puede realizar pruebas en las JVM del cliente y del servidor. Sun Microsystems proporciona información sobre las opciones de la línea de comandos y las variables de entorno que afectan las características de rendimiento de la máquina virtual Java HotSpot.

Para obtener más información, consulte Opciones de VM de HotSpot

Supongo que te gusta

Origin blog.csdn.net/qq_42183962/article/details/132316355
Recomendado
Clasificación