遇到一个页面加载慢的问题,
用arthas的trace对接口进行跟踪
image.png
可以看到整个接口耗时超过1分钟,但是却找不到任何耗时的调用,感觉有些调用没跟踪到
查看代码,发现代码中用了stream.foreach,并且这个循环会执行几千次
怀疑stream里的操作arthas跟踪不到,
改为list.foreach ,还是跟踪不到
最后改为for循环,果然跟踪到了
顺利找到了耗时点:
+---[94.03% min=0.0113ms,max=156.3477ms,total=29158.8747ms,count=3131] com.accuenergy.data.service.impl.EnergyAnalysisService:getDeviceParaTypeUnit() #152
这个接口本身有加缓存,但是系统重启后没缓存所以会很慢,考虑加一个缓存预热
解决了后台慢的问题后,发现还存在一个问题,前台下载耗时9s,因为返回的数据有9M
解决办法是在nginx上配置gzip压缩,压缩后的报文只有几百K