性能异常排查

一、定位问题

测试接口响应时间长,可能有以下几种问题:

  1. 代码质量差,jvm有大量blocked线程,可以通过jstack -pid查看。
  2. 接口逻辑链路复杂,需要调用很多关联应用。这个时候需要打开日志,观察各个关联应用的调用返回时间。
  3. 参数异常,正常应该传3天的时间段,结果传入1个月的时间段,在app上看是正常的,但是后台大量cpu被消耗在无意义的计算上。
  4. 使用中间件问题,用了不该用的工具,比如使用tair做排队,性能很差,换为redis就好很多。
  5. sql效率问题,mysql index问题。

二、定位代码

1. 查找最消耗cpu的线程

  1. 执行top
  2. shift + h,打开线程
  3. shift + p,按cpu使用率排列
  4. 查找最消耗cpu的进程pid
  5. jstack –pid > jvm.txt,将监控的jvm堆栈信息打印文件。
  6. 用计算器,将最消耗cpu的pid转换为16进制
  7. 在jvm.txt中查找此16进制数,一般情况下可以看到那些线程消耗了最多的cpu。

2. 查找存在阻塞的线程
在jvm.txt中查找“BLOCKED”关键字,可以查看那些线程有存在阻塞。

你可能感兴趣的:(性能异常排查)