河津网站制作,网站商城微信支付接口,做商城网站数据库分类该有哪些,专门做二手书网站或app线上服务平均响应时间太长#xff0c;怎么排查#xff1f;https://xie.infoq.cn/article/914b5c56000a3880016abd8d6前言#xff1a;最近线上环境某个接口服务响应时间偏长#xff0c;导致用户体验超差#xff0c;那平时该怎么快速的排查这类问题呢#xff1f;①、为代码… 线上服务平均响应时间太长怎么排查https://xie.infoq.cn/article/914b5c56000a3880016abd8d6前言最近线上环境某个接口服务响应时间偏长导致用户体验超差那平时该怎么快速的排查这类问题呢①、为代码添加上详细的打印日志不建议 一是线上环境没法随便的重新部署更换了详细日志的代码二是 添加详细的日志输出那就意味这会生成大量的日志文件这些日志文件会占据大量服务器磁盘空间。②、搭建一个模拟了线上环境的测试环境进行复盘排查额出现了这种问题哪有那么多的时间让你进行环境复盘排查所以此方案也是 不建议的 。③、线上诊断神器 Arthas 这个工具是阿里开源的专门用于线上环境问题排查的这个工具提供了很多 的 命令 用来排查问题当出现上面的响应时间偏长的问题就可以使用 Arthas 提供的 trace 命令进行排查使用这个工具的 trace 命令可以统计到方法中整个调用链路上的所有性能开销和追踪调用链路查找其中耗时比较长的方法再具体排查即可。文章接下来将从两方面展开①、搭建模拟线上服务接口响应时间偏长的环境SpringBoot 服务接口 JMeter 模拟服务接口调用②、使用诊断神器 Arthas 提供的命令 trace 命令进行响应时间偏长的问题排查模拟线上环境1、SpringBoot 项目搭建并且编写好服务接口注意服务接口代码为了简便只写了 一些大循环的代码 来模拟较长的耗时除此之外实际上还包含很多多其它常见的情况例如①、服务接口方法中存在很多的 JDBC 操作 并且由于数据库中数据量太大导致很多的 JDBC 查询非常耗时并且此时可能由于还没有创建合适的索引导致查询耗时更加的长最终导致服务接口响应时间偏长②、此服务接口中调用了 其它的服务接口 由于内部调用的其它服务接口出现问题等导致此其它服务接口执行耗时比较长进而导致服务接口响应时间偏长服务接口代码如下test1、test2方法如下2、JMeter 模拟用户调用的测试脚本配置3、服务接口 SpringBoot 代码 和 JMeter 测试脚本的所在项目位置服务接口代码准备好后使用IDEA开发工具将其导出为 Jar 包 。 为了模拟最为真实的线上环境需将准备好的 服务接口 Jar 包放到 服务器中然后使用命令 java -jar *.jar 运行起 Jar 包然后使用 JMeter 进行接口的调用在 聚合报告 中发现平均响应时间偏长如图如果有用户反映某功能响应时间太长了别着急根据下面的方法进行排查绝对方便又快速的找到问题原因。Arthas 问题排查1、首先需要下载阿里开源的Arthas 的诊断工具 Jar 包下载地址arthas-boot.jar 然后将 Jar 包放到 部署服务接口项目的服务器中 。2、然后使用 ps 命令查询出当前运行服务接口的程序进程号例如本文章模拟的服务接口程序 Jar 包名称为 springboot_arthas-1.0.0.jar 所以命令为ps -ef | grep springboot_arthas-1.0.0 。3、然后运行Arthas 诊断工具命令java -jar arthas-boot.jar 开始运行的界面如图此时诊断工具还没有运行完需要手动选择要诊断/监控的java 进程并且此工具也会列出全部的java进程号你只需要输入 它们最前的序号 [1] 即可如图4、运行完后可以使用 trace命令 监控服务接口方法中调用的其它方法的耗时trace 命令能主动搜索 class-patternmethod-pattern 对应的方法调用路径渲染和统计整个调用链路上的所有性能开销和追踪调用链路。具体命令格式trace [全限定类名][类中的方法名] 例如监控本服务接口com.lyl.controller.TestController : 全限定类名processTestController 类中的方法具体命令trace com.lyl.controller.TestController process 5、trace 命令执行结果展示如图通过trace 命令监控统计的调用链路各个方法的执行耗时可以发现调用的 com.lyl.util.StringUtil 类中的 test2() 方法执行耗时比较大所以需要特别去查看这个方法的代码是否存在问题如果这个代码中还存在许多的方法调用链路则需要再次使用 trace 命令进行监控调用链路的耗时找出具体可能存在问题的方法。Arthas 阿里开源的诊断工具还提供了很多的命令供使用大家可以去查看学习地址命令列表 。注意①、使用Arthas 诊断的程序代码在打包时 不能混淆 否则在使用trace 命令会报 类或方法找不到 ②、在使用trace命令监控统计时需要JMeter测试脚本正在运行调用服务接口如果没有调用则统计不到内部调用链路的耗时情况能力有限只能整理这么多有不对的地方欢迎指出讨论