15

这是我在由 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 日志中提供了根本原因的完整堆栈跟踪。
4

5 回答 5

30

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

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

设置堆大小
(感谢VonC找到这张照片。)

于 2009-04-04T18:20:35.070 回答
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 堆大小?您有 2 个选项:

  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) 
于 2012-04-04T10:15:43.607 回答
7

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

脚步:

  1. 在 NB 中通过 windows 菜单并添加服务
  2. 您将在服务中找到 Tomcat。右键单击Tomcat服务器并选择属性
  3. 转到属性中的平台并-Xms512m在VM选项字段中写入
于 2009-04-06T12:49:46.737 回答
5

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

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

于 2009-04-04T18:52:01.250 回答
3

This has nothing to do with NetBeans (well, perhaps), rather it has to do with Tomcat. Tomcat is the process that is running out of heap, not NetBeans. Track down the startup process for your Tomcat. If it's bundled with NB, then Tomcat is buried within the NB installation, check for an "enterpriseN" directory, N being a number, Tomcat is probably in there and it's a rather generic distribution of it.

As to why the monitor is run OOM, that's hard to say, it's a pretty simple process when you think about it. You can also try disabling HTTP monitoring to see if it's a problem with the Monitoring itself or something with your application.

于 2009-04-05T05:48:37.477 回答