Ho bisogno di un modo per richiedere un dump di heap dall'interno dell'applicazione.Richiedi java heap dump (core dump) dall'interno dell'applicazione
Razionale: Quando si verifica una condizione di errore specifica, mi piacerebbe eseguire il dump dello heap, in modo da poter vedere cosa sta trattenendo nella memoria.
Ma vorrei automatizzarlo (ad esempio, quando rilevo che si è verificata una condizione specifica o quando un watchdog non riceve più i suoi ping. Quindi ho bisogno di un modo per scaricare l'heap dall'applicazione stessa. Non riesco a trovarlo con la roba dei fagioli MX. Sebbene gli MX Beans possano fornire tracce di stack molto belle con informazioni su monitor e "ownable synchronizer", informazioni su deadlock e contesa, non riesco a trovare un modo per richiedere un dump dell'heap. C'è qualche modo? O con alcuni mezzi indiretti, ad esempio, come fanno queste cose su JVisualVM? E si può dire alla JVM di scaricare core su OutOfMemoryExceptions ..?
Fantastico, proprio quello che stavo cercando, grazie! Trovo incredibile che non ho trovato quel post sul blog durante il mio googling. Sotto sun.management, ci sono apparentemente un sacco di divertimento! – stolsvik
Un altro commento, comunque (tornando alle idee postate nell'OP): Dal tuo "dump heap su OutOfMemoryError" link, posso leggere: "Il dump dell'heap incorporato può anche essere usato per fare uno snapshot dell'heap a altre volte, utilizzando l'utilità della riga di comando jmap o la console di monitoraggio e gestione di jconsole. ". Questi strumenti probabilmente usano l'MXBean proprietario a cui si riferisce il secondo link? Trovo strano che gli standard MX-bean non abbiano questo metodo dumpHeap (fileName, live). – stolsvik
Una sorta di fastidioso, sì, ma suppongo che fosse una funzionalità standard, anche il formato heap dump dovrebbe essere standardizzato. Per lo meno, immagino che sarebbe molto lavoro, e potrebbe limitare i venditori di libertà nelle loro implementazioni VM. – gustafc