一次resin服务器故障排查,以及jstack初步了解

  不知道为什么,窗外出现了乌云,又不知道为什么,烦人的蝉鸣突然变得无声了,大脑中的嘈杂瞬间归位了宁静,草他么,我的测试服务器又特么无缘无故的崩了。

  作为菜鸟为了排查故障,最先想到的就是找日志,先后分析了项目启动日志,resin启动日志,jvm日志完全看不出来结果。

    1.jvm日志显示gc正常,内存没有溢出。

      一次resin服务器故障排查,以及jstack初步了解_第1张图片

    2.resin进程在,启动日志也没有报错。

    3.项目日志有条警告,log4j和另外一个log包有类冲突,一般警告都是无视的,为了安全删掉了无用的log包,重启resin服务依旧不可用,请求也打不进来。

  日志分析没有结果,代码重新编译重部服务器依旧没有响应,束手无策。只好去跪舔大神求助。

  同事看了日志之后发现一个问题,resin并没有真正的起来。

    当时resin的stdout.log是这样的:

      一次resin服务器故障排查,以及jstack初步了解_第2张图片

    正常启动的时候应该会多打一句log如下:

      [20:28:53.406] Resin started in 336646ms

    说明resin在启动的时候因为某种原因阻塞掉了。于是就用了jstack来分析线程当时的情况。

      jstack 572781 > tmp

      一次resin服务器故障排查,以及jstack初步了解_第3张图片

    上图是resin的主线程,在几个时刻使用jstack查看主线程的状态始终如此,说明主线程在这个方法上阻塞了。

    稍微看了一下主线程的堆栈,原因肯定是涉及到ip和zookeeper,我才会回想起来,最近公司因为业务缩减,机房整理,以前的zk服务进行了迁移,

    果然我找到项目中zk配置ping了一下原ip ping不通,之后把项目中zk配置改为了域名访问,在hosts中设置了一个ip之后就ok了。

  经历过此次服务器宕机,学会了使用jstack来查找进程阻塞的原因,以及对java的线程转储有了进一步的了解。

  还有个问题就是以前resin重部一次仅需要24s左右,如今需要3min,不知道是不是依然是zk配置的问题,有待进一步调查。

 

 

华丽的分割线:

  jstack使用:

  java线程转储:

 

你可能感兴趣的:(一次resin服务器故障排查,以及jstack初步了解)