背景
公司项目临近上线,测试中发现PAD查询数据性能很差,最长的需要50s才能展示数据。
分析问题
1、前端PAD只处理5条数据,不存在因数据量大导致的加载问题;
2、Mysql服务器中,本次查询作业单数据范围只有1000条左右,也不存在数据量大的问题;
3、在排除了PAD和Mysql数据库的问题后,问题焦点应该集中在MES系统接口中;
定位问题
翻出代码查看,发现接口中做的事情很多,无法准确的定位到是哪条代码的问题。因此采用arthas的trace功能定位问题。
安装和启动
curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
选择监控的Java程序,输入数字按回车
开启监控接口
PAD调用接口,Arthas监控接口执行情况
优化思路
1、
当前问题的根源在于查询数据库次数过多,且基本上查询的数据是一样的;
2、
对于重复数据,我们需要使用缓存;
3、
缓存分两种:
•
缓存中间件,例如
redis
,
memcache
;
•
局部变量缓存,例如
map
对象;
代码优化
最终定位到问题根源后,将多次频繁查询且数据一样的对象放入缓存中,优化后接口请求时间控制在2s内;