记一次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%左右,系统非常稳定。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值