Geekflare cuenta con el apoyo de nuestra audiencia. Podemos ganar comisiones de afiliados comprando enlaces en este sitio.
Comparte en:

10 opciones importantes de JVM para el sistema de aplicación JAVA de producción

opciones de java
Escáner de seguridad de aplicaciones web Invicti – la única solución que ofrece verificación automática de vulnerabilidades con Proof-Based Scanning™.

Conozca las opciones esenciales de JVM (Java Virtual Machine) para un mejor rendimiento y depuración.

Si eres un Desarrollador de Java o administrador de middleware, entonces debe saber qué significan las opciones de JVM junto con su importancia y cómo afectan a su aplicación. Averigüémoslos.

Descripción general de las opciones de JVM

Hablando de las opciones de JVM, existen tres tipos de opciones que puede incluir en su JVM: opciones estándar, no estándar y avanzadas. Si prueba una opción avanzada, siempre usa la opción con -XX . Del mismo modo, si está aplicando una opción no estándar, utilice -X . Las opciones estándar no anteponen nada a la opción.

¿Qué opciones de JVM utiliza su aplicación?

Si la aplicación se ejecuta en Linux, puede usar ps -ef | grep java  para identificar el proceso de Java y mirar las opciones de JVM impresas como argumentos de proceso. Si hay más de un proceso Java en el sistema, es posible que deba utilizar una palabra clave que sea exclusiva de su aplicación Java.

Si su argumento es demasiado largo, intente usar ps -auxww ya que este comando también mostrará una larga lista de argumentos.

Después de tener una lista de indicadores de JVM, puede tener una idea sobre el comportamiento de cualquier aplicación Java, por ejemplo, Tomcat.

Java heap size

 -Xms- establecer el tamaño del montón de Java inicial
 -Xmx- establecer el tamaño máximo del montón de Java
 -Xss- establecer el tamaño de la pila de subprocesos de Java

-Xms - Esta opción es para definir el tamaño de pila inicial para JVM, por ejemplo,Xms2048m lo que significa que un tamaño de pila inicial de JVM es de 2 GB aproximadamente. Entonces, cuando se inicia una JVM, la memoria del montón será así de grande. ¡Sorprendentemente sí! Esto se lleva a cabo para evitar el cambio de tamaño durante el inicio y mejorar el tiempo de inicio de JVM.

-Xmx - Esta opción es para definir el tamaño máximo de pila de JVM, por ejemplo,Xmx2048m lo que significa que el tamaño máximo de almacenamiento dinámico de JVM será solo de 2 GB.

Esencialmente siempre tendrás-Xmsy-Xmx juntos.

Set Percentage of the heap

-XX: MaxHeapFreeRatio : Establece el porcentaje máximo de montón libre después de GC para evitar la reducción.

-XX: MinHeapFreeRatio - establece el porcentaje mínimo de montón libre después de GC para evitar la expansión; para monitorear el uso del montón, puede usar JCosole.

Enable class data sharing

Especificar Xshareclasses opción para habilitar el intercambio de datos de clase en una caché de clase compartida. La JVM se conecta a una caché existente o crea una caché si no existe. Puede tener varias cachés y puede especificar la caché correcta agregando una subopción a la -Xshareclasses .

PermGen Size

Las opciones de JVM anteriores definen el tamaño de la memoria dinámica, pero -XX:PermSize es definir el tamaño del espacio de PermGen, donde se guardan el grupo de cadenas y los metadatos de la clase. Esta opción es particularmente efectiva para un servidor web como Tomcat, que a menudo carga clases de la aplicación web durante la implementación.

Por cierto, vale la pena darse cuenta de que el espacio de PermGen lo ocupa Metaspace en Java 8, y esta opción no es aplicable si está ejecutando JRE 8 JVM.

Print GC

-verbose: gc - registra las ejecuciones del recolector de basura y el tiempo que tarda. 
-XX: + PrintGCDetails - incluye los datos de -verbose: gc pero también agrega información sobre el tamaño de la nueva generación y tiempos más precisos.
-XX: -PrintGCTimeStamps - Imprimir marcas de tiempo en la recolección de basura.

Estas opciones de JVM se utilizan para habilitar el registro de recolección de basura, que es muy eficaz para la operación sensible a la latencia. Solíamos estar en sistemas en los que buscamos latencias de microsegundos y, si lo reconoce, una gran recolección de basura puede durar varios milisegundos.

