Solución: se produjo un error durante el inicio de la máquina virtual que no podía reservar suficiente espacio para una pila de objetos

Si bien los subprogramas Java no son una tecnología web común en estos días, existen numerosas razones para usar una máquina virtual Java directamente en un servidor Linux. Si intenta ejecutar el comando java de Linux completamente en hardware discreto o dentro de su propia VM, entonces puede encontrar que “ocurrió un error durante el inicio de la VM que no pudo asignar suficiente espacio para la cinta del objeto”.

Esto probablemente suene extraño porque lo más probable es que tenga suficiente RAM para ejecutar el comando, pero se debe en gran parte a un muelle particular en la forma en que se utilizan las páginas de memoria física y virtual. Especificar algunos volúmenes relativamente grandes le permitirá omitir completamente este mensaje y ejecutar el comando java como lo haría con cualquier otro.

Método 1: uso de las opciones de la línea de comandos

Si ha intentado ejecutar java y ha recibido este mensaje, probablemente ya esté ejecutando el comando free para asegurarse de que haya suficiente memoria para ejecutar el programa.

Java y pedidos gratuitos

Tenga en cuenta que teníamos aproximadamente 2,3 GB de RAM física en nuestra máquina de prueba y aún no usamos una sola página de memoria virtual. Si nota que tiene un problema de memoria, querrá cerrar otras cosas que está ejecutando antes de intentarlo de nuevo. Por otro lado, aquellos que han descubierto que tienen mucha memoria libre pueden especificar exactamente qué tamaño.

Por ejemplo, en nuestra máquina pudimos ejecutar el comando como java -Xms256m -Xmx512M y funcionó como se esperaría de otra manera. Esto limita el tamaño de los montones que una máquina virtual Java intenta reservar al inicio. Debido a que una máquina virtual sin restricciones podría hipotéticamente hacer cosas inusuales, podría generar mensajes de error en un sistema que de otro modo sería libre. Es posible que desee jugar con esos dos valores antes de encontrar la combinación correcta.

Esto puede ser un problema independientemente de lo que esté ejecutando, ya que la JVM no tiene nada que ver con el tipo de máquina virtual que podría estar usando para ejecutar GNU / Linux.

Método 2: exportar las variables para que el cambio sea permanente

Una vez que encuentre un valor que funcione, puede exportarlo para que sea permanente para esa sesión. Por ejemplo, solíamos exportar _JAVA_OPTIONS = ‘- Xms256M -Xmx512M’ desde el símbolo del sistema de bash y nos permitía ejecutar el comando java automáticamente sin ninguna otra opción hasta que cerramos la sesión de nuestro servidor.

Debía ejecutarse nuevamente cuando iniciamos sesión en otra sesión, por lo que es posible que desee agregarlo a cualquier script de inicio relevante si planea usar el comando java con frecuencia. Agregamos la línea a nuestro archivo .bash_login y pareció funcionar cada vez que usamos un indicador de inicio de sesión sin ejecutarlo nuevamente, aunque es posible que deba buscar otro sitio para él si está trabajando con un shell diferente.

Es posible que haya notado que solo ciertas configuraciones de hardware activan este mensaje de error. Eso se debe a que suele suceder en máquinas que tienen mucha RAM física pero límites más bajos sobre cómo usarla. Java intentará asignar un bloque enorme solo para hacerlo imposible, lo que considera que se está quedando sin memoria.

Método 3: Imprimir opciones actuales de Java

Si estaba trabajando en la línea de comando y necesita una referencia rápida al valor _JAVA_OPTIONS que acaba de establecer, ejecute echo $ _JAVA_OPTIONS e inmediatamente imprimirá los valores actuales. Esto es útil para solucionar problemas al intentar probar los números correctos.

Tenga en cuenta que, si bien no se debe requerir nada más para realizar esta configuración, Java debe tener el mensaje «puede que no reserve suficiente espacio para una pila de objetos» si alguna vez descubre seriamente el extremo corto de la memoria virtual. Si este es el caso, entonces querrá volver a verificar los procesos que se están ejecutando actualmente y posiblemente reiniciar el servidor si esa es una opción. También puede crear más espacio de intercambio, pero si esto es un problema, generalmente es mejor intentar corregirlo de alguna otra manera.

En caso de que su configuración parezca correcta pero aún no funciona, asegúrese de tener instalado el paquete Java de 64 bits, ya que debería ser inmune a este problema. Los requisitos de memoria táctil no se aplican solo a la versión de 32 bits de Java. Encontramos en un puñado de casos que la versión de 64 bits intentó crear una máquina virtual de 32 bits, por lo que al especificar la opción -d64 en la línea de comando, lo solucionó.

Deja un comentario