2011-01-11 13 views
6

Ho cercato di far eseguire a WebStart il dump su un dump dell'heap quando la memoria è esaurita.Dump dell'heap webstart Java

Conosco il modo jmap/jconsole di farlo, ma quello che voglio veramente è aggiungere l'opzione al file jnlp e aver provato le seguenti opzioni.

  1. versione J2SE = "1.6+" Java-VM-args = "- server + HeapDumpOnOutOfMemoryError" max-heap-size = "768 milioni"
  2. versione J2SE = "1.6 +" java-vm-args = "-server -XX: + HeapDumpOnOutOfMemoryError" max-heap-size = "768 milioni"
+1

Quali risultati si ottengono quando si esegue il programma con tali opzioni? – Davidann

+0

poiché ciò comporta la manipolazione del computer del client (scaricamento di un file sul computer locale). non sarei sorpreso se ci sono controlli di sicurezza intorno a questa opzione. potrebbe essere completamente negato o potrebbe richiedere autorizzazioni aggiuntive. – jtahlborn

+0

Hai provato anche a specificare il percorso aggiungendo per esempio '-XX: HeapDumpPath =/tmp'? –

risposta

2

sarà sicuramente non funziona quando si inserisce questa opzione per il file JNLP. C'è una lista di opzioni consentite e le altre saranno ignorate. È possibile controllare l'elenco delle opzioni JVM disponibili nel documentation.

Si noti che l'idea è che l'utente finale eseguirà l'applicazione sul proprio computer. Cosa faresti con lo heap dump sul suo comp? Potrebbe essere chiunque nel mondo che esegue la tua app. Non avrebbe molto senso se tu fossi autorizzato a farlo con gli utenti finali JVM attraverso il tuo file JNLP.

L'unica situazione a cui posso pensare potrebbe essere l'accesso a tale computer e sarà possibile controllare la discarica in seguito. In questo caso (tu come utente finale richiedi il dump) in realtà è possibile ignorare l'esecuzione automatica del file jnlp dal browser ed eseguirlo da solo tramite il comando javaws. I passi che ho preso e che portano al successo sono stati i seguenti (assumere il file JNLP era testOOM.jnlp e siete su Windows):

  1. scarica il file JNLP
  2. dalla riga di comando passare alla directory con il file di
  3. JNLP eseguire javaws -verbose -J-XX:+HeapDumpOnOutOfMemoryError testOOM.jnlp

Utilizzando questa l'applicazione sarà lanciata nello stesso modo dal browser. Notare l'opzione -J che consente di fornire opzioni JVM alla JVM. Questo è ok perché è il client utente di ebd che ha richiesto il dump.

Sulla OutOfMemoryError l'heap dump saranno conservati nella stessa directory in cui si esegue il comando di javaws da.

+0

Grazie mille, stiamo distribuendo internamente in modo che possiamo effettivamente ottenere i dump, vedremo se possiamo ottenere uno script per eseguirlo – benjipete

+0

Contento di aiutare :) –

+0

Ha perfettamente senso per me che uno sviluppatore possa volere un'applicazione webstart per genera un dump dell'heap. Hai ragione che in un'app di produzione con molti utenti con cui lo sviluppatore non ha contatti diretti, ciò sarebbe inutile. Tuttavia, durante lo sviluppo ci sono utenti beta, utenti di test e utenti che si trovano anche nel team di sviluppo. Questo è il mio caso ... e sono abbastanza esperti da ottenere il file di heap di heap per me se viene generato.Avere questa opzione sarebbe eccezionalmente utile e ha molto senso per me. – Jason

Problemi correlati