Por lo tanto, optamos por una arquitectura libre de GC como el disruptor LMAX, pero de hecho, si no opta por una aplicación ultra sensible a la latencia, esta práctica opción le aconsejará estadísticas importantes de GC. Le indicará si se trata de una recolección de basura grande o menor, qué tipo de recolector de basura se aplica, con qué frecuencia se restaura la memoria y cuánto tiempo se mantuvo, etc.

Handling ‘OutOfMemory’ Error

Para activar el volcado de pila sin memoria, puede usar -XX:+HeapDumpOnOutOfMemoryError

Esta opción de JVM produce un volcado de pila cuando su JVM muere con el error OutOfMemory. No hay ningún gasto involucrado a menos que realmente ocurra una OOM. Esta bandera es un requisito para los sistemas de producción, ya que suele ser la única forma de determinar el problema en profundidad.

El volcado de pila se configurará en el "directorio actual" de la JVM de forma predeterminada. Si desea crear volcados de pila en un directorio específico, ejecute

-XX:HeapDumpPath= [path-to-heap-dump-directory]
-XX:+UseGCOverheadLimit
-XX:OnOutOfMemoryError="< cmd args >;< cmd args >"

El archivo de volcado de pila puede tener un tamaño enorme, hasta gigabytes, así que asegúrese de que el sistema de archivos de destino tenga suficiente capacidad.

Si queremos reiniciar el servidor inmediatamente después de que se agote la memoria, podemos establecer este parámetro con el mismo propósito:

XX:OnOutOfMemoryError="shutdown -r"

Trace classloading and unloading

-XX:+TraceClassLoading y -XX:+TraceClassUnloading son dos opciones de JVM que usamos para imprimir información de registro cada vez que las clases se cargan en JVM o se descargan de JVM. Estos indicadores de JVM son útiles si tiene algún tipo de fuga de memoria vinculada al cargador de clases y sospecha que las clases no se están descargando o recolectando basura.

Java classpath

Hablando de JAVA Classpath entonces-Xbootclasspath especifica las entradas de classpath que queremos cargar sin verificación. La JVM verifica todas las clases que carga para asegurarse de que no intente eliminar la referencia de un objeto con un int, sacar de la pila entradas adicionales o empujar demasiadas, etc. 

Poner la clase en bootclasspath también omite el costo, pero solo debe usarse cuando sepa que las clases se han verificado muchas veces antes. En JRuby, esto redujo el tiempo de inicio a la mitad y más para un script simple.

Profiling

La creación de perfiles de Java es el proceso de supervisión de varios parámetros de niveles de JVM, como ejecuciones de métodos, ejecuciones de subprocesos, recolecciones de basura y creaciones de objetos. La creación de perfiles de Java le proporciona una visión más detallada de la ejecución de la aplicación de destino y también de su utilización de recursos.

-Xprof 
-Xrunhprof

64-bit environment

En el entorno del sistema operativo donde se instalan paquetes de 32 y 64 bits, la JVM elige automáticamente los paquetes de entorno de 32 bits como predeterminados.

Si queremos configurar el entorno a 64 bits manualmente, podemos hacerlo usando -d<OS bit> parámetro. Y obviamente, el bit del sistema operativo puede ser 32 o 64.

Conclusión

Espero que esto le ayude a configurar los parámetros de JVM para su aplicación. Si está interesado en aprender en profundidad sobre la gestión de la memoria de Java, consulte este Curso Udemy.

Gracias a nuestros patrocinadores
Más lecturas interesantes sobre el desarrollo
Impulse su negocio
Algunas de las herramientas y servicios para ayudar a que su negocio crezca.
  • Invicti utiliza Proof-Based Scanning™ para verificar automáticamente las vulnerabilidades identificadas y generar resultados procesables en cuestión de horas.
    Prueba Invicti
  • Web scraping, proxy residencial, administrador de proxy, desbloqueador web, rastreador de motores de búsqueda y todo lo que necesita para recopilar datos web.
    Prueba Brightdata
  • Semrush es una solución de marketing digital todo en uno con más de 50 herramientas en SEO, redes sociales y marketing de contenido.
    Prueba Semrush
  • Intruder es un escáner de vulnerabilidades en línea que encuentra debilidades de ciberseguridad en su infraestructura, para evitar costosas filtraciones de datos.
    Intente Intruder