Apache Tomcat a java.lang.OutOfMemoryError: PermGen

V Apache Tomcatu se můžete setkat po opakovaném deploy/undeploy s touto výjimkou. Tomcat totiž, podobně jako jiné J2EE kontejnery, spoléhá v uklízení paměti po nepotřebných class souborech na JRE. Sunovská implementace úklid implicitně neprovádí, proto se dříve nebo později paměť zaplní. Bránit se tomu dá nastavením parametru pro JRE – v Tomcatu to provedeme nastavením proměnné CATALINA_OPTS:

CATALINA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled"

Se stejnou chybou se můžeme také setkat, když se snažíme o deploy příliš velikého projektu (class soubory v paměti zaberou více jak 64 MB). V tomto případě je nutné ještě zvýšit limit paměti pro bytekód JRE, která je standardně 64 MB (Sun JRE 1.6.0):

CATALINA_OPTS="-XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:MaxPermSize=128m"

Pozor! Toto bude fungovat až od verze JRE/JDK 1.6/6.0. V případě starší verze nečekejte chybovou hlášku nebo nějaké varování – přepínače budou zkrátka ignorovány a výjimku můžete čekat velmi brzy.

Jiným řešením může být nasazení JRE JRockit 1.6.0, které netrpí těmito problémy.

Diskuze

If you can't read the letters on the image, download this .wav file to get them read to you.
pridej.cz
blog/apache_tomcat_java.lang.outofmemoryerror_permgen.txt · Poslední úprava: 23.07.2008 11:36 autor: lzap
Creative Commons License Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0