在做性能测试的时候,最常见的问题就是CPU资源占用过高。今天发现了这样一个问题,作为一个性能问题信息放在这里,本文使用的工具和产品已经授权使用,并且对敏感信息进行了模糊处理,并不是无意中泄露了敏感信息。1.现象?压测的时候,发现不管并发增加多少,系统的处理能力都是一样的。以为达到了系统上限就放手了。后来突然想到忘记看资源消耗了(有点粗心),看了看资源消耗,结果发现应用的资源消耗已经满载了。多余的)。2、排查过程问题很明显,就是服务的CPU消耗满载。由于它已满载,我们使用我们的分析工具和APM探针组合照常解决问题。发现动态类加载class.forName其实是占用资源最多的,于是一一排查问题发现是jackson中间件导致的,然后一一找到业务代码(业务截图代码丢了,现场数据也没有了,方正是我通过工具定位到动态类加载找到业务代码了,哈哈哈,这里只能说工具好用,不得不说说的还不错)代码,看哪里用到了jackson方法,发现业务逻辑是将redis中获取的数据反序列化,转成字符串,使用的是com.fasterxml.jackson.databind.ObjectMapper,也是第一次遇到,哈哈,还是上官网看看怎么用吧(遇到问题先上官网,不要去乱七八糟的地方,如果官网没有存在,只能通过planB哈哈哈!)看看官网的介绍,【canusestaticsingleton,inject:justmakesuretoreuse!】(可以使用staticsingleton,inject:justmakesuretoreuse!)->官网推荐使用单例或者以reuse的形式来使用,那么这里尝试改一下,把这一段改成staticpublicobject,让他复用;ObjectMapperom=newObjectMapper();3.解决方案改成这样,然后跑压测看publicstaticfinalObjectMapperom=newObjectMapper();4、优化结果接口TPS从147.57提升到311.71,提升近50%,资源占用降低50%。,真的很开心5.总结性能优化无限制,服务性能提升无限制。软件不能加硬件,硬件不能加缓存,缓存不能改变架构,所以每个项目都有一个目标,只要这个目标达到就可以了,否则再无限制地继续下去就是要命,要钱。好了,本次性能优化分享就到此为止。如果以后还有其他案例,大家可以一起看看。欢迎评论交流!
