如何为Tomcat应用程序增加Java堆空间

32

有许多类似的问题都问到了这个或类似的问题。

它们都给出了必须执行的命令,但我不明白在哪里编写此命令。我想永久增加我的Tomcat应用程序的堆空间。

我阅读了这个页面http://javahowto.blogspot.com/2006/06/6-common-errors-in-setting-java-heap.html,并且在Tomcat部分中提到:

停止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,值周围有引号)

因此,我将行

set CATALINA_OPTS=

替换为

set CATALINA_OPTS=-Xms512m -Xmx512m

但我仍然收到错误信息。

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.OutOfMemoryError: Java heap space      java.lang.reflect.Array.multiNewArray(本机方法)      java.lang.reflect.Array.newInstance(Array.java:90)      nom.tam.util.ArrayFuncs.newInstance(ArrayFuncs.java:1028)      nom.tam.fits.ImageData.read(ImageData.java:259)

nom.tam.fits.Fits.readHDU(Fits.java:573) controller.UploadServlet.retreiveFITSFileFields(UploadServlet.java:206) controller.ScanServerFiles.doPost(ScanServerFiles.java:39) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
nom.tam.fits.Fits.readHDU(Fits.java:573) controller.UploadServlet.retreiveFITSFileFields(UploadServlet.java:206) controller.ScanServerFiles.doPost(ScanServerFiles.java:39) javax.servlet.http.HttpServlet.service(HttpServlet.java:637) javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

@laz - 我已经添加了堆栈跟踪。 - Ankur
10个回答

31

有一种方法可以在不修改分发文件的情况下实现。您可以创建一个独立的文件%CATALINA_HOME%\bin\setenv.bat$CATALINA_HOME/bin/setenv.sh,并将您的环境变量放在那里。此外,内存设置适用于JVM而不是Tomcat,因此我建议设置JAVA_OPTS变量:

set JAVA_OPTS=-Xmx512m


1
我无法在Tomcat8的bin文件夹中找到setenv.bat文件。 - Sasikumar Murugesan
你必须创建这个文件。 - Cayman

11

首先,你无法仅为一个Tomcat应用更改内存设置,而是需要更改所有Tomcat实例的设置。

如果你是通过控制台运行Tomcat(使用startup.bat),则需要编辑catalina.bat并调整CATALINA_OPTS。例如:

set CATALINA_OPTS=-Xms512m -Xmx512m

重新启动Tomcat将应用新的设置。

如果您仍然遇到OutOfMemoryError错误,则需要知道在特定时刻您的应用程序需要多少内存(nom.tam.util.ArrayFuncs...)。您要么必须优化应用程序,要么只需增加提供给Tomcat的内存。


我正在Windows上运行Tomcat,我刚刚下载了Tomcat文件并解压缩了它们。我没有安装任何服务。 - Ankur

9
您的更改可能已经生效了。您的应用程序是否需要大量的内存 - 堆栈跟踪显示一些与图像相关的功能。
我猜想,错误要么立即发生(对于大文件),要么在几个请求之后发生。
如果错误立即发生,则可以进一步增加内存,或者调查为什么一个文件需要这么多内存。
如果错误发生在几个请求之后,则可能存在内存泄漏 - 即垃圾收集器未回收对象。使用类似 JProfiler 的工具可以帮助您监视 VM 使用的内存量,并帮助您查看是什么占用了该内存以及为什么垃圾收集器未回收对象。

11
这个答案实际上并没有回答提问者关于如何为Tomcat应用程序增加Java堆空间的问题。 - 8bitjunkie

5
  • Open the server tab in eclipse
  • right click open
  • click on open lauch configuration
  • Go to arguments
  • Here you can add in VM arguments after endorsed

    -Xms64m -Xmx256m
    

5
您需要在您的catalina.sh文件中添加以下行。
export CATALINA_OPTS="-Xms512M -Xmx1024M"
更新:catalina.sh的内容明确说明:

不要在此脚本中设置变量。相反,将它们放入CATALINA_BASE/bin下的setenv.sh脚本中,以使您的自定义与其他内容分开。

因此,您可以在setenv.sh中添加上述内容(如果不存在,请创建一个文件)。


2
建议您将其放在单独的文件中:bin/setenv.sh - Abdelali AHBIB
将这个命令 +1 加入到 setenv.sh 中,例如在 Ubuntu 上,你可能会有 /usr/share/tomcat7/bin/catalina.sh,然后你可以将 CATALINA_OPTS 的单行代码放置到 /usr/share/tomcat7/bin/setenv.sh 文件中。 - Colin D

5
最简单的方法是:(在Linux / Ubuntu等系统中)
进入Tomcat bin目录:
cd /opt/tomcat8.5/bin

在bin目录下创建新文件"setenv.sh",并将以下条目保存在其中。
export CATALINA_OPTS="$CATALINA_OPTS -Xms512m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx2048m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"

并发布命令:

./catalina.sh run

在你的Catalina日志文件中,你可以看到以下条目:
INFO [main] VersionLoggerListener.log Command line argument: -Xms512m
INFO [main] VersionLoggerListener.log Command line argument: -Xmx2048m
INFO [main] VersionLoggerListener.log Command line argument: -XX:MaxPermSize=256m

这证实了以上更改已经生效。

"Xms512m" 和 "-Xmx2048m" 的值也可以在 setenv.sh 文件中相应修改。

启动 tomcat 还可以分两步进行。 cd /opt/tomcat8.5/bin

Step #1
run ./setenv.sh 
Step #2
./startup.sh

如果您正在使用systemd,请进行编辑:
/usr/lib/systemd/system/tomcat8.service

并设置
Environment=CATALINA_OPTS="-Xms512M -Xmx2048M -XX:MaxPermSize=256m"

3
如果你在使用Windows系统,那么很简单。只需要进入系统环境变量设置界面(右键点击“计算机” > “属性” > “高级系统设置” > “环境变量”),新建一个系统变量,名称为CATALINA_OPTS,值为“-Xms512m -Xmx1024m”。重启Tomcat即可。

1
对于Windows服务,您需要运行tomcat9w.exe(或6w / 7w / 8w),具体取决于您的Tomcat版本。首先,请确保Tomcat已停止。然后双击tomcat9w.exe。导航到Java选项卡。如果您知道自己有64位Windows和64位Java以及64位Tomcat,则可以将内存设置得比512高。您需要进行一些任务管理器监视以确定要设置多高。对于大多数2019年开发的应用程序...我建议初始内存池为1024,最大内存池为2048。当然,如果您的计算机有大量RAM...可以随意提高内存。此外,请参见此答案:如何增加最大内存池大小?Apache Tomcat 9

0

你可以在catalina.sh中设置CATALINA_OPTS=-Xms512m -Xmx512m

打开你的tomcat-dir/bin/catalina.sh文件,然后在任意位置添加以下行 -

CATALINA_OPTS="$CATALINA_OPTS -Xms1024m -Xmx3024m"

并重新启动您的Tomcat


0
只需在 catalina.bat 文件中设置此额外行

行号大约为:143

set "CATALINA_OPTS=-Xms512m -Xmx512m"

并重新启动Tomcat服务


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接