2010-08-19 17 views
5

Sono in esecuzione carico su Tomcat 6 in esecuzione su Java 6. Desidero raccogliere un heapdump dell'heap Java mentre il server Tomcat è sotto carico. Di solito uso jmap -dump per raccogliere i miei heapdump.Raccolta del heapdump Java sotto carico

Tuttavia, quando provo a farlo quando Tomcat gestisce un carico elevato, scopro che la raccolta di heapdump non riesce.

jmap è lo strumento migliore per la raccolta di un dump dell'heap da un processo sotto carico? Quali sono le possibili cause che potrebbero impedire a jmap di raccogliere un heapdump?

Se jmap non è lo strumento migliore, cosa è meglio?

È del tutto accettabile per me jmap (o qualche altro strumento) per arrestare il mondo all'interno del processo Java mentre viene eseguito il dump dell'heap.

+1

Hai provato a collegare VisualVM alla VM e creare un HeapDump utilizzando quello? –

+0

Questo non è l'ideale per me dato che Tomcat è in esecuzione su un server Linux remoto. VisualVM include il supporto per i dump dell'heap remoto, ma ciò richiede che una porta JMX sia aperta all'avvio della JVM. – mchr

+0

http://stackoverflow.com/questions/20235802/ways-how-to-get-heap-dump-from-running-tomcat-7 ha risposte più dettagliate. – Vadzim

risposta

2

Ho scoperto che l'esecuzione di Tomcat con una porta JMX mi consente di eseguire un heapdump remoto utilizzando visualvm. Questo mi è riuscito quando jmap non è riuscito.

2

jmap è lo strumento migliore per la raccolta di un dump dell'heap da un processo sotto carico?

Penso: no, non lo è. From this link:

NOTA - Questa utility non è supportato e può o non può essere disponibile in futuro versioni del JDK.

+0

Potete consigliare un'alternativa? – mchr

+0

No, non ho mai avuto bisogno di gestire i dump dell'heap, ma ho cercato informazioni jmap, solo curiose, buona fortuna. – sourcerebels

2

Ho anche trovato che jmap può essere piuttosto capriccioso. Se hai problemi:

  • Provalo di nuovo. Spesso riesce a ottenere un heap dump dopo un paio di tentativi se fallisce prima
  • utilizzare l'opzione -f
  • Aggiungi -XX: + HeapDumpOnOutOfMemoryError come configurazione standard di prendere in modo proattivo heap dump quando un errore OOM è gettato
  • Esegui Tomcat in modo interattivo e aggiungi il dump dell'heap sull'opzione ctrl-break. Questo ti dà anche un dump del thread, qualcosa che probabilmente ti servirà comunque
  • Se la dimensione dell'heap è particolarmente grande e hai una condizione ripetibile, abbassa temporaneamente la dimensione dell'heap. Rende il file risultante molto più facile da gestire, richiede meno tempo ed è più probabile che abbia successo
+0

Grazie per questa risposta - proverò a riprovare jmap la prossima volta. Ho pubblicato la mia risposta sull'utilizzo di visualvm. – mchr