Java >> Java tutoriál >  >> Tag >> Tomcat

Mohu automaticky restartovat tomcat jvm při výjimce nedostatku paměti

Můžete zkusit použít volbu OnOutOfMemoryError JVM

-XX:OnOutOfMemoryError="/yourscripts/tomcat-restart"

Je také možné vygenerovat výpis haldy pro pozdější analýzu:

-XX:+HeapDumpOnOutOfMemoryError

Buďte opatrní při kombinaci těchto dvou možností. Pokud vynutíte ukončení procesu v "tomcat-restart", výpis haldy nemusí být kompletní.


Vím, že to není to, na co jste se ptali, ale zkusili jste se podívat přes výpis haldy, abyste zjistili, kde vám může unikat paměť?

Některé velmi užitečné nástroje pro sledování úniků paměti:

jdk/bin/jmap -histo:live pid

Získáte tak histogram všech živých objektů aktuálně v JVM. Hledejte nějaké liché počty objektů. Abyste byli schopni určit, jaké počty objektů jsou liché, musíte svou aplikaci docela dobře znát.

jdk/bin/jmap -dump:live,file=heap.hprof pid

Tím se vypíše celá hromada JVM identifikovaná pomocí pid. Pak můžete použít skvělý Eclipse Memory Analyzer k jeho prohlídce a zjištění, kdo se drží odkazů na vaše objekty. Vaši dva největší přátelé v Eclipse Memory Analyzer jsou histogram a right click -> references -> exclude weak/soft references abyste viděli, co odkazuje na váš objekt.

jconsole je samozřejmě další dobrý nástroj.


ne snadno a rozhodně ne prostřednictvím JVM, které právě utrpělo výjimku z nedostatku paměti. Nejlepším řešením by byla nějaká kombinace sledování stavu kocourků ve spojení s cron skripty nebo souvisejícími naplánovanými skripty správce systému; něco pro kontrolu stavu serveru a automatické zastavení a restartování služby, pokud selže.


Java Tag