昨天下午公司有个后台管理系统,部署后,今天早上观察来看,发现gc.log中频繁的执行full gc,活动轨迹很明确,都是一个小时执行一次整个空间的full gc,但明显内存占用率还远远没有达到阈值,从日志上可以明确判断出应该是执行System.gc后导致的,因此回忆了下,貌似记得Tomcat的server.xml中有一个防止内存溢出的JreMemoryLeakPreventionListener监听,这个监听器每小时就会执行一次full gc操作。
GC日志如下:
2014-12-30T17:58:35.403+0800: 1.346: [GC [PSYoungGen: 11796K->1600K(688128K)] 11796K->1600K(1998848K), 0.0079880 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 2014-12-30T17:58:35.412+0800: 1.354: [Full GC (System) [PSYoungGen: 1600K->0K(688128K)] [ParOldGen: 0K->1533K(1310720K)] 1600K->1533K(1998848K) [PSPermGen: 9890K->9881K(21248K)], 0.1058880 secs] [Times: user=0.10 sys=0.00, real=0.10 secs] 2014-12-30T18:58:35.523+0800: 3601.466: [GC [PSYoungGen: 448564K->6578K(688128K)] 450097K->8111K(1998848K), 0.0310010 secs] [Times: user=0.03 sys=0.00, real=0.03 secs] 2014-12-30T18:58:35.555+0800: 3601.497: [Full GC (System) [PSYoungGen: 6578K->0K(688128K)] [ParOldGen: 1533K->7148K(1310720K)] 8111K->7148K(1998848K) [PSPermGen: 27454K->27270K(47040K)], 0.2429830 secs] [Times: user=0.32 sys=0.01, real=0.24 secs] 2014-12-30T19:58:35.803+0800: 7201.746: [GC [PSYoungGen: 108961K->448K(688128K)] 116109K->7596K(1998848K), 0.0059280 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 2014-12-30T19:58:35.809+0800: 7201.752: [Full GC (System) [PSYoungGen: 448K->0K(688128K)] [ParOldGen: 7148K->6779K(1310720K)] 7596K->6779K(1998848K) [PSPermGen: 27298K->27295K(49728K)], 0.1770710 secs] [Times: user=0.27 sys=0.00, real=0.18 secs]
网上还是有蛮多解决方案,还是说说我最比较喜欢且常用的吧,
1、添加gcDaemonProtection="false"参数禁用JreMemoryLeakPreventionListener监听。
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" gcDaemonProtection="false"/>
2、直接删除JreMemoryLeakPreventionListener监听。
相关推荐
tomcat监听器
tomcat GC 优化配置
tomcat启动时立即调用quartz执行一次
对tomcat的gclog日志进行分析,进行可视化展示,可以查看一些配置参数,检查是否软件是否运行正常
用于linux服务器上tomcat,监听运行情况,并根据情况自动重启的
tomcat启动时执行java自定义方法,一般用于启动时赋值情况。
现在很多地方都下载不了安装版.exe的apache-tomcat了,为方便大家安装apache-tomcat,特意上传一个,希望给大家一个方便!
tomcat远程代码执行漏洞验证
关于tomcat集群 部署 设置 优化 文档
java监听Tomcat是否宕机 可以重启
Windows系统下 启动tomcat服务bat 可执行脚本,当开发人员想要通过在java中开发一个启动Windows系统下tomcat的脚本文件时,就可以使用我这个
tomcat启动时定时循环执行内容(action) 本人亲自编写的小程序,简单易懂,欢迎下载评论!
Apache tomcat远程代码执行代码
tomcat启动|退出执行事件类: import java.io.File; import java.io.FileWriter; import java.io.IOException; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import ...
tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat最新客户端tomcat...
内含tomcat7 tomcat8 tomcat9免安装版本;供需要的人下载。
包含tomcat7,tomcat8,tomcat9,解压、在eclipse配置好即可。
代码如下:JAVA_OPTS=’-Xms512m -Xmx4096m -XX:PermSize=64M -XX:MaxNewSize=128m -XX:MaxPermSize=64m -XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -Xloggc:/usr/local/tomcat/logs/tomcat_gc.log’ ...
tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0tomcat 5.0
功能: 在tomcat启动时,就自动执行一servlet,此servlet隔段时间处理某一操作。