利用jstat/jstack/top等工具查找线上开源项目问题的
2016-12-28 本文已影响96人
LOC_Thomas
前言
公司通过zipkin来收集数据,然后突然有一天由于系统升级,导致zipkin项目被关闭,发现的时候表示已经累积了一些数据在kafka中,大概几十万条数据
过程
- 然后马上重启zipkin服务,然后发现消费速度开始很快,后面就基本不动了。消费速度变得很慢很慢。
- 开始猜测是由于每条trace很大,造成了系统压力,然后通过top进行查看,发现cpu的使用率都是95+%,就觉得系统一定有问题。
- 然后通过jstack命令来进行查看,发现在一些和外部es通讯的地方被阻塞或者在运行,就猜测是不是外部的es的问题, 后面通过ping命令来进行查看,发现并没有问题。
- 然后通过top -H �来查看具体运行的线程消耗内存的情况,发现cpu全部被其中四个线程所消耗,其中一个线程号为4110。
- 然后通过
printf 0x%x 4110
命令,查看线程号的16进制,然后再配合jstack命令,发现这4个线程都是gc线程,用于处理gc任务。 - 通过
jstat -gcutil
命令发现full gc 大量超过了 young gc,所以觉得应该是jvm参数设置的问题,然后根据机器的内存情况重新设置了zipkin项目的内存大小。 - 重启后数据很快被消费完了, 没有出现其他的问题。
总结
对于一般的项目, 开始不要怀疑是代码的问题。然后通过类似于jstack/jstat/top/jvm参数设置
命令来分析问题所在,优化参数一般是可以解决问题的。