java.lang.OutOfMemoryError:使用NetBeans的Java堆空间

时间:2009-04-04 18:15:48

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

这是我在NetBeans启动的Tomcat servlet容器实例中运行Web应用程序时遇到的错误。为了解决这个问题,我甚至在netbeans.conf中更改了堆大小,但仍显示相同的错误。我该如何防止这种情况发生?

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: Servlet execution threw an exception
    org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


root cause 

java.lang.OutOfMemoryError: Java heap space

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.

5 个答案:

答案 0 :(得分:30)

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

正确的方法是右键单击项目并选择“属性”,然后选择“运行”;在那里,您可以适当地设置VM选项(例如-Xmx256m)。看起来应该是这样的:

setting the heap size
(感谢VonC找到这张照片。)

答案 1 :(得分:9)

停止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

  3. 如何在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) 
    

答案 2 :(得分:7)

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

步骤:

  1. 在NB中,浏览Windows菜单并添加服务
  2. 您将在服务中找到Tomcat。右键单击Tomcat服务器并选择Properties
  3. 转到属性中的平台,然后在VM选项字段
  4. 中写入-Xms512m

答案 3 :(得分:5)

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

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

答案 4 :(得分:3)

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

至于为什么显示器运行OOM,这很难说,当你想到它时,这是一个非常简单的过程。您还可以尝试禁用HTTP监控,以查看监控本身或您的应用程序是否存在问题。