定位慢操作
- 针对查询问题可以考虑的方法有是去服务器上开启mysql的慢查询日志,与使用arthas定位.
- 为了与运维工作解耦开,这边仅介绍使用arthas.安装运行点击可以参考
- 运行起服务,运行起arthas,在arthas的shell交互界面中选择你的服务进入.
- 输入命令trace你运行慢的函数,可以使用ognl表达式或其他,也可以直接通配符.
例如我要排查FanLibrary这个类下面的getHttpResponse方法。
trace com.fun.frame.httpclient.FanLibrary getHttpResponse
然后再去调用原服务的这个方法。这时候arthas会输出各层次的代码耗时,一目了然的找到其中耗时比较大的方法操作.
tips: 如果打类名和生成比较慢,可以考虑使用idea的arthas插件。应该在插件市场搜索安装即可。
定位位置后定位原因
sql查询慢
- 如果是sql问题引起的,考虑将mybatis-batis的sql打印开启,将运行的sql复制到自己用的sql工具里分析。
- 在你的sql之前输入explain再执行。如
explain select * from a
然后就会展示出它的执行计划,具体每一列的含义可以具体搜索学习。
- 找到其中慢的部分。进行优化。
具体优化原则很多,具体问题具体查询即可,普遍无非就是加索引。针对普通列考虑加索引,如果加了索引没用,再次使用explain排查没走索引的原因.如果是json列可以考虑构建虚拟列等方法。总而言之就是具体问题具体分析,方法很多,结果导向。
非sql查询问题
- 一般就是vm或者网络或文件的io问题。
- 前者比较简单。没什么好讲的,结果导向,具体可以看<<JVM调优>>这本书,后者的话遇到情况比较多,考虑如优化业务、文件io、换netty之类的。
解决问题
针对排查出的原因,使用具体的方法解决。