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

  • 相关阅读:
    转载 Spring boot中配置事务管理
    Mybatis Plus条件构造器condition动态判断优化
    【转载】 利用p6spy拦截并查看数据库执行操作
    使用P6Spy监控你的Spring boot数据库操作
    【转载】 《SpringBoot2.0 实战》系列-集成Quartz定时任务(持久化到数据库)
    baomidou的dynamic-datasource读写分离实现和加入AOP根据方法名选择库
    @EnableWebMvc 注解会让Swagger无效访问的问题
    RestTemplate发送请求并携带header信息
    Shell/Linux 将一个文件中的每两行合并成一行
    蛋白质印迹法(免疫印迹试验,Western Blot)
  • 原文地址:https://www.cnblogs.com/xiaoshubass/p/16753773.html
Copyright © 2020-2023  润新知