Biztos mindenkivel előfordult már, hogy a JBoss vagy a Tomcat (illetve egyéb nagyobbnak mondható keretrendszer) futása megszakadt org.apache.jasper.JasperException: PermGen space hibával. Ennek oka, hogy a JVM nem takarítja ki a permanens memóriaterületet, holott lenne rá lehetősége is ideje is. És még hasznos is lehetne. Karmazilla blogjában éppen erről a problémáról ír, s ami lényeges, megoldást is talált.
A GC nem foglalkozik a permanens területtel, de a CGC (concurrent garbage collector) igen. Az első dolog, hogy ennek futását engedélyezzük a VM számára:
-XX:+UseConcMarkSweepGC
Ez még nem elég, ugyanis engedélyeznünk kell a permanens terület kiürítését is:
-XX:+CMSPermGenSweepingEnabled
Ekkor a CGC már képes kiüríteni a permanens tárba kerül osztályok használaton kívüli példányait, azonban maguk a betöltött osztályok is itt foglalnak helyet, s egy betöltött osztályt a VM alapvetően már nem takarít ki, akkor se, ha többé nem használja a VM alatt futó program. Ellenben meg tudjuk engedni ezt is a VM számára:
-XX:+CMSClassUnloadingEnabled
Ha az alapból kapott 64M kevés, akkor nagyobb PermGen helyet is tudunk kérni:
-XX:MaxPermSize=128m
6 Comments
Laszlo Hornyak
Auth Gábor AUTHOR
Auth Gábor AUTHOR
Unknown User (frimen)
Na ezért gyűlőlőm én a GC-s megoldásokat. Hihetetlen, hogy lehet akkora ökör a SUN-nal, hogy igy valósítson meg egy GC-t. Bevallom eddgi nem nagyon értettem (igaz nem is mentem nagyon utána még), hogy miért zabálja a memóriát a java.. sok mindenre gondoltam, csak arra nem, hogy szar a default GC.
Auth Gábor AUTHOR
Nos, igen. A GC-t ideje lenne megreformálni... :)
Volt már erről vitánk, de még mindig úgy gondolom, hogy lehetne segíteni a GC-nek némi kis annotációval, amely opcionálisan bevezethető lehetne a nyelvbe.
Mariák Kálmán
Ha ez tényleg műxik akkor nagyon köszi ezt a tippet! De feltevődik bennem a kérdés, hogy mi ennek a buktatója? Mert, ha ilyen egyszerű a megoldás akkor miért nem ilyen paraméterekkel indul a Tomcat default? Vagy maga a JVM miért nem teszi ezt meg automatikusan? Miért kell ilyen praktikákkal noszogatni? Szóval kiváncsi volnék a hátulütőire is mert szerintem biztos vannak azok is!
Mégegyszer nagyok köszi a tippet!
--
sirkalmi