性能测试中用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转换在性能方面却有不同的表现