定位问题就像医生看病,一切要讲究证据,然后才能对症下药,做到有的放矢,前几天一个项目性能压测,QPS老是上不去,心里痛痛的,下定决心排查下瓶颈到底在哪。
大体说一下排查的过程:
1、任务启动
2、找到对应任务的进程ID
3、输入top命令,再按1,发现CPU利用率特别高,24核的机器,每核的利用率基本上到了80%左右。开始怀疑有一些线程逻辑处理上一直占着CPU,
4、输入Jstack 进程ID,查看堆栈信息,发现跟项目代码相关的堆栈信息如下:
从图中可以看出线程一直处于RUNNABLE,一个是在对数据进行压缩,一个是在数据序列化,查看相关代码发现,这个类中的逻辑是1、数据序列化 ,2、数据压缩,3、发送metaq消息,确认CPU利用率很高是在这个类了,那就用排除法来看哪一段耗性能高,一块块代码注释,去压测,发现影响因子最高的是压缩。