Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich muss mehrere Projekte gleichzeitig im webapps Ordner haben, allerdings bekam ich immer den Fehler OutOfMemory PermGen Space.
Jetzt habe ich im Internet gefunden, dass man diesen Speicher hochsetzen kann.
Das habe ich wie folgt getan:
Grundsätzlich hängt das natürlich zusammen, weil ohne webapps kein speicherverbrauch ;-)
Normalerweise geht dem PermGenSpace eine Fehlermeldung vorraus, zusätzlich könntest du aber auch JMX enablen und die Maschine via VisualVm o.ä. Monitoren und DumpOnHeapSpace oder so ähnlich aktiveren.
Die Frage die sich stellt, wieso bekommt er den PermGenSpace ... liegt es an fehlerhafter / schlechter Programmierung oder an einer schier riesigen Masse an webapps, daher die Frage wie viele laufen denn auf dem tomcat?
Kann schon sein. Ich selbst habe solche Fehler mit einer älteren Hibernate-Version bekommen, nachdem ich ein paar mal Webapps redeployt, bzw. im Manager Start/Stop oder Reload geklickt habe. Da hat nur ein Restart des Tomcat geholfen. Hibernate und Tomcat haben sich die Schuld gegenseitig zugeschoben. Ein Update von Hibernate hat den Fehler dann beseitigt.
6 Projekte mit jeweils 20-30 mb.
3 Stück gehen (webapps hat dann bisschen über 80mb). Sobald aber ein 4. dazu kommt bekomm ich eben den Fehler
Code:
java.util.concurrent.ExecutionException: java.lang.OutOfMemoryError: PermGen space
at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
at java.util.concurrent.FutureTask.get(FutureTask.java:111)
at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:751)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:471)
at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1453)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:295)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1381)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1539)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1549)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1528)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.OutOfMemoryError: PermGen space
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2836)
at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1160)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1668)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1546)
at org.apache.catalina.startup.ContextConfig.checkHandlesTypes(ContextConfig.java:2011)
at org.apache.catalina.startup.ContextConfig.processAnnotationsStream(ContextConfig.java:1974)
at org.apache.catalina.startup.ContextConfig.processAnnotationsJar(ContextConfig.java:1863)
at org.apache.catalina.startup.ContextConfig.processAnnotationsUrl(ContextConfig.java:1831)
at org.apache.catalina.startup.ContextConfig.processAnnotations(ContextConfig.java:1817)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1218)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:825)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:300)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:897)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:873)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:615)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:958)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1599)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.uti
das ist ein älteres Projekt. Weiß nicht welche Hibernate Version benutzt wird. Es ist mal die
hibernate2.jar drin.
Hab jetzt mal die Version 4.1.3 runtergeladen und die hibernate-core-4.1.3-final.jar eingebunden. Der Fehler kommt allerdings torzdem noch
Permgen geht dir aus, wenn sehr viele Klassen geladen werden müssen. Somit ist es nicht unnormal, wenn (abhängig von der Größe der Applikationen) nach einer bestimmten Anzahl von Applikationen der Speicher dort knapp wird.
Wenn die Applikationen bzlg. Classloading voneinander isoliert arbeiten, werden auch noch u.U. die gleichen Klassen mehrfach geladen, nämlich für jede getrennte Applikation.
Um Environment Variablen zu setzen, sollte man bei Tomcat eine Datei namens $CATALINA_HOME/bin/setenv.(sh|bat je nach system) erstellen und dort die Variablen setzen.
Ich vermute, dass der Speicher der PermGen nicht ausreicht. Belegen kann man das nur, wenn man sich mal einen Heapdump ansieht bzw. wenn man die VM mal z.B. mit JVisualVM oder anderen geeigneten Tools monitort.