Visualización y configuración de parámetros de JVM

1 Mecanismo de gestión de memoria JVM
1.1 Memoria montón y no montón
        Según la declaración oficial: "La máquina virtual Java tiene un montón, y el montón es el área de datos en tiempo de ejecución. La memoria de todas las instancias de clase y matrices es de aquí Asignación. El montón se crea cuando se inicia la máquina virtual Java. "" La memoria fuera del montón en la JVM se denomina memoria que no es de montón ".
        Puede verse que JVM gestiona principalmente dos tipos de memoria: montón y no montón. En pocas palabras, el montón es la memoria accesible por el código Java, que está reservada para que la utilicen los desarrolladores; el no montón está reservado para su propio uso por la JVM,
        por lo que el área de métodos, el procesamiento interno de la JVM o la memoria necesarios para la optimización (como la caché de código compilado JIT), cada estructura de clase (como el grupo de constantes de tiempo de ejecución, los datos de campo y de método) y el código de los métodos y los métodos de construcción están todos en la memoria no dinámica. 

1.1.1 Asignación de memoria de
        pila La memoria de pila asignada inicialmente por JVM se especifica mediante -Xms, y el valor predeterminado es 1/64 de la memoria física; la memoria de pila máxima asignada por JVM se especifica mediante -Xmx, y el valor predeterminado es 1/4 de memoria física. Cuando la memoria de pila libre predeterminada es inferior al 40%, la JVM aumentará la pila hasta el límite máximo de -Xmx; cuando la
        memoria de pila libre es superior al 70%, la JVM reducirá la pila hasta el límite mínimo de -Xms . Por lo tanto, el servidor generalmente establece -Xms y -Xmx iguales para evitar ajustar el tamaño del montón después de cada GC.
        Nota: Si no se especifica -Xmx o el valor especificado es demasiado pequeño, la aplicación puede provocar el error java.lang.OutOfMemory. Este error proviene de la JVM y no es Throwable y no se puede detectar con try ... catch. 
1.1.2 Asignación de memoria no
        dinámica JVM utiliza -XX: PermSize para establecer el valor inicial de la memoria no dinámica, el valor predeterminado es 1/64 de la memoria física; XX: MaxPermSize establece el tamaño de la memoria no dinámica máxima, el valor predeterminado es 1/4 de la memoria física. (Hay otro dicho: el valor predeterminado de MaxPermSize está relacionado con la opción -server -client
. El MaxPermSize predeterminado en la opción -server es 64m, y el MaxPermSize predeterminado en la opción -client es 32m.
        El nombre completo del espacio PermGen en el mensaje de error anterior es el espacio de generación permanente, que se refiere al área de almacenamiento permanente de la memoria. Configurar XX: MaxPermSize demasiado pequeño causará java.lang.OutOfMemoryError: el espacio de PermGen es la ganancia de memoria. 
        ¿Por qué se desborda la memoria? : 
(1) Esta parte de la memoria se utiliza para almacenar información de clase y meta. La clase se coloca en el área de espacio de PermGen cuando se carga, que es diferente del área de montón donde se almacena la instancia. 
(2) GC (Garbage Collection) no limpiará el espacio de PermGen durante el tiempo de ejecución del programa principal, por lo que si su APLICACIÓN carga una gran cantidad de CLASS, es probable que se produzca un error de espacio de PermGen.
        Este tipo de error es común cuando el servidor web compila previamente la JSP.

1.2 Límite de memoria JVM (máximo)
        Primero, la memoria JVM está limitada a la memoria física máxima real. Suponiendo que la memoria física es infinitamente grande, la memoria JVM máxima tiene una gran relación con el sistema operativo. En pocas palabras, aunque el procesador de 32 bits tiene 4 GB de espacio de memoria controlable, el sistema operativo específico dará un límite,
este límite es generalmente de 2 GB a 3 GB (generalmente 1.5G-2G en el sistema Windows y 1.5G-2G en el sistema Linux 2G-3G), y no habrá restricciones en procesadores por encima de 64 bits.

        ¿Por qué algunas máquinas pueden iniciar Eclipse después de que configuro -Xmx y -XX: MaxPermSize en 512M, pero algunas máquinas no pueden iniciarse?
A través de la introducción anterior a la administración de memoria de JVM, hemos aprendido que la memoria de JVM incluye dos tipos: memoria de pila y memoria que no es de pila. Además, la memoria máxima de JVM depende primero de la memoria física real y del sistema operativo. Por lo tanto, hay varias razones por las que el programa no se puede iniciar configurando los parámetros de VM:
1) El valor de -Xms en el parámetro es mayor que -Xmx, o el valor de -XX: PermSize es mayor que -XX: MaxPermSize;
2) El valor de -Xmx y -XX La suma de: MaxPermSize excede el límite máximo de la memoria JVM, como el límite máximo de memoria del sistema operativo actual o la memoria física real, etc. Hablando de memoria física real, una cosa a tener en cuenta aquí es que si su memoria es de 1024 MB, no es posible que se utilicen 1024 MB en el sistema real, porque parte de ella está ocupada por hardware.

