可贵遇到一次java堆内存溢出(内心想着,终于能够来一次jvm性能优化了$$)html
先看下报错信息,java
java.lang.OutOfMemoryError: GC overhead limit exceeded
错误就是发出了这样的信号: 执行垃圾收集的时间比例太大, 有效的运算量过小. 默认状况下, 若是GC花费的时间超过 98%, 而且GC回收的内存少于 2%, JVM就会抛出这个错误。数据库
形成这个问题的缘由多是项目里某个地方定义的太多的map,list对象,或者一次从数据库中查询的数据量过大。
资料来源:OutOfMemoryError系列(2): GC overhead limit exceededwindows
查看tomcat服务启动信息,默认tomcat的内存分配大小是初始化128,最大值为256MBtomcat
根据网上教程,在tomcat\bin\catalina.bat文件性能优化
rem ----- Execute The Requested Command --------------------------------------- echo Using CATALINA_BASE: "%CATALINA_BASE%" echo Using CATALINA_HOME: "%CATALINA_HOME%" echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
在Execute The Request Command注释下面添加参数,设置jvm内存最大值服务器
set "JAVA_OPTS=%JAVA_OPTS% -Xms256m -Xmx512m"
配置完以后再次查看启动日志tomcat/logs/catalina.2019-07-08.logjvm
发现日志里显示,jvm参数仍是128 - 256 没变化post
继续查询资料,咱们修改的catalina.bat配置文件对以服务方式启动的tomcat无效果Tomcat内存设置详解性能
6.0以上的tomcat须要在tomcatw.exe文件中设置参数,好比个人tomcat9w.exe
用这个方法的前提是咱们的服务名称必须是tomcat9,不然这个tomcat9w.exe运行会报错,服务tomcat9未安装
安装tomcat服务的方法:在tomcat/bin目录下,运行命令 service.bat install
Usage: service.bat install/remove [service_name] [/user username]
服务安装完后,设置如上图的配置,启动服务后,内存修改完成。
看下监控的截图(这张图本来的jvm内存最大为256MB时,内存使用率为89%),修改内存为512MB以后就好不少了
经过以上内存的配置,能够总结windows下修改tomcat服务器jvm内存的两种方法:一种,直接修改catalina.bat文件,修改完后能够经过startup.bat方式启动直接生效
另外一种就是做为windows服务后台运行方式启动,这个须要修改tomcatw.exe的启动参数(不知道是否是动态参数修改,猜想不是)