跳转到内容

OpenClinica 用户手册/OutOfMemoryError

来自维基教科书,开放的书籍,开放的世界

java.lang.OutOfMemoryError: Java 堆空间

[编辑 | 编辑源代码]

如果 Tomcat 报告包含以下消息的内部错误

root cause

java.lang.OutOfMemoryError: Java heap space

您可以尝试使用 JVM 增加最大 Java 堆大小

-Xmx<size>

切换。

检查堆空间

[编辑 | 编辑源代码]

在尝试增加堆空间之前,最好先检查它的大小。您可以通过打开 Tomcat 的状态页面来查找它。但在您可以访问此页面之前,您必须在 tomcat-users.xml 文件中添加一个具有 tomcat-manager-role 的用户。此文件位于 Tomcat 目录结构的 conf/tomcat-users.xml 中。在其中添加两行

<role rolename="manager"/>
<user username="tomcat" password="s3cret" roles="manager"/>

现在您可以在浏览器中输入 serveraddress:8080/manager/status 或 localhost:8080/manager/status。Tomcat 将显示一个包含进程统计信息的页面。您要查找的行标为“JVM”,它给出了三个值

例如,空闲内存、总内存和最大内存

Free memory: 48.42 MB Total memory: 61.87 MB Max memory: 123.75 MB

现在我们想将堆空间增加到例如 256。

增加堆空间:Linux,Tomcat 6

[编辑 | 编辑源代码]

登录到您的服务器。转到 /usr/local/tomcat/bin 文件夹

创建设置环境变量的 shell 脚本的安全副本,然后使用适当的权限启动您的编辑器

sudo -u tomcat cp setenv.sh setenv-20100930.sh
sudo -u tomcat vi setenv.sh

更改包含 CATALINA_OPTS 的行以适应您的内存需求,例如

export JAVA_OPTS="-Xms64m -Xmx256m"

保存文件。

关闭 Tomcat 并重新启动。

浏览到 server-address:8080/manager/status 以检查更改是否已正确应用。

增加堆空间:Windows,包括 Vista,Tomcat 5 和 6,使用 tomcat5w.exe 和 tomcat6w.exe

[编辑 | 编辑源代码]

如何在 Tomcat 中为数据集创建增加 JVM 堆大小

  1. 停止 Apache tomcat
  2. 通过双击 tomcat5w.exe/tomcat6w.exe(位置:驱动器(例如 C)/tomact/bin/tomcat5w)转到 Apache tomcat 属性,或转到开始>所有程序>Apache Tomcat 5.5>配置 tomcat
  3. 单击 Java 选项卡
  4. 在 Java 选项卡下设置初始内存池和最大内存池。默认情况下,这些字段为空。
  5. 单击应用,然后单击确定
  6. 重新启动 Apache tomcat

在 Vista 中,这只有在您将服务命名为“tomcat6”时才会起作用!

增加堆空间:Windows Vista,Tomcat 6,使用 startup.bat

[编辑 | 编辑源代码]

在 Windows Vista 中,如果您不想将 Tomcat 作为服务启动,您可以使用两个批处理文件启动和停止 Tomcat,它们位于 CATALINA_HOME\bin 中。因为此批处理文件作为独立的 DOS 进程运行,所以您必须在“配置面板”、“系统”、“高级”、“系统变量”中设置涉及的环境变量。查找“JAVA_OPTS”变量。如果找不到,请创建它。请注意,此参数也会影响所有其他 JAVA 应用程序。如果您只想为 Tomcat 的 Catalina 增加堆空间,那么使用环境变量 CATALINA_OPTS。

如果同时设置了 CATALINA_OPTS 和 JAVA_OPTS,即使 CATALINA_OPTS 大于 JAVA_OPTS,也会使用 CATALINA_OPTS。

在参数字段中键入“-Xms64m -Xmx256m”

关闭 Tomcat 并重新启动。浏览到 /manager/status。JVM 行将类似于

Free memory: 48.44 MB Total memory: 61.87 MB Max memory: 247.50 MB

参数 Xms 定义 Tomcat 可用的初始内存量,第二个参数 Xmx 定义最大内存量。

另一种方法是使用 setenv.bat 文件。此文件并非包含在所有 Tomcat 安装中,因此您可能需要创建它。Startup.bat 检查一些设置,然后调用 catalina.bat,catalina.bat 检查更多设置,然后如果存在,则调用 setenv.bat。因此,这是设置 CATALINA_OPTS 的位置。

在文本编辑器中打开 setenv.bat 并添加(至少)一行

SET CATALINA_OPTS=-Xms64m -Xmx256m

关于 PermGen

[编辑 | 编辑源代码]

您可以设置的另一个参数是 PermGen 的大小。根据 OpenClinica,您应该为每个 Web 实例分配约 180m 的 perm gen,为每个 Ws 实例分配约 90m 的内存。 [1]

您的设置将类似于

export JAVA_OPTS="-Xms256m -Xmx256m -XX:PermSize=180m"

其他信息

[编辑 | 编辑源代码]

Apache Tomcat 5.5 - Windows 服务 HOW-TO
Apache Tomcat 6.0 - Windows 服务 HOW-TO

华夏公益教科书