Para obtener una actualización de esta pregunta, consulte más abajo.Java 6 Update 25 VM crash: memoria insuficiente
experimento una JVM (al menos para mí reproducibles) accidente (no un OutOfMemoryError) (La aplicación que se estrella es 3.6.2 Eclipse). Sin embargo, mirando el registro de bloqueo hace que me pregunto:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (malloc) failed to allocate 65544 bytes for Chunk::new
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
Current thread (0x531d6000): JavaThread "C2 CompilerThread1" daemon
[_thread_in_native, id=7812, stack(0x53af0000,0x53bf0000)]
Stack: [0x53af0000,0x53bf0000], sp=0x53bee860, free space=1018k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [jvm.dll+0x1484aa]
V [jvm.dll+0x1434fc]
V [jvm.dll+0x5e6fc]
V [jvm.dll+0x5e993]
V [jvm.dll+0x27a571]
V [jvm.dll+0x258672]
V [jvm.dll+0x25ed93]
V [jvm.dll+0x260072]
V [jvm.dll+0x24e59a]
V [jvm.dll+0x47edd]
V [jvm.dll+0x48a6f]
V [jvm.dll+0x12dcd4]
V [jvm.dll+0x155a0c]
C [MSVCR71.dll+0xb381]
C [kernel32.dll+0xb729]
Estoy utilizando Windows XP SP3 de 32 bits. Tengo 4GB de RAM. Antes de comenzar la aplicación tenía 2 GB gratis de acuerdo con el administrador de tareas (+ 1 GB del sistema de caché que también podría liberarse). Definitivamente tengo suficiente RAM libre.
Desde el inicio hasta la falla registré las estadísticas de memoria jvm usando visualvm y jconsole. Adquirí las estadísticas de consumo de memoria hasta los últimos momentos antes del accidente.
Las estadísticas muestra los siguientes tamaños de memoria asignados:
- TamañoPila: 751 MB (utilizado 248 MB)
- no TamañoPila (PermGen & CodeCache): 150 MB (utilizado 95 MB)
- tamaño de las áreas de gestión de memoria (Edenspace, viejo-gen, etc.): 350 MB
- Tema tamaño de la pila s: 17 MB (de acuerdo con oracle y debido al hecho de que 51 hilos están ejecutando)
Estoy funcionando la aplicación (jre 6 actualización 25, vm servidor) usando los parámetros:
-XX:PermSize=128m
-XX:MaxPermSize=192m
-XX:ReservedCodeCacheSize=96m
-Xms500m
-Xmx1124m
pregunta:
- ¿por qué el bloqueo de JVM cuando obviamente hay suficiente memoria en la máquina virtual y el sistema operativo?
Con la configuración anterior, creo que no puedo alcanzar el límite de 2 GB de 32 bits (1124 MB + 192 MB + 96 MB + pilas de subprocesos < 2 GB). En cualquier otro caso (demasiada asignación de heap), preferiría esperar un OutOfMemoryError que un jvm crash
¿Quién me puede ayudar a descubrir qué está pasando mal aquí?
(Nota: Actualicé recientemente a Eclipse 3.6.2 de Eclipse 3.4.2 y de Java 5 a Java 6.Sospecho que hay una conexión entre los accidentes y estos cambios, porque no he visto esto antes)
ACTUALIZACIÓN
It seems to be a jvm bug introducido en Java 6 Update 25 y tiene algo que ver con el nuevo compilador de jit. Véase también this blog entry. Según el blog, la corrección de este error debería formar parte de la próxima actualización de java 6. Mientras tanto, obtuve un seguimiento de pila nativo durante un bloqueo. Actualicé el registro de bloqueo anterior.
La solución propuesta, con el argumento de VM -XX:-DoEscapeAnalysis
obras (al menos es notablemente baja la probabilidad de un accidente)
Puede que esté configurando el tamaño de memoria máximo demasiado alto para que el espacio de 32 bits sea compatible. Por lo general, la JVM detecta esto, pero puede estar cerca del límite de una manera que no puede detectar. –
Si aumenta su 'PermSize' a' 512m' y agrega '-XX: PermSize = 512m', ¿aún se produce el error? –
¿Qué versión de Java 6 es esta? La descripción es similar a [este ID de error] (http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7042582), excepto por el volcado de subprocesos. –