java.lang.OutOfMemoryError:使用NetBeans的Java堆空间
这是我在NetBeans启动的Tomcat servlet容器实例中运行Web应用程序时遇到的错误。 为了解决这个问题,我甚至改变了netbeans.conf中的堆大小,但它仍然显示相同的错误。 我该如何防止这种情况发生?
HTTP状态500 - -------------------------------------------------- ------------------------------ 类型exception报告 信息 description服务器遇到内部错误(),导致无法完成此请求。 例外 javax.servlet.ServletException:Servlet执行引发exception org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362) 根本原因 java.lang.OutOfMemoryError:Java堆空间 note备注根本原因的完整堆栈跟踪在Apache Tomcat /5.5.9日志中。
在netbeans.conf中更改堆大小只会更改NetBeans本身的堆,而不会更改通过NetBeans运行的应用程序的堆。
正确的方法是右键单击项目并选择“属性”,然后选择“运行”; 在那里你可以适当地设置VM选项(例如-Xmx256m
)。 它应该看起来像这样:
(感谢VonC找到这张照片。)
停止Tomcat服务器,设置环境变量CATALINA_OPTS,然后重新启动Tomcat。 查看文件tomcat-install/bin/catalina.sh
或catalina.bat
以了解如何使用此变量。 例如,
set CATALINA_OPTS="-Xms512m -Xmx512m" (Windows)export CATALINA_OPTS="-Xms512m -Xmx512m" (ksh/bash)setenv CATALINA_OPTS "-Xms512m -Xmx512m" (tcsh/csh)
在catalina.bat
或catallina.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堆大小? 你有2个选择:
-
编辑eclipse-home / eclipse.ini,如下所示,重新启动Eclipse。
-vmargs-Xms64m-Xmx256m
-
或者,您可以在最后运行带有其他选项的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)
如果增加Tomcat服务器的虚拟内存,则可以。
脚步:
- 在NB中,浏览Windows菜单并添加服务
- 您将在服务中找到Tomcat。 右键单击Tomcat服务器,然后选择“属性”
- 转到属性中的平台,然后在VM选项字段中写入
-Xms512m
我猜测增加内存不会解决问题。 MonitorFilter在做什么? 什么在吞噬所有记忆?
你最好的办法就是明白这一点。 如果这是一个Web应用程序,请查看是否可以关闭该filter并在没有它的情况下运行。 如果您获得了成功,您就会知道MonitorFilter导致您失败。
这与NetBeans无关(好吧,也许),而不是与Tomcat有关。 Tomcat是用尽堆的进程,而不是NetBeans。 跟踪Tomcat的启动过程。 如果它与NB捆绑在一起,那么Tomcat将被隐藏在NB安装中,检查“enterpriseN”目录,N是一个数字,Tomcat可能在那里,它是一个相当通用的分布。
至于为什么显示器运行OOM,这很难说,当你想到它时,这是一个非常简单的过程。 您还可以尝试禁用HTTP监控,以查看监控本身或您的应用程序是否存在问题。