java杂谈

利用jstat/jstack/top等工具查找线上开源项目问题的

2016-12-28  本文已影响96人  LOC_Thomas

前言

公司通过zipkin来收集数据,然后突然有一天由于系统升级,导致zipkin项目被关闭,发现的时候表示已经累积了一些数据在kafka中,大概几十万条数据

过程

  1. 然后马上重启zipkin服务,然后发现消费速度开始很快,后面就基本不动了。消费速度变得很慢很慢。
  2. 开始猜测是由于每条trace很大,造成了系统压力,然后通过top进行查看,发现cpu的使用率都是95+%,就觉得系统一定有问题。
  3. 然后通过jstack命令来进行查看,发现在一些和外部es通讯的地方被阻塞或者在运行,就猜测是不是外部的es的问题, 后面通过ping命令来进行查看,发现并没有问题。
  4. 然后通过top -H �来查看具体运行的线程消耗内存的情况,发现cpu全部被其中四个线程所消耗,其中一个线程号为4110。
  5. 然后通过 printf 0x%x 4110 命令,查看线程号的16进制,然后再配合jstack命令,发现这4个线程都是gc线程,用于处理gc任务。
  6. 通过 jstat -gcutil 命令发现full gc 大量超过了 young gc,所以觉得应该是jvm参数设置的问题,然后根据机器的内存情况重新设置了zipkin项目的内存大小。
  7. 重启后数据很快被消费完了, 没有出现其他的问题。

总结

对于一般的项目, 开始不要怀疑是代码的问题。然后通过类似于jstack/jstat/top/jvm参数设置 命令来分析问题所在,优化参数一般是可以解决问题的。

上一篇下一篇

猜你喜欢

热点阅读