====== 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 [[blog:jrockit_uz_nebude_dostupny_standalone|JRockit 1.6.0]], které netrpí těmito problémy. {{tag>java}} ~~DISCUSSION~~