CPU消耗过高产生的原因应该有很多,目前总结有三个,后续继续补充更新:
3、程序算法的问题。
本文介绍由于算法本身问题导致的CPU消耗高,而tps低的情况。
1、测试之前先确保应用服务器资源正常,dstat -tcmnd --disk-util
2、执行压测之后监控应用服务器和数据库服务器
(1)应用服务器CPU如下
(2)数据库服务器CPU如下
(3)程序tps如下,并发用户数为20
tps的高低的界定需要根据程序、配置、需求指标来界定,此接口2000以内定义为低。
从以上监控可以看出,应用服务器CPU使用率已经超过90%,而数据库服务器CPU使用率几乎为0,这种情况应该考虑对进程进行监控,看具体是哪个线程CPU的使用率比较高。
2、线程对CPU使用率监控
(1)命令监控
使用命令来进行可以,但是不方便不直观
top命令查看进程对CPU的使用率
top -H -p pid 查看进程内具体线程对CPU的使用情况
(2)使用JProfiler进行监控
查看cpu负载情况
查看函数调用关系
查看热点调用
从上述测试结果得知,gson组件在进行序列化和反序列化的过程消耗大量的CPU
几种json转化组将性能比较: