2010-09-16 13 views
15

Ieri quando ho girato il programma di installazione 11g server WebLogic Application, ho rilevato un errore OutOfMemory, così ho Googled per la risposta:Java: come verificare la dimensione Perm/PermGen corrente?

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

tutto ha funzionato :)

Tuttavia, quando penso due volte circa la soluzione, avrei potuto commettere un errore: come potevo conoscere le impostazioni attuali di quelle? Devo certamente controllare i loro valori prima di ignorarli, giusto?

Qualche idea?

Link correlati: La gente inanother thread on SO suggerito tentativi ed errori approccio, che non è l'ideale.

Molte grazie in anticipo.

+0

Si sta utilizzando un sistema operativo a 32 o 64 bit? Esistono dei limiti nella versione a 32 bit che potrebbero essere troppo restrittivi sulla quantità di memoria che è possibile utilizzare. –

+0

@James Nero: Per fortuna/purtroppo, a 64 bit :) –

risposta

40

È possibile controllare i valori di eventuali flag JVM di una JVM in esecuzione utilizzando l'utilità jinfo.exe.

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

modo per controllare il valore di -XX:PermSize opzione JVM è possibile eseguire

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

7

È possibile utilizzare qualcosa come VisualVM, http://java.dzone.com/articles/best-kept-secret-jdk-visualvm&default=false&zid=159&browser=16&mid=0&refresh=0, per monitorare l'utilizzo della memoria e si vedrà il massimo da dove picchi, e fornirà informazioni specifiche su quale parte della memoria è effettivamente piena, in modo da poter meglio ottimizzare il tuo ambiente.

Potresti scoprire che una parte della memoria a cui non stai pensando si sta effettivamente riempiendo e monitorandolo puoi vedere cosa devi fare per ottenere prestazioni migliori.

+1

+1 per la verifica utilizzando uno strumento di prestazioni – linuxuser27

4

Un altro modo per ottenere informazioni PermGen è:

kill -3 JAVA_PID 

Diventa discarica filo e informazioni sulla memoria (incluso PermGen). Uscita Esempio:

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

Per qualche ragione Jinfo non ha funzionato quando ne avevo bisogno. E 'tornato:

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

Ci sono poche le possibili cause di cui sopra e uno di loro può essere esplicita dichiarazione del java.io.tmpdir come descritto 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

E 'possibile che 'jinfo' non ha funzionato in quanto non correvi come lo stesso utente come la JVM. Provate a lanciare 'jinfo' come root/amministratore –

+0

Da dove viene questo comando scaricare le informazioni? – golimar

18

È possibile utilizzare jmap a here, è JVM Heap Dump Tool.

ad esempio:

jmap -heap 5900 

verrà stampata:

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 

Ottiene informazioni sulla memoria (compreso PermGen). 5900 è l'id di processo di Java.

Problemi correlati