JVM hlásí OutOfMemory

Jaroslav

JVM hlásí OutOfMemory
« kdy: 22. 11. 2013, 09:57:22 »
Zdravim,
resim problem s aplikaci psanou v jave, ktera po sobe neuvolnuje objekty z pameti. Tzn. pri behu JVM se vyskytne OutOfMemory.
Proce JVM ma pridelenou pamet, kterou nechci menit.
Nic mene bych potreboval jak nastavit:
Automatic head dump
Auto restart JVM procesu

Zmena java kodu neni mozna...

Muze nekdo poradit?
« Poslední změna: 22. 11. 2013, 10:01:33 od Petr Krčmář »


Jaroslav

Re:JVM hlásí OutOfMemory
« Odpověď #1 kdy: 22. 11. 2013, 10:06:57 »
*Automatic Heap dump

podlesh

Re:JVM hlásí OutOfMemory
« Odpověď #2 kdy: 22. 11. 2013, 11:03:15 »
Aplikace má memory leaky a změna kódu není možná? Tak to je fakt, ehm, prekérní situace...

Možnosti se liší podle konkrétního JRE - budu předpokládat Sun/Oracle, verzi 6 nebo 7.

Automatický heapdump se zapne pomocí
Kód: [Vybrat]
-XX:-HeapDumpOnOutOfMemoryError, asi bude vhodné přihodit i
Kód: [Vybrat]
-XX:HeapDumpPath=cesta

Více viz dokumentace: http://www.oracle.com/technetwork/java/javase/tech/vmoptions-jsp-140102.html nebo http://www.oracle.com/technetwork/java/javase/clopts-139448.html (k obojímu se dá doklikat, ale nutno říci že soudruzi z Oracle to rozhodně nedělají snadné).


Automatický restart AFAIK není přímo nabízen, většinou se dělají různé obalovací scriptíky v bashi... ale asi by bylo možné využít 
Kód: [Vybrat]
-XX:OnOutOfMemoryError="kill %p" (nezkoušel jsem).

Jaroslav

Re:JVM hlásí OutOfMemory
« Odpověď #3 kdy: 22. 11. 2013, 11:20:02 »
-XX:OnOutOfMemoryError="kill %p"   %p  zjisti automaticky pid procesu?  pripadne muzu pouzit kill -9 %p

podlesh

Re:JVM hlásí OutOfMemory
« Odpověď #4 kdy: 22. 11. 2013, 12:14:39 »
-XX:OnOutOfMemoryError="kill %p"   %p  zjisti automaticky pid procesu?  pripadne muzu pouzit kill -9 %p
No, podle dokumentace to tak funguje pro OnError, tak by snad mělo pro OnOutOfMemoryError - bohužel víc nevím, nezkoušel. Asi to bude potřebovat trochu více dolování v dokumentaci a pokud možno i nějaké experimentální ověření.