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

时间:2010-04-27 04:41:53

标签: 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,没有“”围绕值)   export 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(Native方法)       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)

10 个答案:

答案 0 :(得分:25)

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

set JAVA_OPTS=-Xmx512m

答案 1 :(得分:9)

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

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

set CATALINA_OPTS=-Xms512m -Xmx512m

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

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

答案 2 :(得分:9)

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

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

如果错误立即发生,那么您可以进一步增加内存,或者调查一下为什么需要这么多内存。

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

答案 3 :(得分:4)

  • 在eclipse中打开服务器选项卡
  • 右键单击打开
  • 点击打开lauch配置
  • 转到参数
  • 您可以在此签署

    后添加VM参数
    -Xms64m -Xmx256m
    

答案 4 :(得分:3)

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

export CATALINA_OPTS="-Xms512M -Xmx1024M"

更新catalina.sh内容明确指出 -

  

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

所以你可以在setenv.sh中添加以上内容(如果文件不存在则创建一个文件)。

答案 5 :(得分:2)

如果您使用的是Windows,则非常简单。只需转到System Environnement变量(右键计算机>属性>高级系统参数>环境变量);创建一个名为CATALINA_OPTS且值= -Xms512m -Xmx1024m的新系统变量。重启Tomcat并享受!

答案 6 :(得分:2)

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

转到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

确认以上更改已发生。

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

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

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

答案 7 :(得分:0)

只需在catalina.bat文件

中设置此额外行

没有线路:143

set "CATALINA_OPTS=-Xms512m -Xmx512m"

重启Tomcat服务

答案 8 :(得分:0)

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

答案 9 :(得分:-1)

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

打开tomcat-dir / bin / catalina.sh文件并在任何地方添加以下行 -

CATALINA_OPTS="$CATALINA_OPTS -Xms1024m -Xmx3024m"

并重新启动tomcat