最近公司有一次服务器宕机,根据压测发现某些接口 QPS 只有 10 几。
看了下那些接口的业务逻辑,有大量的接口调用、数据组装,要是挨个加日志查耗时也太慢了。
想了想不如直接通过持续采样的方式看看线程的分布情况,如果没有问题的话,火焰图应该是比较均匀的分布,如果存在问题,应该会有比较多的线程都集中在某个方法上。
于是做了个小工具(
https://github.com/ZichunYang/jstack-2-flame-rs)
然后直接开始压测,持续采样了一段时间的 jstack 信息生成火焰图,发现大部分线程都卡在了跨中心调用的某几个方法中,于是向上反馈跨中心调用的性能问题,经过测试同事的压测发现果然是那几个接口 QPS 太低导致的。
故分享一下通过 jstack 可视化方案来高速识别性能瓶颈的方案。