有很多问题要问这个或类似的问题 .
它们都给出了必须执行的命令,我不明白的是我在哪里写这个命令 . 我想永久增加我的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)
10 回答
你的改变可能会奏效 . 您的应用程序是否需要大量内存 - 堆栈跟踪显示一些与图像相关的功能 .
我猜测错误要么立即发生,要么是大文件,要么是在几次请求后发生 .
如果错误立即发生,那么您可以进一步增加内存,或调查找出为什么一个文件需要如此多的内存 .
如果在多次请求之后发生错误,那么您可能会发生内存泄漏 - 垃圾收集器不会回收对象 . 使用像JProfiler这样的工具可以帮助您监视VM使用的内存量,并可以帮助您查看正在使用该内存的内容以及垃圾收集器未回收对象的原因 .
有一种机制可以在不修改分发中的任何文件的情况下执行此操作 . 您可以创建单独的文件
%CATALINA_HOME%\bin\setenv.bat
或$CATALINA_HOME/bin/setenv.sh
并将环境变量放在那里 . 此外,内存设置适用于JVM,而不是Tomcat,因此我将设置JAVA_OPTS
变量:set JAVA_OPTS=-Xmx512m
首先,您不能仅为tomcat应用程序更改内存设置,而是为所有tomcat实例更改内存设置 .
如果从控制台运行tomcat(使用startup.bat),则需要编辑catalina.bat并使用CATALINA_OPTS . 例如:
重新启动tomcat将应用新设置 .
如果您仍然遇到OutOfMemoryError,则需要知道应用程序在该特定时刻需要多少内存(nom.tam.util.ArrayFuncs ...) . 您要么必须优化应用程序,要么只是增加提供给tomcat的内存 .
在eclipse中打开服务器选项卡
右键单击打开
点击打开lauch配置
转到参数
在此,您可以在背书后添加VM参数
如果你使用的是Windows,那很简单 . 只需转到System Environnement变量(右侧计算机>属性>高级系统参数>环境变量);创建一个名为CATALINA_OPTS且值= -Xms512m -Xmx1024m的新系统变量 . 重启Tomcat并享受!
您需要在
catalina.sh
文件中添加以下行 .UPDATE :
catalina.sh
内容清楚地说 -所以你可以在setenv.sh中添加以上内容(如果文件不存在则创建一个文件) .
只需在
catalina.bat
文件中设置此额外行没有线路:143
并重启Tomcat服务
最简单的方法是:(在Linux / Ububuntu e.t.c中)
转到tomcat bin目录:
在bin目录“setenv.sh”下创建新文件,并在其中保存下面的条目 .
并发出命令:
在catalina日志文件中,您可以看到如下条目:
这证实了上述情况发生了变化 .
此外,可以在setenv.sh文件中相应地修改“Xms512m”和“-Xmx2048m”的值 .
tomcat的启动也可以分两步完成 . cd /opt/tomcat8.5/bin
对于Windows服务,您需要运行tomcat9w.exe(或6w / 7w / 8w),具体取决于您的tomcat版本 . 首先,确保tomcat已停止 . 然后双击tomcat9w.exe . 导航到Java选项卡 . 如果你知道你有64位Windows 64位Java和64位Tomcat,那么随意将内存设置为高于512.你'll need to do some task manager monitoring to determine how high to set it. For most apps developed in 2019... I' d建议初始内存池为1024,最大内存池为2048.当然,如果你的电脑有大量的内存......随时随地都可以随心所欲 . 另外,请看这个答案:How to increase Maximum Memory Pool Size? Apache Tomcat 9
您可以在catalina.sh中将其设置为CATALINA_OPTS = -Xms512m -Xmx512m
打开tomcat-dir / bin / catalina.sh文件并在任何地方添加以下行 -
并重新启动您的tomcat