标签:
不知道为什么,窗外出现了乌云,又不知道为什么,烦人的蝉鸣突然变得无声了,大脑中的嘈杂瞬间归位了宁静,草他么,我的测试服务器又特么无缘无故的崩了。
作为菜鸟为了排查故障,最先想到的就是找日志,先后分析了项目启动日志,resin启动日志,jvm日志完全看不出来结果。
1.jvm日志显示gc正常,内存没有溢出。
2.resin进程在,启动日志也没有报错。
3.项目日志有条警告,log4j和另外一个log包有类冲突,一般警告都是无视的,为了安全删掉了无用的log包,重启resin服务依旧不可用,请求也打不进来。
日志分析没有结果,代码重新编译重部服务器依旧没有响应,束手无策。只好去跪舔大神求助。
同事看了日志之后发现一个问题,resin并没有真正的起来。
当时resin的stdout.log是这样的:
正常启动的时候应该会多打一句log如下:
[20:28:53.406] Resin started in 336646ms
说明resin在启动的时候因为某种原因阻塞掉了。于是就用了jstack来分析线程当时的情况。
jstack 572781 > tmp
上图是resin的主线程,在几个时刻使用jstack查看主线程的状态始终如此,说明主线程在这个方法上阻塞了。
稍微看了一下主线程的堆栈,原因肯定是涉及到ip和zookeeper,我才会回想起来,最近公司因为业务缩减,机房整理,以前的zk服务进行了迁移,
果然我找到项目中zk配置ping了一下原ip ping不通,之后把项目中zk配置改为了域名访问,在hosts中设置了一个ip之后就ok了。
经历过此次服务器宕机,学会了使用jstack来查找进程阻塞的原因,以及对java的线程转储有了进一步的了解。
还有个问题就是以前resin重部一次仅需要24s左右,如今需要3min,不知道是不是依然是zk配置的问题,有待进一步调查。
华丽的分割线:
jstack使用:
java线程转储:
标签:
原文地址:http://www.cnblogs.com/kniught-ice/p/4743387.html