JvisualVM分分析CPU波动较大的问题

今天遇到一个问题,在压力测试的时候CPU波动很大。采用JvisualVM工具进行分析。

1:先打开JvisualVM

JvisualVM分分析CPU波动较大的问题_第1张图片

2:找到对应的应用进程并双击,然后进入Sampler,在CPU波动的时候点击CPU对CPU进行抽样。注意线上环境千万不要使用Sampler右边的Profiler.

JvisualVM分分析CPU波动较大的问题_第2张图片

3:抽样进行一段时间后(建议3分钟左右就行了,时间越长生成的snapshot越大),点击”stop”,然后点击”snapshot”生成快照

JvisualVM分分析CPU波动较大的问题_第3张图片

4:生成快照后按照”Total Time(CPU)”排序,找到那些线程最耗费CPU,从下图中我们看到基本上都是DubboServerHandler,熟悉Dubbo框架的知道这都是我们的业务线程。那么我们对这些线程进行分析(多分析几个线程,双击指定线程就可以看这个线程的调用栈以及耗时情况),看看这些线程在哪里比较耗费CPU。

JvisualVM分分析CPU波动较大的问题_第4张图片

5:通过分析发现,在Dubbo远程调用的时候验证参数的时间比我们处理业务的时间都长(见下图红色方框框起来的方法)。结合Dubbo官方文档得知,Dubbo的参数验证这个特性是比较耗费性能的,而我们的接口参数使用了javax.validation注解来验证参数。所以我们在调用的时候使用validation=”false”禁止使用参数验证这个特性就好了CPU就回归正常了。

JvisualVM分分析CPU波动较大的问题_第5张图片

JvisualVM分分析CPU波动较大的问题_第6张图片

你可能感兴趣的:(JAVA)