2010-09-16 16 views
15

Ayer cuando estaba corriendo el instalador del servidor de aplicaciones WebLogic 11g, me encontré con un error de OutOfMemory, así que busqué en Google para la respuesta:Java: ¿cómo verificar el tamaño actual de Perm/PermGen?

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

todo funcionaba :)

Sin embargo, cuando pienso dos veces antes de 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: Personas en another thread on SO método de prueba y error sugerido, que no es ideal.

Muchas gracias de antemano.

+0

¿Está utilizando un sistema operativo de 32 o 64 bits? Existen límites en la versión de 32 bits que pueden ser demasiado restrictivos en la cantidad de memoria que puede usar. –

+0

@James Black: Afortunadamente/Desafortunadamente, 64 bits :) –

Respuesta

40

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

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

modo para comprobar el valor de la opción de JVM -XX:PermSize puede ejecutar

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

7

Puede 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á el máximo por donde alcanza su máximo, y le dará información específica sobre qué parte de la memoria está realmente llena, para que pueda mejorar optimiza tu ambiente

Es posible que en realidad se esté llenando una parte de la memoria en la que no piensa, y al supervisarla puede ver lo que necesita hacer para obtener un mejor rendimiento.

+1

+1 para verificar usando una herramienta de rendimiento – linuxuser27

4

Otra manera de obtener información PermGen es:

kill -3 JAVA_PID 

Se pone vertedero de hilo y información de memoria (incluido PermGen). Ejemplo de salida:

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

Por alguna razón jinfo no funcionó cuando lo necesitaba. Volvió:

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

Hay algunas causas posibles de lo anterior, y uno de ellos puede ser una declaración expresa del java.io.tmpdir como se describe al https://www.permeance.com.au/web/terry.mueller/home/-/blogs/unable-to-open-socket-file-target-process-not-responding-or-hotspot-vm-not-loaded

+1

Es posible que 'jinfo' no funcione ya que no lo estaba ejecutando como el mismo usuario que la JVM. Intente ejecutar 'jinfo' como root/Administrator –

+0

¿Dónde este comando volca la información? – golimar

18

Puede utilizar jmap en 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 

Se pone información de la memoria (incluyendo PermGen). 5900 es la identificación del proceso de Java.

Cuestiones relacionadas