2 Tipos de parámetros de JVM
2.1 Tipos de parámetros de JVM
1. Parámetros estándar (-)
Todas las implementaciones de JVM deben implementar las funciones de estos parámetros y son compatibles con versiones anteriores. Por ejemplo: -verbose: class (muestra la información relacionada de la clase cargada de jvm, cuando el jvm informa que no se puede encontrar la clase o que se puede diagnosticar el conflicto de clases); -verbose: gc (genera la situación relevante de cada GC) ; -verbose: jni (información relacionada con la salida sobre llamadas a métodos nativos, generalmente utilizado para diagnosticar mensajes de error de llamadas jni).
2. Parámetros no estándar (-X) por
defecto jvm para implementar las funciones de estos parámetros, pero no garantiza que se cumplan todas las implementaciones de jvm y no se garantiza la compatibilidad con versiones anteriores. Por ejemplo: -Xms512m; -Xmx512m; -Xmn200m; -Xss128k; -Xloggc: file (similar a la función -verbose: gc, excepto que la información relevante de cada evento de GC se registra en un archivo, la ubicación del archivo es la mejor para ser local, para evitar posibles problemas de red. Si aparece en la línea de comando al mismo tiempo que el comando detallado, prevalecerá el -Xloggc).
3. Parámetros no estables (-XX)
Este tipo de parámetro será diferente para cada implementación de jvm, y puede cancelarse en cualquier momento en el futuro y debe usarse con cuidado. Por ejemplo: -XX: PermSize = 64m; -XX: MaxPermSize = 512m.


2.2 Parámetros estándar
1, -help
2, -server -client
3, -version -showversion
4, -cp -classpath


2.3 Parámetros X Parámetros
no estandarizados
-Xint: Interpretación y ejecución
-Xcomp: Compila el código
nativo en el primer uso -Xmixed: Modo mixto, JVM decide si compila el código nativo por sí mismo


2.4 Parámetros XX Parámetros
no estandarizados
Relativamente inestable
Se utiliza principalmente para el ajuste de JVM y la
clasificación de parámetros Debug XX:
1.
Formato booleano : -XX: [+ -] <nombre> significa habilitar o deshabilitar el atributo de nombre
 como: -XX: + UseConcMarkSweepGC
    -XX: UseG1GC

2.
Formato no booleano : -XX: <nombre> = <valor> indica que el valor del atributo de nombre es valor. Por
ejemplo: -XX: MaxGCPauseMillis = 500
     XX: GCTimeRatio = 19

3. -Xmx -Xms
no es el parámetro X, pero el parámetro XX
-Xms es equivalente a -XX: InitialHeapSize
-Xmx es equivalente a -XX: MaxHeapSize

3 Vista de parámetros de JVM
3.1 Ver parámetros de tiempo de ejecución de JVM
-XX: + PrintFlagsInitial
-XX: + PrintFlagsFinal
-XX: + UnlockExperimentalVMOptions // Desbloquear parámetros experimentales
-XX: + UnlockDiagnosticVMOptions // Desbloquear parámetros de diagnóstico
-XX: + PrintCommandLineFlags // Imprimir parámetro de línea de comando

-XX: + UseSerialGC, el valor predeterminado de la máquina virtual que se ejecuta en modo Cliente, Serie + Serie antigua.
-XX: + UseParallelGC, el valor predeterminado de la máquina virtual que se ejecuta en modo Servidor, Parallel Scavenge + Serial Old (PS Mark Sweep).
-XX: + UseParNewGC, ParNew + Serial Old, están en desuso en JDK1.8 y se pueden usar en JDK1.7.
-XX: + UseParallelOldGC, Parallel Scavenge + Parallel Old.
-XX: + UseConcMarkSweepGC, ParNew + CMS + Serial Old.
-XX: + UseG1GC, G1 + G1, solo admite JDK1.7 14update y superior

java -XX: + PrintCommandLineFlags -version // Ver el recolector de basura predeterminado de jvm

