Logger日志输出要使用占位符{}


最近项目做完,对一个接口应该压测的时候,测试人员反馈,并发从1加到10的时候,tps(每秒钟request/事务 数量)会遇到越来慢,并且内存使用率很高。

  看了具体的代码,也就是很简单的crud的操作,确认是有一些代码对数据库的查询有冗余,查询了两次。怀着试试的态度把代码修改成了查询一次。又试了一次,发现问题还是没有解决掉。最终定位到因为这个接口接收的参数中base64的数据,这个方法的第一句就是

 1 logger.info("收到的参数:"+str); 

  因为收到的数据参数比较大,并且打印日志的是使用字符串拼接的方式,这样就会造成创建String对象的时候创建大量的资源。因为String对象是不可变的,所以会消耗大量的堆内存。修改打印日志的方法

 1 logger.info("收到的参数:{}",str); 

可以修改这样的,使用占位符,对于占位符的形式而言,只有在我们需要的时候才会提取字符串,这样就会避免创建string对象的时候消耗大量的资源。

总结:写每行代码都应该深思熟虑,简单的一句日志输出,造成了很大的性能问题,还有tps变慢。得不偿失!!!


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM