java测试模块耗时,性能测试技巧:java程序cpu耗时分析

hi 大家好,今天飞测团队给大家带来一篇性能测试中java程序cpu耗时分析的技巧,希望对大家有帮助,有疑惑或者错误,欢迎交流和指正。

1概述

对java程序进行性能压测时,经常会出现cpu资源使用高,甚至资源不释放的情况。对于这类性能问题,可以通过jdk自带工具jvm去定位到cpu耗时较高的热点方法,下面就为大家详细介绍如何使用jvm去定位cpu耗时。

2连接jvm

1 开启jvm远程配置

通常连接方式是本地远程访问服务器的java虚拟机。下面以tomcat为例

进入tomat/bin目录,编辑catalina.sh文件,找到JAVA_OPTS,加入以下内容:

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmxremote.ssl=false

-Dcom.sun.management.jmxremote.port=1085 -Dcom.sun.management.jmxremote

2 打开jvm可视化工具进行连接

进入jdk/bin目录,双击jvisualvm.exe

java测试模块耗时,性能测试技巧:java程序cpu耗时分析_第1张图片

添加远程主机ip,点击“确认”

java测试模块耗时,性能测试技巧:java程序cpu耗时分析_第2张图片

添加jmx连接ip:jvm port,点击“确认”。端口为com.sun.management.jmxremote.port=1085

java测试模块耗时,性能测试技巧:java程序cpu耗时分析_第3张图片

3Jvm cpu耗时分析

进入抽样器页签,点击“CPU”按钮。Jvm会实时打印耗cpu热点方法,按照从大到小进行排序

java测试模块耗时,性能测试技巧:java程序cpu耗时分析_第4张图片

点击“快照”按钮,生成nps的快照文件。快照会以线程为单位,将每个线程方法以调用树的形式展现出来。使用例子作为具体讲解:

1. 首先让调用树以时间(cpu)倒序排列

java测试模块耗时,性能测试技巧:java程序cpu耗时分析_第5张图片

2. 找到应用线程(排除系统线程),按照时间一层层递归调用,最终找出最耗时的方法。

从下面截图可以看到,选取排序中第一个应用线程pool-1-thread-2,一层层展开调用数并结合。最后定位到getJedis方法自调用占用cpu时间达到90%,提给开发gg优化即可,是不是很简单

3. getJedis方法主要进行redis计数操作,每调用一次接口,程序会连接redis并做一次+1的逻辑,该方法占用cpu耗时90%。开发需要排查这段代码是否有性能问题,或者redis配置能否优化

坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注、转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期待的方向,有更多兴趣的欢迎切磋,我们微信订阅号,联系方式如下:

推荐文章

你可能感兴趣的:(java测试模块耗时)