3.2 Uso de parámetros
java -XX: + PrintFlagsInitial -version> PrintFlagsInitial.txt // Este comando tiene muchos valores, guárdelo en un archivo
java -XX: + PrintFlagsFinal -version> PrintFlagsFinal.txt  

3.3 jps Ver el proceso java
jps // Ver el proceso java
jps -l // Mostrar el nombre completo de la clase

3.4 Ver los parámetros de JVM en ejecución

jinfo -flags pid // Ver los parámetros que se han establecido
jinfo -flag InitialHeapSize pid // Ver la memoria de pila inicial
jinfo -flag MaxHeapSize pid // Ver la memoria de pila máxima
jinfo -flag PermSize pid // Ver el no asignado inicialmente heap memory
jinfo- flag MaxPermSize pid // Ver la asignación máxima permitida de memoria no heap
jinfo -flag NewSize pid // Ver la memoria inicial de la generación joven
jinfo -flag MaxNewSize pid // Ver la memoria máxima de la generación joven
jinfo -flag NewRatio pid // Ver la generación joven y el antiguo
Jinfo -flag SurvivorRatio pid // Ver la relación entre el área de Edén y el área de Superviviente en la generación joven
jinfo -flag MaxTenuringThreshold pid // Ver si el objeto se ha movido en el Área de sobrevivientes N veces antes de ser recolectada la basura, ingresa a la generación anterior

jinfo -flag UseSerialGC pid // Ver el recolector en serie
jinfo -flag UseParallelGC pid // Ver el recolector paralelo
jinfo -flag UseParNewGC pid // Ver el recolector paralelo
jinfo -flag UseParallelOldGC pid // Ver el recolector paralelo
jinfo -flag UseConcMarkSweepGC / / Verifique el recolector CMS
jinfo -flag UseG1GC pid // Verifique el recolector G1
jinfo -flag PrintGCDetails pid // Verifique si se imprime el registro de GC

Ver la configuración de la memoria JVM

jmap -heap pid> 1.txt // Hay muchos parámetros, guardar en archivo 


4 Herramientas comunes de JVM
4.1 jps
jps // Ver el proceso java
jps -l // Mostrar el nombre completo de la clase

4.2 jinfo
jinfo -flag InitialHeapSize pid // Ver la memoria de pila inicial
jinfo -flag MaxHeapSize pid // Ver la memoria de pila máxima
jinfo -flag PermSize pid // Ver la memoria no heap inicialmente asignada
jinfo -flag MaxPermSize pid // Ver la asignación máxima permitida Memoria
no dinámica jinfo -flags pid // Ver los parámetros que se han establecido
jinfo -flag UseConcMarkSweepGC pid // Ver el recolector de basura
jinfo -flag UseG1GC pid // Ver el recolector de basura
jinfo -flag UseParallelGC pid // Ver el recolector de basura

4.3 jmap

jmap -heap pid> 1.txt

5 Ajuste de Tomcat
5.1 La modificación del tamaño de la memoria de TomcatJVM en Linux
debe agregarse a catalina.sh en tomcat bin, antes de cygwin = false.
# Compatibilidad con sistemas operativos específicos. $ Var _ debe_ establecerse en verdadero o falso.
JAVA_OPTS = "- Xms256m -Xmx512m -Xss1024K -XX: PermSize = 128m -XX: MaxPermSize = 256m" 
cygwin = false


5.2 Modifique el tamaño de la memoria de Tomcat JVM en Windows
5.2.1 La versión descomprimida de Tomcat, debe iniciar Tomcat a través de startup.bat para cargar la configuración

Para agregar a catalina.bat en tomcat bin

rem Adivina CATALINA_HOME si no está definido
set CURRENT_DIR =% cd% agregado después

set JAVA_OPTS = -Xms1024m -Xmx1024m -Xmn = 256m -XX: PermSize = 128M -XX: MaxPermSize = 128m -Djava.awt.headless = true -XX: + UseSerialGC -XX: + PrintGCDetails -XX: + PrintGCTimeStamps -Xloggc: D : \ log \ jvm \ gc.log

5.2.2 Versión instalada de Tomcat, sin catalina.bat


Si no hay catalina.bat en la versión instalada de Tomcat, si tomcat 6 está registrado como un servicio de Windows, o la versión instalada de tomcat se usa en windows2003 
, modifíquelo en /bin/tomcat6w.exe.

 

Supongo que te gusta

Origin blog.csdn.net/geekooler/article/details/100852538
Recomendado
Clasificación