2009-05-11 10 views
9

Sto eseguendo il debug di una perdita di memoria in un'applicazione in esecuzione su Sun's JDK 1.4.2_18. Sembra che questa versione supporti la riga di comando param -XX: + HeapDumpOnCtrlBreak che presumibilmente fa sì che JVM esegua il dump dell'heap quando incontra un control-break. Come si invia questo a un processo in background su una macchina Linux? Sembra che i segnali di uccisione siano il modo in cui dovrebbe funzionare, ma io uccido -l non riporta nulla che sia ovviamente un Ctrl-Break, almeno sulla mia scatola Ubuntu.Come si può inviare un Ctrl-Break a un processo Linux in esecuzione?

Aggiornamento: Ho testato Kill -3 con Sun JDK 1.4.2_18 (_14 è stato il primo a eseguire il dump dello heap in questo modo) e ha funzionato. Un file di dump dell'heap è stato creato e il processo era ancora in esecuzione.

risposta

10

kill -QUIT potrebbe farlo (genererà un dump del thread generato da ctrl-break su Windows. Non l'ho ancora provato con l'opzione di heap dump).

+0

Non ho una finestra Linux con una jvm che supporti l'opzione -XX: + HeapDumpOnCtrlBreak, quindi non posso testarla (e non l'ho mai effettivamente fatta in modo non posso garantire che funzioni). – bm212

+0

Preferisco vedere un suggerimento di "kill -QUIT" piuttosto che "kill -3", anche se sono equivalenti. – ephemient

+0

L'ho modificato per dire kill -QUIT. – bm212

14

Ctrl- \ è l'equivalente UNIX/Linux di Windows Ctrl-Break. Wikipedia mi dice anche che puoi usare Ctrl-4 o SysRq sulla console virtuale di Linux (credo che ti occorresse qualcosa di strano per un normale emulatore di terminale per passare le rappresentazioni di quei tasti premuti (su ssh/telnet)).

+1

Sì, in genere il terminale è destinato a C- \ per inviare SIGQUIT. Questo è configurabile con 'stty quit', e non sono sicuro se è il default su tutti i sistemi. – ephemient

+0

@ephemient non è sempre, ma anche i terminali esotici tendono a usarlo. Il mio IBM 3161, per esempio. http://i.imgur.com/6DejIxY.jpg – Wyatt8740

Problemi correlati