Blog
Skip to end of metadata
Go to start of metadata

Thomas Einwaller elmélkedett a hatos Java újdonságairól, amelyekkel meg tudjuk találni a Java alkalmazásunk memóriazabáló részeit. Persze most mindenki felhördül, hogy a Java hogy lehet memóriazabáló... amikor ott az automatikus szemétgyűjtő. Ha nem törődünk az példányainkkal megfelelő gondossággal, akkor előfordulhat, hogy a memóriában maradnak, mert van még rájuk referencia (akár körkörös is lehet!). Ezernyi módja van a Java programunk étvágyának... és alig van néhány módszerünk a hiba megkeresésére. Első lépésként futtatnunk kell a jmap parancsot, amelynek megadjuk a futó JVM PID számát, illetve pár egyéb paramétert:

[javaforum@javaforum:~]$ /opt/SDK/jdk/bin/jmap -dump:live,format=b,file=javaforum.bin 13878
Dumping heap to javaforum.bin ...
Heap dump file created
[javaforum@javaforum:~]$ ls -l javaforum.bin
-rw------- 1 javaforum other 106338209 Aug  7 20:47 javaforum.bin

A program futása során egyszerűen készít egy dump-ot a JVM heap területéről, amelyben aztán a jhat program kedvére turkálhat:

[javaforum@javaforum:~]$ /opt/SDK/jdk/bin/jhat -J-mx768m javaforum.bin
Reading from javaforum.bin...
Dump file created Tue Aug 07 20:47:51 CEST 2007
Snapshot read, resolving...
Resolving 891772 objects...
Chasing references, expect 178 dots... [...]  ....
Eliminating duplicate references... [...] ...
Snapshot resolved.
Started HTTP server on port 7000
Server is ready.

A gépen, ahol futtatjuk a jhat programot, kinyílik egy 7000-es számú port, amelyen egy egyszerű webszervert futtat a jhat, ahol végig tudjuk kattintgatni a JVM lementett állapotát, érdemes megnézni, hogy melyik osztályból mennyi példány létezik, és azokra honnan kerül hivatkozás... és még sok egyéb információt is ki tudunk bányászni az adatrengetegből.

      
      
Page viewed times

1 Comment

  1. Ezt bírom a Sunos segédprogikban: egyszerűek, mint a bot :D