有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Maven Jetty插件OutOfMemoryError在两个Web应用程序之间共享实例时出错

我正在使用maven jetty插件来运行我的两个web应用程序。一个web应用程序是spring mvc UI,另一个是RESTful web应用程序。当我运行两个独立的mvn jetty时,我能够让这两个web应用程序通信:运行实例并分配不同的端口。我已经使用下面的maven pom在同一个jetty实例中使用同一个端口成功地部署了这两个组件。xml配置。我最终得到了ava。lang.OutOfMemoryError:PermGen空间错误。最好的解决方法是什么

<plugin>
    <groupId>org.mortbay.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>7.6.8.v20121106</version>
    <configuration>
        <jvmArgs>-Xmx2024m -Xms2024m</jvmArgs>
        <scanIntervalSeconds>10</scanIntervalSeconds>
        <webApp>
            <contextPath>/</contextPath>
        </webApp>
        <contextHandlers>           
            <contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
                <war>../../api/target/main-api.war</war>
                <contextPath>/test</contextPath>
            </contextHandler>
        </contextHandlers> 
    </configuration>
</plugin>

共 (4) 个答案

  1. # 1 楼答案

    这取决于哪个JVM实例需要更多内存。例如,如果测试是分叉的(默认情况下),并且由于OutOfMemoryError而失败,那么请尝试配置启动它们的插件:

       <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-Xmx1024m</argLine>
            </configuration>
        </plugin>
    

    或者

    除了堆内存。您还必须增加perm size来解决maven中的异常,在环境变量中使用这些变量。有时也可以扩展perm内存大小-

    设置环境变量:

    variable name: MAVEN_OPTS variable value: -Xmx512m -XX:MaxPermSize=256m

    来自resource的编译数据

  2. # 2 楼答案

    I eventually get a java.lang.OutOfMemoryError: PermGen space error

    最终需要多长时间?是否有一款网络应用经常因变化而重新部署

    在重新部署web应用程序时,很容易泄漏类。我会在maven_选项中添加这个设置来运行maven

    -XX:+HeapDumpOnOutOfMemoryError

    运行直到出现内存不足错误,然后用eclipse mat加载转储文件,看看是什么填充了你的perm gen。你的web应用程序很可能是leaking classes on redeploy

  3. # 3 楼答案

    请澄清:您使用的是什么jvm版本,您使用的是什么操作系统,您的计算机上安装了多少物理内存。如果将内存需求降低到1400M(如果在32位jvm上运行,可能会有所帮助),例如:

    <jvmArgs>-Xmx1400m -Xms1400m</jvmArgs>
    
  4. # 4 楼答案

    尝试在分叉模式下运行Jetty,如下所示:

    <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>7.6.8.v20121106</version>
        <executions>
            <execution>
              <id>start-jetty</id>
              <!-- Set this to the appropriate phase:
                   pre-integration-test, or earlier test-compile-->
              <phase>pre-integration-test</phase>
              <goals>
                 <goal>run-forked</goal>
              </goals>
           </execution>
        </executions>
    
        <configuration>
            <jvmArgs>-Xmx2048m -Xms1536m -XX:PermSize=128m -XX:MaxPermSize=256m</jvmArgs>
            <scanIntervalSeconds>10</scanIntervalSeconds>
            <webApp>
                <contextPath>/</contextPath>
            </webApp>
            <contextHandlers>           
                <contextHandler implementation="org.eclipse.jetty.webapp.WebAppContext">
                     <war>../../api/target/main-api.war</war>
                    <contextPath>/test</contextPath>
                </contextHandler>
            </contextHandlers> 
        </configuration>
    </plugin>
    

    有关更多详细信息,请查看Running Jetty in a forked JVM

    而且。。。在开始此操作之前,请确保您确实有2048 MB的可用RAM