【问题标题】:Increase memory of tomcat7 maven plugin?增加tomcat7 maven插件的内存?
【发布时间】:2012-08-09 08:25:22
【问题描述】:

我想使用 tomcat7-maven-plugin 直接从 maven 启动嵌入式 tomcat7 实例。这工作正常,但启动的 Tomcat 似乎没有足够的内存。我怀疑我需要设置

-XX:MaxPermSize=256m

但我不知道该怎么做。

文档说应该在插件的“配置”部分使用“systemProperties”元素。但是,这些选项被指定为 XML 元素,并且需要如下所示:

<configuration>
  <systemProperties>
    <XX:MaxPermSize>256m</XX:MaxPermSize>
  </systemProperties>
</configuration>

但这当然不可能,因为它破坏了 XML(XX 被解释为命名空间)。

当然我可以通过设置环境变量来解决这个问题

MAVEN_OPTS=-XX:MaxPermSize=256m

但我宁愿只为嵌入式 Tomcat 增加它。任何想法如何做到这一点?

【问题讨论】:

    标签: java maven tomcat7


    【解决方案1】:

    正如上面 cmets 中大多数人所说, pom.xml 中的属性没有效果。对我有用的是设置我的 MAVEN_OPTS

    MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m"
    

    或者在 Windows 的 cmd 终端中:

    set MAVEN_OPTS=-Xmx512m -XX:MaxPermSize=256m
    

    对于 mac/linux 用户,只需将 export 语句添加到您的 ~/.profile(或类似的文件名)。例如:

    export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=256m"
    

    然后重新启动你的 shell。

    【讨论】:

    • 当然我在回答中提到的maven属性不是改变Maven进程的内存,而是Maven启动的Tomcat进程。这就是原发帖人问的:如何增加tomcat7 maven插件的内存!
    • 问题是你的解决方案 Sebi 确实 not 像 rzrelyea 那样改变启动的 Tomcat 进程的内存上面指出,根本没有启动单独的 Tomcat 进程。
    • 如果您使用“分叉”万无一失的测试运行器,请小心,它可能不尊重 MAVEN_OPTS...stackoverflow.com/questions/4066424/…
    • 也许使用fork插件参数?我真的不知道它是否有效?我会试试这个。
    • 我尝试了那个解决方案,在 Java 8 上它给出了以下警告:Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=1024m; 8.0 中删除了支持
    【解决方案2】:

    你可以这样设置属性

    <configuration>
      <systemProperties>
        <JAVA_OPTS>-Xms256m -Xmx512m -XX:MaxPermSize=256m</JAVA_OPTS>
      </systemProperties>
    </configuration>
    

    【讨论】:

    • 这实际上对我来说根本不起作用,我也没想到会这样。 java进程已经启动了,好像even if you fork, you still don't get a new java process。所以我认为你必须在启动 maven 之前设置最大堆大小。当我尝试使用 标记将 perm 大小设置为 256 时,我在启动应用程序后执行了 jstat -gccapacity maven-pid 并看到我的最大 perm gen 仍然只有 82 kb
    • 将此添加到 pom.xml 将不起作用,为时已晚。您必须在运行 -> 运行配置...-> JRE 选项卡 -> VM 参数中将此类参数直接传递给 JVM。您可以检查 VisualVM(嵌入在您的 Oracle JDK 中的简单分析器)发生了什么。
    • 我同意 rzrelyea 的观点,即这是行不通的,而且对其工作的期望充其量也很低。由于它是无证的,它看起来很像 Rene Herget 只是在做梦。除非有更多信息可用,否则我将投反对票!
    • @Sebi 我刚刚测试了这个,它对启动的tomcat实例没有影响,就像这里的其他人所说的那样。如果你得到它的工作,你正在做其他事情而不是我们其他人......
    • 根本不起作用,不应该是公认的答案。正如文档所说,标签建议您可以这样设置 system properties,但不能设置 environment variables
    【解决方案3】:

    这个对我有用:

    <plugin>
        <groupId>org.codehaus.cargo</groupId>
        <artifactId>cargo-maven2-plugin</artifactId>
        <version>...</version>
        <configuration>
            <container>...</container>
            <configuration>
                <type>standalone</type>
                <home>...</home>
                <properties>
                    <cargo.jvmargs>-Xmx4096m</cargo.jvmargs>
                </properties>
            </configuration>
            <deployables>...</deployables>
        </configuration>
    </plugin>
    

    它在带有参数“-Xmx4096m”的新 JVM 中启动我的 tomcat8。

    【讨论】:

    • 这很好,只是它不是 tomcat7 插件的配置,而是货物插件的配置。
    猜你喜欢
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 2012-10-26
    • 2013-07-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多