JVM内存溢出之tomcat配置

不羁岁月 提交于 2019-12-04 20:46:46

JVM内存溢出常见的有一下两种:

第一种:java.lang.OutOfMemoryError: PermGen space

第二种:java.lang.OutOfMemoryError: Java heap space

第一种异常原因是因为我们项目中需要加载的文件太多所导致,项目发布时class文件和jar文件会被加载到jvm的永久区,当永久区空间不足时则会抛出 java.lang.OutOfMemoryError: PermGen space;

第二种为堆栈溢出,此异常在项目运行其产生,由于运行期产生太多的对象实例而没有被gc,所以才会抛出该异常;

针对以上两种异常,和Tomcat使用情况的不同,有如下三种解决方案:

1 、Tomcat解压版  通过startup.bat脚本运行:

      当我们通过startup.bat运行tomcat时,需要记事本catalina.bat并找到

echo Using CATALINA_BASE:   "%CATALINA_BASE%"该行,

然后在上面添加

set JAVA_OPTS=%JAVA_OPTS% -server -Xms100m -Xmx1024m -XX:PermSize=20m -XX:MaxPermSize=100m

并将参数设置合理值。

2. Tomcat解压版 注册为系统服务

解压版注册为系统服务方式为,cmd 进入tomcat/bin目录然后执行service.bat install 服务名称;

当你下载的解压文件中没有service.bat请到官网重新下载,你可能不会遇到该问题,但我遇到了!

此时我们可以打开系统服务管理界面看到我们注册成功的tomcat服务

如上图我注册的系统服务为:tomcat9090,此时我们就可以在此关闭和启动tomcat服务,并可以设置为开机自启;

如果服务注册成功却无法启动,如:

或者错误代码为1;

请查看Tomcat logs日志,开发中看日志,和记录日志至关重要。

无法启动可能有一下原因:

2.1,也是网上挺多的:将JDK中BIN下的 msvcr71.dll 复制到 TOMCAT 中的 BIN 下(没有解决问题)

2.2,检查jdk版本是否太低

2.3,查看jdk和tomcat是否都是32位或64位,当两者位数不同是通过startup.bat脚本是可以启动,但当注册为系统服务时是无  法启动的,当然tomcat安装版也一样,要使用位数相同,且版本更新时间相近;

2.4,当tomcat服务可以启动,但在启动过程中停止,请查看logs日志,此时最大可能为PermGen space,解决方案为

2.4.1:

卸载服务:cmd 进入tomcat/bin目录然后执行service.bat uninstall 服务名称;

然后打开service.bat文件找到

--JvmOptions "-Dcatalina.home=%CATALINA_HOME%;.................E%\conf\logging.properties"并在尾部添加

-XX:PermSize=20m;-XX:MaxPermSize=100m参数之间以“;”相隔

如:“...............conf\logging.properties;-XX:PermSize=20m;-XX:MaxPermSize=100m"参数值按个人所需设定;

并设置下列两个参数:

    --JvmMs 128 ^
    --JvmMx 1024

以上设置完成后请重新注册系统服务;

2.4.2:打开注册表

HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Procrun 2.0\Tomcat9090\Parameters\Java

Options右击,修改,添加-XX:PermSize=20m;-XX:MaxPermSize=100m

如图:

然后重启服务;

3.Tomcat 安装版,如出现无法安装,或无法启动等问题请参考2.2至2.4解决方案;

JVM内存参数说明请参考官网:

http://tomcat.apache.org/tomcat-7.0-doc/windows-service-howto.html

累屁了,回家吃饭。。。。。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!