2014-02-05 4 views
4

Я разрабатываю веб-приложение java, где я использую mavenlike инструмент управления проектами. Теперь моя беда в том, что если я выставиться Причал для автосканирования каждых 20 секунд таким образом:PermGen space with jetty

<!-- To launch embded jetty server --> 
     <plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${maven-jetty-plugin.version}</version> 
      <configuration> 
       <scanIntervalSeconds>10</scanIntervalSeconds> 
       <webAppConfig> 
        <contextPath>/${project.name}</contextPath> 
        <extraClasspath>target/classes;../services/target/classes;</extraClasspath> 
       </webAppConfig> 
       <scanTargets> 
        <scanTarget>target/classes</scanTarget> 
        <scanTarget>../services/target/classes</scanTarget> 
       </scanTargets> 
      </configuration> 
     </plugin> 

Jetty начинается в правильном пути на самом деле я получаю:

[INFO] Started Jetty Server

[INFO] Starting scanner at interval of 20 seconds.

Но при первом сканировании я получаю следующая ошибка:

ERROR ContextLoader - Context initialization failed

java.lang.OutOfMemoryError: PermGen space

Как это можно исправить?

Update 1

Я стараюсь increse пространства PermGen из моего Eclipse IDE таким образом:

enter image description here

, но после первого сканирования я получить обратно ту же самую ошибку.

Как это сделать, чтобы исправить это?

+0

Это означает, что ваш загрузчик классов Webapp не будет выгружен, когда ваш webapp будет перераспределен. Возможно, вы определили ThreadLocals? – flup

+0

Я не знаю значение для ThreadLocals, можете ли вы объяснить, что может быть проблемой, и ссылка разрешит его. – Skizzo

+0

Если вы не знаете, что такое ThreadLocals, вы, вероятно, не используете их. :) Но загрузчик классов определенно не разгружается. – flup

ответ

1

Попробуйте увеличить пространство MaxPermGen с помощью -XX: MaxPermSize = 512m передано MAVEN_OPTS.

4

Вы пробовали работать под JDK8? PermGen был заменен Метапространством и может исправить свои проблемы PermGen: http://www.infoq.com/news/2013/03/java-8-permgen-metaspace

Jetty также имеет некоторую документацию о предотвращении утечек ClassLoader, которые могли бы пополнить PermGen: http://www.eclipse.org/jetty/documentation/current/preventing-memory-leaks.html

3

Поместите это под <configuration> элементом: <jvmArgs>-XX:PermSize=256M -XX:MaxPermSize=512M</jvmArgs>

таким образом, плагин Maven будет выглядеть следующим образом:

<!-- To launch embded jetty server --> 
     <plugin> 
      <groupId>org.mortbay.jetty</groupId> 
      <artifactId>jetty-maven-plugin</artifactId> 
      <version>${maven-jetty-plugin.version}</version> 
      <configuration> 
       <jvmArgs>-XX:PermSize=256M -XX:MaxPermSize=512M</jvmArgs> 
       <scanIntervalSeconds>10</scanIntervalSeconds> 
       <webAppConfig> 
        <contextPath>/${project.name}</contextPath> 
        <extraClasspath>target/classes;../services/target/classes;</extraClasspath> 
       </webAppConfig> 
       <scanTargets> 
        <scanTarget>target/classes</scanTarget> 
        <scanTarget>../services/target/classes</scanTarget> 
       </scanTargets> 
      </configuration> 
     </plugin> 

Примечание: если это не удается с сообщением, что он не может выделить столько память использует более низкие номера.

+0

благодарит вас за предложение, но пока не работает. Я схожу с ума :( – Skizzo

Смежные вопросы