java jvm jvm-crash

Java: ¿cómo verificar el tamaño actual de Perm/PermGen?



jvm jvm-crash (4)

Ayer, cuando estaba ejecutando el instalador de WebLogic Application Server 11g, encontré un error de OutOfMemory, así que busqué en Google la respuesta:

java -Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m -jar wls1032_generic.jar

Todo funcionó :)

Sin embargo, cuando pienso dos veces en la solución, podría haber cometido un error: ¿cómo podría saber la configuración actual de esos? Ciertamente necesito verificar sus valores antes de anularlos, ¿verdad?

¿Alguna idea?

Enlace relacionado: La gente en otro hilo en SO sugirió un enfoque de prueba y error, que no es ideal.

Muchas gracias de antemano.


Otra forma de obtener información de PermGen es:

kill -3 JAVA_PID

Obtiene información de volcado de hilo y memoria (incluido PermGen). Ejemplo de salida:

PSPermGen total 68864K, used 68808K [0x000000009c600000, 0x00000000a0940000, 0x00000000a1800000)

Por alguna razón, jinfo no funcionaba cuando lo necesitaba. Volvió

Unable to open socket file: target process not responding or HotSpot VM not loaded

Existen algunas causas posibles de lo anterior y una de ellas puede ser la declaración explícita de java.io.tmpdir como se describe en https://www.permeance.com.au/web/terry.mueller/home/-/blogs/unable-to-open-socket-file-target-process-not-responding-or-hotspot-vm-not-loaded


Puede verificar los valores de cualquier marca JVM de una JVM en ejecución utilizando la utilidad jinfo.exe .

%JAVA_HOME%/bin/jinfo.exe -flag <flagName> <pid>

así que para comprobar el valor de -XX:PermSize JVM opción puede ejecutar

%JAVA_HOME%/bin/jinfo.exe -flag PermSize <pid>


Puedes usar jmap here , es JVM Heap Dump Tool.

por ejemplo:

jmap -heap 5900

Se imprimirá:

Heap Configuration: MinHeapFreeRatio = 40 MaxHeapFreeRatio = 70 MaxHeapSize = 989855744 (944.0MB) NewSize = 1310720 (1.25MB) MaxNewSize = 17592186044415 MB OldSize = 5439488 (5.1875MB) NewRatio = 2 SurvivorRatio = 8 PermSize = 21757952 (20.75MB) MaxPermSize = 85983232 (82.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 242352128 (231.125MB) used = 9196056 (8.770042419433594MB) free = 233156072 (222.3549575805664MB) 3.79450185805672% used From Space: capacity = 41877504 (39.9375MB) used = 0 (0.0MB) free = 41877504 (39.9375MB) 0.0% used To Space: capacity = 42663936 (40.6875MB) used = 0 (0.0MB) free = 42663936 (40.6875MB) 0.0% used PS Old Generation capacity = 80609280 (76.875MB) used = 34187936 (32.604156494140625MB) free = 46421344 (44.270843505859375MB) 42.41191088668699% used PS Perm Generation capacity = 85393408 (81.4375MB) used = 63472624 (60.53221130371094MB) free = 21920784 (20.905288696289062MB) 74.32965317416539% used

Obtiene información de la memoria (incluyendo PermGen). 5900 es el id de proceso de Java.


Puedes usar algo como VisualVM, http://java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser=16&mid=0&refresh=0 , para controlar el uso de la memoria y verás el máximo por donde llega a su punto más alto, y le dará información específica sobre qué parte de la memoria está realmente llena, para que pueda optimizar mejor su entorno.

Es posible que encuentre que parte de la memoria en la que no piensa se está llenando, y al monitorearla, puede ver lo que necesita hacer para obtener un mejor rendimiento.