性能测试中用Jprofiler分析CPU消耗过高的问题【杭州多测师】【杭州多测师_王sir】

1、压测的时候发现、应用服务器的CPU使用率比较高、通常大于80%

2、分2种情况:

1)接口性能好、比如响应时间小于10毫秒、此时CPU使用率高是正常的不需要优化

2)接口性能不好、比如响应时间大于200毫秒、tps也很低、此时需要优化

3、CPU如果消耗过高可能导致的原因有:

1)使用了比较复杂的算法、比如加密和解密的算法

2)压缩和解压还有序列化的一些操作

3)代码bug比如一些死循环之类的

4、在Linux启动压测jmeter -n -t test.jmx选择启用调度器、选择30并发、压测300秒钟   然后通过dstat - tcmnd --disk-util命令进行监控

5、tps达到7000/sec的时候、32核的CPU居然使用了30%

6、所以把jprofiler.rpm文件上传到服务器、进行安装、然后在Tomcat/bin/catalina.out配置jvm的参数添加

-agentpath:/opt/jprofiler11/bin/linux-x86/ilbjprofilerti.so=port=8849,nowait

7、客户端把jprofiler的EXE文件安装一下 ==》在注册机用license码

8、客户端连接服务器=》start center=》new session=》new remote intergration新建远程集成==》on a remote computer ==》Linux X86 =》oracle 1.8==》64位默认选择=》然后输入IP地址

9、Switch sampling==》性能消耗低一些

10、jprofiler可以对jvm、CPU、memory、堆heap Walker和栈、threads线程、锁、数据库都可以进行监控

11、CPU views ==》call tree能显示调用关系看出最底层是哪个方法消耗CPU最高 ==》hot Spots热点方法可以直接显示哪个方法消耗CPU最高

12、谷歌的gson里面进行序列化、对象转换为JSON的时候性能不太好 ==》可以替换为fastJSON性能会好很多

13、阿里巴巴的fastJSON在进行JSON转换的时候是性能最好的

14、代码实践:

1)当前端调用接口传入value值为1的时候调用Gjson.json进行转换

2)单前端调用接口传入value值为2的时候调用JSON.toJsonString转换

15、所以在前端调用接口传入为2然后看看CPU的消耗会是怎样? ==》更换之后tps达到了1.6万/sec整整提升了大概9000/sec 、然而CPU的占用只有20%、CPU的消化降低了但是tps却反而提升了

16、所以一个小小的JSON转换在性能方面却有不同的表现

 

posted @ 2022-10-04 14:57  多测师_王sir  阅读(157)  评论(0编辑  收藏  举报