【问题标题】:java.lang.OutOfMemoryError: Java heap space with NetBeansjava.lang.OutOfMemoryError:带有 NetBeans 的 Java 堆空间
【发布时间】:2010-10-17 13:58:33
【问题描述】:

这是我在由 NetBeans 启动的 Tomcat servlet 容器实例中运行 Web 应用程序时遇到的错误。为了解决这个问题,我什至更改了 netbeans.conf 中的堆大小,但仍然显示相同的错误。我怎样才能避免这种情况发生?

HTTP 状态 500 - -------------------------------------------------- ------------------------------ 类型异常报告 信息 描述 服务器遇到一个内部错误 () 阻止它完成这个请求。 例外 javax.servlet.ServletException:Servlet 执行引发异常 org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362) 根本原因 java.lang.OutOfMemoryError:Java 堆空间 note Apache Tomcat/5.5.9 日志中提供了根本原因的完整堆栈跟踪。

【问题讨论】:

标签: java tomcat netbeans out-of-memory heap-memory


【解决方案1】:

在 netbeans.conf 中更改堆大小只会更改 NetBeans 本身的堆大小,不会更改通过 NetBeans 运行的应用程序。

正确的做法是在项目上右击选择“属性”再选择“运行”;在那里你可以适当地设置 VM 选项(例如-Xmx256m)。它应该看起来像这样:


(感谢VonC找到这张照片。)

【讨论】:

【解决方案2】:

停止Tomcat服务器,设置环境变量CATALINA_OPTS,然后重启Tomcat。查看文件tomcat-install/bin/catalina.shcatalina.bat 了解如何使用此变量。例如,

set CATALINA_OPTS="-Xms512m -Xmx512m" (Windows)export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash)setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh)

catalina.batcatallina.sh 中,您可能已经注意到CATALINA_OPTS、JAVA_OPTS 或两者都可用于指定Tomcat JVM 选项。

CATALINA_OPTS 和 JAVA_OPTS 有什么区别?

名称 CATALINA_OPTS 特定于 Tomcat servlet 容器,而 JAVA_OPTS 可能被其他 Java 应用程序(例如 JBoss)使用。由于环境变量由所有应用程序共享,我们不希望 Tomcat 无意中选择用于其他应用程序的 JVM 选项。我更喜欢使用 CATALINA_OPTS。

如何在 JBoss 中设置 java 堆大小?

停止 JBoss 服务器,编辑 $JBOSS_HOME/bin/run.conf,然后重新启动 JBoss 服务器。您可以将带有 JAVA_OPTS 的行更改为:

JAVA_OPTS="-server -Xms128m -Xmx128m"

如何在 Eclipse 中设置 java 堆大小? 你有两个选择:

  1. 编辑 eclipse-home/eclipse.ini 如下所示 重启 Eclipse。

    -vmargs-Xms64m-Xmx256m

  2. 或者,您可以只运行带有附加选项的 eclipse 命令 最后。 -vmargs 之后的任何内容都将被视为 JVM 选项,并且 直接传给JVM。命令中指定的 JVM 选项 以这种方式行将始终覆盖 eclipse.ini 中的行。为了 例如,

    eclipse -vmargs -Xms64m -Xmx256m

如何在 NetBeans 中设置 java 堆大小?

退出 NetBeans,编辑文件 netbeans-install/etc/netbeans.conf。例如,

netbeans_default_options="-J-Xms512m -J-Xmx512m -J-XX:PermSize=32m -J-XX:MaxPermSize=128m -J-Xverify:none

如何在 Apache Ant 中设置 java 堆大小?

设置环境变量 ANT_OPTS。查看文件$ANT_HOME/bin/ant%ANT_HOME%\bin\ant.bat,了解Ant 运行时如何使用此变量。

set ANT_OPTS="-Xms512m -Xmx512m" (Windows)export ANT_OPTS="-Xms512m -Xmx512m" (ksh/bash)setenv ANT_OPTS "-Xms512m -Xmx512m" (tcsh/csh) 

【讨论】:

    【解决方案3】:

    如果你增加你的Tomcat服务器的虚拟内存就可以了。

    步骤:

    1. 在 NB 中通过 windows 菜单添加服务
    2. 您会在服务中找到 Tomcat。右键单击 Tomcat 服务器并选择属性
    3. 到属性中的平台,在VM选项字段中写-Xms512m

    【讨论】:

    • 此答案描述了如何重新配置​​ NetBeans 创建的 Java 进程以运行 Tomcat servlet 容器,即内存不足的 JVM。
    【解决方案4】:

    我猜增加内存不会解决问题。 MonitorFilter 在做什么?是什么吞噬了所有的记忆?

    最好的办法是弄清楚这一点。如果这是一个网络应用程序,请查看是否可以关闭该过滤器并在没有它的情况下运行。如果你成功了,你就知道 MonitorFilter 导致你失败​​了。

    【讨论】:

    • +1 - 有时我忙于回答问题而没有解决真正的问题。
    • +1 OP 也应该明确检查该类是否有过多的对象创建等。
    • @mmyers - 为您 +1,因为它发生在我们所有人身上。 8)
    【解决方案5】:

    这与 NetBeans 无关(嗯,也许吧),而与 Tomcat 有关。 Tomcat 是耗尽堆的进程,而不是 NetBeans。跟踪 Tomcat 的启动过程。如果它与 NB 捆绑在一起,则 Tomcat 被埋在 NB 安装中,检查“enterpriseN”目录,N 是一个数字,Tomcat 可能在其中并且它是它的一个相当通用的分布。

    至于监视器为什么运行OOM,这很难说,仔细想想,这是一个非常简单的过程。您也可以尝试禁用 HTTP 监控,看看是监控本身有问题还是您的应用程序有问题。

    【讨论】:

      猜你喜欢
      • 2021-09-09
      • 2011-10-24
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      • 2017-04-22
      • 2011-11-05
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多