如何增加tomcat应用程序的Java堆空间

Ank*_*kur 25 java tomcat heap-memory

有很多问题要问这个或类似的问题.

它们都给出了必须执行的命令,我不明白的是我在哪里写这个命令.我想永久增加我的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以了解如何使用此变量.例如,

设置CATALINA_OPTS = -Xms512m -Xmx512m(Windows,没有""值周围)
导出CATALINA_OPTS =" - Xms512m -Xmx512m"(ksh/bash,""值围绕"
setenv CATALINA_OPTS"-Xms512m -Xmx512m"(tcsh/csh, ""围绕价值)

所以我换了线

设置CATALINA_OPTS =

设置CATALINA_OPTS = -Xms512m -Xmx512m

但我仍然得到错误.

javax.servlet.ServletException:Servlet执行引发异常

根本原因

java.lang.OutOfMemoryError:Java堆空间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)

Jur*_*ris 26

有一种机制可以在不修改分发中的任何文件的情况下执行此操作.您可以创建单独的文件%CATALINA_HOME%\bin\setenv.bat$CATALINA_HOME/bin/setenv.sh将环境变量放在那里.此外,内存设置适用于JVM,而不是Tomcat,因此我将设置JAVA_OPTS变量:

set JAVA_OPTS=-Xmx512m


che*_*vim 9

首先,您不能仅为tomcat应用程序更改内存设置,而是为所有tomcat实例更改内存设置.

如果从控制台运行tomcat(使用startup.bat),则需要编辑catalina.bat并使用CATALINA_OPTS.例如:

set CATALINA_OPTS=-Xms512m -Xmx512m
Run Code Online (Sandbox Code Playgroud)

重新启动tomcat将应用新设置.

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


mdm*_*dma 8

你的改变可能会奏效.您的应用程序是否需要大量内存 - 堆栈跟踪显示一些与图像相关的功能.

我猜测错误要么立即发生,要么是大文件,要么是在几次请求后发生.

如果错误立即发生,那么您可以进一步增加内存,或调查找​​出为什么一个文件需要如此多的内存.

如果在多次请求之后发生错误,那么您可能会发生内存泄漏 - 垃圾收集器不会回收对象.使用像JProfiler这样的工具 可以帮助您监视VM使用的内存量,并可以帮助您查看正在使用该内存的内容以及垃圾收集器未回收对象的原因.

  • 这个答案实际上没有回答OP关于*如何*增加Tomcat应用程序的Java堆空间的问题? (8认同)

小智 5


Ani*_*kur 5

您需要在catalina.sh文件中添加以下几行。

export CATALINA_OPTS="-Xms512M -Xmx1024M"
Run Code Online (Sandbox Code Playgroud)

更新catalina.sh内容清楚地表明-

不要在此脚本中设置变量。而是将它们放入 CATALINA_BASE/bin 中的脚本 setenv.sh 中,以将您的自定义设置分开。

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

  • 建议你把它放在一个单独的文件中:bin/setenv.sh (2认同)

Amm*_*mad 5

最简单的方法是:(在 Linux/Ububuntu 等中)

进入tomcat的bin目录:

cd /opt/tomcat8.5/bin
Run Code Online (Sandbox Code Playgroud)

在 bin 目录“setenv.sh”下创建新文件,并将下面提到的条目保存在其中。

export CATALINA_OPTS="$CATALINA_OPTS -Xms512m"
export CATALINA_OPTS="$CATALINA_OPTS -Xmx2048m"
export CATALINA_OPTS="$CATALINA_OPTS -XX:MaxPermSize=256m"
Run Code Online (Sandbox Code Playgroud)

并发出命令:

./catalina.sh run
Run Code Online (Sandbox Code Playgroud)

在您的 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
Run Code Online (Sandbox Code Playgroud)

这证实了上述变化的发生。

另外,可以在setenv.sh文件中相应修改“Xms512m”和“-Xmx2048m”的值。

tomcat的启动也可以分两步完成。cd /opt/tomcat8.5/bin

Step #1
run ./setenv.sh 
Step #2
./startup.sh
Run Code Online (Sandbox Code Playgroud)

如果您使用 systemd 编辑:

/usr/lib/systemd/system/tomcat8.service
Run Code Online (Sandbox Code Playgroud)

并设置

Environment=CATALINA_OPTS="-Xms512M -Xmx2048M -XX:MaxPermSize=256m"
Run Code Online (Sandbox Code Playgroud)