标签:使用率 就是 操作 需要 解决 方式 可变 方法 一个
最近项目做完,对一个接口应该压测的时候,测试人员反馈,并发从1加到10的时候,tps(每秒钟request/事务 数量)会遇到越来慢,并且内存使用率很高。
看了具体的代码,也就是很简单的crud的操作,确认是有一些代码对数据库的查询有冗余,查询了两次。怀着试试的态度把代码修改成了查询一次。又试了一次,发现问题还是没有解决掉。最终定位到因为这个接口接收的参数中base64的数据,这个方法的第一句就是
1 logger.info("收到的参数:"+str);
因为收到的数据参数比较大,并且打印日志的是使用字符串拼接的方式,这样就会造成创建String对象的时候创建大量的资源。因为String对象是不可变的,所以会消耗大量的堆内存。修改打印日志的方法
1 logger.info("收到的参数:{}",str);
可以修改这样的,使用占位符,对于占位符的形式而言,只有在我们需要的时候才会提取字符串,这样就会避免创建string对象的时候消耗大量的资源。
总结:写每行代码都应该深思熟虑,简单的一句日志输出,造成了很大的性能问题,还有tps变慢。得不偿失!!!
标签:使用率 就是 操作 需要 解决 方式 可变 方法 一个
原文地址:https://www.cnblogs.com/wuxixin/p/14249029.html