昨天下午公司有个后台管理系统,部署后,今天早上观察来看,发现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服务器中的一个重要组件,它扮演着监控和管理应用程序生命周期的角色。监听器是服务器启动时加载的Java类,用于监听特定事件,如Web应用程序的启动、停止、上下文初始化或销毁等。这些监听器...
对于某些动态加载类的应用程序来说,适当增大持久代可以避免频繁的Full GC。 #### 四、GC类型及其触发条件 1. **Scavenge GC**:主要针对年轻代进行的局部GC操作,当Eden区空间不足时触发,目的是清理不再使用的...
综上所述,"tomcat启动时定时循环执行内容(action)"涉及的是如何在Tomcat启动时通过Java原生或者Spring框架设置定时任务,实现服务器启动后的自动周期性执行。这样的功能在很多场景下都有实际的应用价值,如日志清理...
`LifeCycle`接口定义了生命周期中的各个阶段,而`LifecycleListener`允许我们监听这些阶段并执行相应的操作。例如,我们可以创建一个监听器在应用启动时初始化数据库连接池,或者在应用关闭时关闭连接池。监听器通过...
### 关于 Quartz 随 Tomcat 启动执行一次的知识点 #### 1. Quartz 概述 Quartz 是一个开源的作业调度框架,能够触发在指定时间执行的任务(也称为作业)。它提供了丰富的调度器功能,如支持复杂的循环调度、支持...
注意,虽然自动重启脚本能提高服务的稳定性,但频繁的重启可能是系统问题的表现,应查找并解决根本原因,避免频繁重启导致的数据丢失或服务不稳定。在实际部署时,还需要考虑资源限制,避免无休止的重启循环。同时,...
对tomcat的gclog日志进行分析,进行可视化展示,可以查看一些配置参数,检查是否软件是否运行正常
启动Tomcat可以通过执行`bin/startup.sh`(Unix/Linux)或`bin/startup.bat`(Windows)脚本。 【优化】 Tomcat的性能优化涵盖多个方面,包括内存调优、线程池配置、JVM参数调整、日志管理和应用代码优化。内存...
总之,"tomcat7.0.23exe可执行文件安装版"为Windows用户提供了一个快速安装Apache Tomcat 7.0.23的途径,尽管这个版本可能不适合最新技术的需求,但对于那些需要旧版本兼容性的项目,它仍然是一个实用的选择。...
tomcat启动时执行java自定义方法,一般用于启动时赋值情况。
标题中的“自动启动Tomcat”指的是在服务器上配置Tomcat服务,使其能够在关闭后自动重新启动,以确保应用程序的连续性和稳定性。C#是.NET框架的一部分,通常用于编写Windows服务或者控制台应用来实现这样的自动化...
java监听Tomcat是否宕机 可以重启
通过这种方式,我们可以在Tomcat启动后立即开始执行特定操作,并周期性地执行这些操作,无需用户触发。 至于压缩包中的文件“timer”,这可能是包含示例代码或者配置文件的资源,具体的内容需要解压后查看。如果这...
Windows系统下 启动tomcat服务bat 可执行脚本,当开发人员想要通过在java中开发一个启动Windows系统下tomcat的脚本文件时,就可以使用我这个
3. **Servlet生命周期**:Servlet在Tomcat中的生命周期包括加载、初始化、服务、销毁四个阶段。Tomcat通过Servlet容器管理Servlet实例,确保其正确地创建、初始化和销毁。 4. **请求处理**:当一个HTTP请求到达时,...
TCPMon 需要和 Tomcat 服务器集成,TCPMon 监听 8080 端口,Tomcat 服务器监听 8088 端口。TCPMon 将截获的 SOAP 消息转发到 Tomcat 服务器。 SOAP 消息的截获和显示: TCPMon 截获 SOAP 消息,并将其显示在 Port ...
Tomcat的架构设计中使用了多个设计模式,例如上述生命周期管理的实现运用了状态模式,事件监听机制则运用了观察者模式。这些设计模式的使用大大增强了Tomcat的扩展性、灵活性和可维护性。 总结来说,Tomcat的架构...
Tomcat是Apache软件基金会的Jakarta项目中的...总的来说,Tomcat7、Tomcat8和Tomcat9代表了Java Web服务器技术的发展历程,它们在兼容性、性能和功能上都有所提升,为开发者提供了可靠的平台来部署和运行Java Web应用。
例如,如果发现应用频繁发生Full GC,可能意味着堆内存设置不当,或者存在内存泄漏。 进一步分析GC日志,GCViewer可以帮助我们理解以下关键概念: 1. **年轻代和老年代**:Java对象在内存中的生命周期分为新生代和...