Domanda

Bene, questo è imbarazzante ...

sto iniziando a giocare con la memoria Analyzer Eclipse per cercare le perdite di memoria Java su una macchina Windows. Fase 1 è quello di ottenere un file di dump heap. Per fare questo ho iniziare il mio processo Java (javaw.exe) dall'interno di Eclipse e connettersi ad esso con JConsole. Quindi nella scheda MBeans JConsole scatto il tasto dumpheap. La prima volta che ho fatto questo, ho visto un pop-up dicendo che aveva creato il file di dump heap, ma non dare il suo nome o la posizione. Ora ogni volta che faccio un dumpheap nuovo mentre collegato ad un diverso processo javaw.exe, jconsole dice:

Problem invoking dumpHeap : java.io.IOException: File exists

e, naturalmente, non dà il proprio nome o il percorso. Dove potrebbe essere?

Ho cercato il mio disco C: (usando Cygwin strumenti da riga di comando) per i file contenenti "hprof" o "java_pid" o "heapDump" e non ha trovato nulla plausibile. Ho anche usato il Windows Search per cercare tutti i file nel mio lavoro di Eclipse che hanno cambiato negli ultimi giorni.

sto usando il Sun Java 1.6 JVM, e non hanno XX:. Set HeapDumpPath

Aggiorna (28 aprile 2010): Il mio mucchio originale posizione del file deve essere stato determinato dal JConsole, lo strumento che ha attivato l'heap dump da. posizione heap dump del JVM deve applicare alle sole mucchio discariche si innesca (ad esempio, su un OutOfMemoryException).

Il suggerimento di Matt B per uso jvisualvm ben risolve il mio problema da me indicando una sostituzione molto più utile per il vecchio JConsole. Ha una bella profiler di memoria che mostra quali tipi di oggetti sono più numerosi e tenere la maggior parte della memoria. E ha un monitor che uso spettacoli memoria effettiva nel corso del tempo. Quando si chiede per un heap dump, ti dice il nome del file, anche! Il Memory Analyzer Eclipse ti dà tutti i dettagli.

È stato utile?

Soluzione

jvisualvm , ha un'interfaccia molto migliore.

Si noti che a partire dalla versione JDK 6 Update 7 o superiore, Java VisualVM è fornito in bundle con il JDK. Vedere qui .

Altri suggerimenti

perché non si imposta il primo parametro per dumpheap (String, boolean) quando si tenta di richiamare dumpheap () da JConsole? la sua posizione e il nome del file generato heapDump.

Secondo il docs per la Sun Java SE6 JVM:

  

Per impostazione predefinita l'heap dump viene creato in   un file chiamato java_pid << em> pid >. hprof nel   directory di lavoro del VM

In Eclipse, la directory di lavoro viene definito nella scheda "Argomenti" della finestra "Run Configurazioni". Il valore di default è la stessa directory della classe che si esegue.

Si può sempre usare ProcessMonitor per vedere dove si sta cercando di scrittura per :) Fatto questo io stesso in passato.

Ho trovato il file scaricato nella stessa cartella in cui si trova il file .bat whic lanciare la mia applicazione java. (Sto usando Windows 8.1, Java 7) Nel mio caso JBoss / jboss-as / bin / cartella. Per trovarlo ho cercato file *, con oggi la data di creazione e più di 200MB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top