JVM内存溢出之tomcat配置

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

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

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

第一种异常缘由是由于咱们项目中须要加载的文件太多所致使,项目发布时class文件和jar文件会被加载到jvm的永久区,当永久区空间不足时则会抛出 java.lang.OutOfMemoryError: PermGen space;windows

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

针对以上两种异常,和Tomcat使用状况的不一样,有以下三种解决方案:jvm

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

      当咱们经过startup.bat运行tomcat时,须要记事本catalina.bat并找到日志

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

而后在上面添加htm

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

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

相关文章
相关标签/搜索