如下分享的都跳过了不少坑,包括redis、tomcat环境配置、机器硬件配置等等问题(与线上保持一致,或者硬件性能减配系数,例如线上:8C16G,压测:4C8G,系数简单相差2倍),直接把挖掘瓶颈的主要思路搬出台面。
全局图预览mysql
经过对某直播观看页面进行高并发压测,在APM(Pinpoint)监控中发现一个有趣的地方:redis
上图中两个红框中的数据(接近10s),相隔大概30分钟就发生,16:20左右,系统撑不住服务出现异常不可用,怀着好奇的心态,追查方法调用的栈,以下图所示:sql
该方法耗时多久呢?首先搞清楚Call Tree里面的一些概念:数据库
可见这个sql查询方法耗时14秒多,为何呢?APM里面已经显示了sql语句,在mysql中执行查询发现执行时间很快,那么问题出在哪里呢?只能继续深挖!缓存
经过对比一样的url,请求响应毫秒级的状况下,发现数据以下图所示:tomcat
从redis获取到数据后,并无再执行sql查询了,经过这个分析,咱们决定追踪代码还原真相(不懂代码的测试不是好开发):服务器
能够看到缓存失效以后,直接查询数据库了微信
从数据分析来看,sql优化的用处不大,并非返回了大量数据缺乏索引,这次能够跳过。并发
一、善用监控工具,例如APM,进行链路监控、服务器性能、方法调用顺序观察高并发
二、追踪方法栈和相关日志
三、深刻排查代码挖本质
微信公众号:乐少黑板报