Sto tentando di fare in modo che Tomcat, che è attualmente in esecuzione come servizio su una casella di Windows 2003, esegua il dump dello stack su un OutOfMemoryError
.Posso ottenere che Tomcat sia in esecuzione come servizio per eseguire il dump dell'heap?
(Tomcat è in esecuzione Hudson, che segnala un problema di spazio di heap alla fine della coda della mia generazione. L'esecuzione del costruire produce manualmente senza tale errore. I ragazzi Hudson hanno bisogno di un heap dump per iniziare.)
Come indicato altrove, ho detto ad Apache Service Monitor di configurare la JVM che usa per eseguire Tomcat per fare il dump quando si incontra uno OutOfMemoryError
aggiungendo quanto segue alle opzioni JVM: -XX: + HeapDumpOnOutOfMemoryError Quindi eseguo la build ancora. Abbastanza sicuro, riporta che c'era un errore di heap. Esamino l'intero disco cercando il file predefinito java_pid123.hprof
(dove ovviamente 123
viene sostituito dal PID della JVM). Nessun file .hprof
esiste ovunque.
Sono impigliato in una presa 22: ho bisogno della discarica dell'heap per i ragazzi di Hudson per sistemare la perdita di memoria, ma non riesco a scaricare l'heap se eseguo Hudson sotto Tomcat.
C'è qualche modo speciale, quando Tomcat è in esecuzione come servizio Windows, per ottenere un dump dell'heap da esso su un OutOfMemoryError?
L'altra cosa che ho provato è di dirlo, nelle schede Avvio e Arresto, per utilizzare l'opzione "Java" anziché l'opzione "jvm". Credo che questo dovrebbe dire al Service Manager di tentare di avviare Tomcat con un comando eseguibile Java invece di avviare direttamente lo jvm.dll
. Quando lo faccio, il servizio non verrà avviato.
Sicuramente qualcun altro ha avuto un problema simile?
Devo dire che mi sono collegato a Tomcat con jconsole e ho osservato che l'utilizzo dell'heap non sale mai sopra i 60MB. –