tomcat闪退的一次排查记录

1. 背景

项目部署在服务器上,在夜深人静的时候闪退了2次,第二天早上来了之后,发现tomcat服务器又被关闭了,因为服务器之前总有人恶搞(行为类似:数据库的配置信息max_packet被修改,在tomcat下跑了别人的项目),就一直认为是有人在恶搞,试着保护自己的服务器,用电脑管家杀了毒。以为没事了,但是在下一天的早上同样的事情又发生了,由于甲方的压力,自己硬着头皮去找出线索。

2. 行动

  • 看了tomcat的日志文件
    tomcat:localhost

    开始设想,是不是因为“sessionCreated” ,在网上搜索了sessionCreated,有人说是正常信息的打印,没有往下继续探索为什么会打印这种信息。

  • 继续
    tomcat:access_log

    是不是因为这个呢,通过搜索发现也不是,网上说tomcat-user.xml把注释删掉就不会有这些东西了,我仍然没有验证。

  • 同样在,access_log中发现这样的错误信息
 java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986”

感觉就是地址中带上了非法的字符,不应该直接把tomcat搞崩溃啊,tomcat的日志文件都看了,依然什么线索没有发现,快要走不下去......

  • 直接百度吧
    直接在百度上搜索了“tcomat异常退出情况”
    看到了一个大牛的blog tomcat异常退出情况 果然就是不一样,给我提供了几种设想,会不会是应为内存溢出什么的呢,然后在tomcat的bin目录下发发现了几个好奇的文件
    tomcat异常退出日志
    这几个文件这么面生,怎么从来没有见过,打开一个,看不懂啊,那又能怎样,继续百度(随意从文件中挑出一句话,没错就是第一句)
A fatal error has been detected by the Java Runtime Environment:

然后发现又好多大牛的关于此类问题的blog,我着重看的是这个大牛的 A fatal error has been detected by the Java Runtime Environment: 果然是站在巨人的肩膀上,分析的特别具体,但是由于自己太菜,有好多关于jvm的知识没有接触,反正最终的出的结论就是内存不够用

Stack: [0x0000000032d70000,0x0000000032e70000],  sp=0x0000000032e6ee50,  free space=1019k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [tcnative-1.dll+0x14ac2]
C  [tcnative-1.dll+0x11e7]
C  0x0000000004b04d0a

发现free space 仅有1M,感觉显示内存溢出的原因,既然有了这个原因,就下手吧

  • 修改tomcat的jvm的参数
    依然是百度的Tomcat调优 tomcat调优
    另一个:tomcat调优

故事还未完,项目需要一段时间的测试,来验证问题是否已经解决。
经过1个星期的测试,项目没有闪退过,应该就是这个问题了。


3. 总结

  1. 平时要加强对底层知识的学习力度
  2. 要善于查看日志,能够根据日志分析项目的运行状态
  3. 保持一颗好奇心,对未知的事物不要服从

你可能感兴趣的:(tomcat闪退的一次排查记录)