背景:公司IAM系统的登录过程在压测过程中表现不太行,需要优化性能
一: 问题定位
开发环境为jmeter使用1s20个线程测试
压测记录:


通过arthas一层层trace寻找耗时程序,命令如图:

查询到是setPermissions的findAuthorityByRoleCodes方法比较耗时
本地setPermissions方法耗时

具体耗时sql:


开发环境setPermissions耗时:

开发环境authenticate耗时:

结论: findAuthorityByRoleCodes使用的sql查询耗时1s,导致登录卡慢
二: 问题处理
优化sql

优化后查询耗时

三: 优化后效果
jmeter压测记录


容器启动arthas监听运行耗时

性能对比:
最终发现是编辑菜单接口每次编辑都会在把角色对应的所有菜单都入库一遍导致数据库已经19106条数据了,实际上不重复的数据只有500多条导致卡慢