记一次tomcat启动后无服务的问题

问题描述:测试环境tomcat启动后无服务。


针对这个问题:我想了很多思路,这里只是说下正确的思路。


使用到的工具有:jps ,jstat ,jmap,vislualVM


tomcat启动后无服务。在jdk/bin目录下有两个工具。jps 和 jstat 。

一:jsp查看到tomcat的pid,就是 18938 Bootstrap 这样的一个进程


二:jstat -gcutil 18938  1000  10

打印内存情况,1000表示1秒打印一次,10表示打印10次。打印的结果会是:

 S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT   
 75.52   0.00  48.74  99.04  40.40    154    2.552     0    0.000    2.552
 75.52   0.00  48.75  99.04  40.40    154    2.552     0    0.000    2.552

朱恶意这里有一个O,表示Old使用的百分比,我这里Old使用了99,就表示Old区已经满了。于是我在tomcat的启动参数上加了打印gc日志。


三:在tomcat的bin下的  catalina.sh 的jvm参数加了   -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:../logs/gc.log

    tomcat启动后,直接在gc.log看到了系统在不断的执行FULL GC,如下图



  


全是这个。


四:看到这里,我想看看线程

在干嘛:于是内存转储 : jmap -dump:format=b,file=test.dump  12819

    得到test.dump文件后用jdk下bin的visualVM打开,在线程那里就可以看到所有的线程正在执行的过程。


五:我在线程执行中看到了Spring 在初始化容器,于是在线程调用栈中找到了 new ClassPathXmlApplicationContext 这样的代码在被多个线程执行。于是修改了代码。


六:修改代码后,程序发布后,old区保持在30%左右,系统非常稳定。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Quartz是一个开源的调度框架,常用于定时任务的调度和执行。当我们将Quartz集成到Tomcat中,并希望在Tomcat启动时执行一次任务时,可以按照以下步骤进行配置。 首先,我们需要在Tomcat的web.xml文件中配置一个Servlet,用于接收Tomcat启动的事件通知。在该Servlet的初始化方法中,我们可以通过调用Quartz的Scheduler实例的start方法来启动Quartz的调度器,以便开始任务的调度。 然后,我们需要定义一个Quartz的Job类,该类实现了Quartz的Job接口。在Job类中,我们可以实现我们需要执行的任务逻辑。例如,如果我们希望在Tomcat启动时打印一条日志,则可以在Job类的execute方法中执行打印日志的逻辑。 接下来,我们需要在Quartz的配置文件(例如quartz.properties)中配置需要执行的Job。在配置文件中,我们可以指定调度任务的执行时间和频率。例如,我们可以使用Cron表达式来定义定时任务的执行时间,如每天的凌晨2点执行一次。 最后,我们将配置文件和Job类放置在项目的classpath目录下,并将其添加到Tomcat的类路径中。 当我们启动Tomcat时,Tomcat会初始化Servlet,并触发Servlet的初始化方法。在初始化方法中,我们会调用Quartz的Scheduler实例的start方法,从而启动Quartz的调度器。Quartz的调度器会按照配置文件中的设定,执行我们定义的任务逻辑,例如打印一条日志。 总结起来,通过在Tomcat中集成Quartz,并在Tomcat启动时执行一次任务,我们可以使用Tomcat启动事件通知机制,在Quartz中定义和调度任务,并在任务启动时执行我们所需的逻辑。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值