java trace优化_使用Arthas trace定位并优化接口响应慢的问题.md
## Arthas trace命令介绍
>
**打印方法内部调用路径,并输出方法路径上的每个节点上耗时。**
*trace命令只会trace匹配到的函数里的子调用,并不会向下trace多层。因为trace是代价比较贵的,多层trace可能会导致最终要trace的类和函数非常多。*
## 使用方法
命令格式:
```bash
trace class method
```
示例:
```bash
[arthas@30]$ trace com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl checkPrePub
Press Q or Ctrl+C to abort.
Affect(class-cnt:2 , method-cnt:4) cost in 408 ms.
`---ts=2019-11-12 14:47:28;thread_name=http-nio-8266-exec-147;id=7938;is_daemon=true;priority=5;TCCL=org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedWebappClassLoader@6c902fd5
`---[3771.437071ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:checkPrePub()
+---[0.003039ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getClusterCode() #157
+---[0.001022ms] java.util.Map:get() #157
+---[0.002185ms] com.sunshanpeng.platform.pub.common.enums.PubStatusEnum:getCode() #161
+---[0.001843ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setStatus() #161
+---[1645.580557ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:selectBySelective() #162
+---[0.002757ms] org.springframework.util.CollectionUtils:isEmpty() #163
+---[0.001587ms] com.sunshanpeng.platform.pub.common.enums.PubStatusEnum:getCode() #169
+---[0.002123ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setStatus() #169
+---[1478.93462ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:selectBySelective() #170
+---[0.002329ms] org.springframework.util.CollectionUtils:isEmpty() #171
`---[646.735412ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:buildPublishDetailDTO() #178
`---[646.539364ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:buildPublishDetailDTO()
+---[0.011378ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getPubEnv() #513
+---[0.002328ms] org.springframework.util.StringUtils:isEmpty() #513
+---[0.001789ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getClusterCode() #516
+---[0.001076ms] org.springframework.util.StringUtils:isEmpty() #516
+---[0.005232ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getSysCode() #519
+---[0.001092ms] org.springframework.util.StringUtils:isEmpty() #519
+---[0.004531ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getSysName() #522
+---[9.95E-4ms] org.springframework.util.StringUtils:isEmpty() #522
+---[0.001071ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getPubEnv() #525
+---[0.001343ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getClusterCode() #525
+---[0.001108ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getSysCode() #525
+---[1.617415ms] com.sunshanpeng.platform.pub.service.EnvBindService:getRelationByArgs() #525
+---[0.002319ms] java.util.List:get() #526
+---[0.014244ms] java.util.List:size() #527
+---[0.011744ms] com.sunshanpeng.platform.pub.dto.envbind.EnvBindDetailDTO:getJobName() #527
+---[0.001469ms] org.springframework.util.StringUtils:isEmpty() #527
+---[0.001367ms] com.sunshanpeng.platform.pub.dto.envbind.EnvBindDetailDTO:getJobName() #532
+---[0.006322ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setJobName() #532
+---[0.001252ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getPubEnv() #535
+---[0.001285ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getClusterCode() #535
+---[0.001253ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getSysCode() #535
+---[643.723767ms] com.sunshanpeng.platform.pub.service.JenkinsService:getBuildArgs() #535
+---[0.010914ms] com.sunshanpeng.platform.pub.common.enums.CommonStatusEnum:getCode() #536
+---[0.006734ms] com.sunshanpeng.platform.pub.dto.envbind.EnvBindDetailDTO:getSwEnable() #536
+---[0.014911ms] java.lang.Integer:equals() #536
+---[0.002085ms] java.lang.Boolean:valueOf() #536
+---[0.011168ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setApmEnable() #536
+---[0.004956ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getPubParamKey() #542
+---[0.002016ms] org.springframework.util.StringUtils:isEmpty() #542
+---[0.002196ms] java.util.Map:get() #550
+---[0.004316ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getPubParamValue() #551
+---[0.001027ms] org.springframework.util.StringUtils:isEmpty() #551
+---[0.004536ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getRemark() #559
+---[0.001113ms] org.springframework.util.StringUtils:isEmpty() #559
+---[0.004637ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setRemark() #560
+---[0.001502ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getSysCode() #562
+---[0.322113ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:getCiCode() #562
+---[0.005395ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setCiCode() #562
+---[0.004249ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setConsoleLog() #563
+---[0.001335ms] java.lang.Integer:valueOf() #564
+---[0.004697ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setBuildNo() #564
+---[0.004276ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setCreator() #565
+---[0.004354ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setCreatorCode() #566
+---[0.020689ms] java.time.LocalDateTime:now() #567
+---[0.004397ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setGmtCreate() #567
+---[0.002075ms] java.time.LocalDateTime:now() #568
+---[0.004739ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setGmtModify() #568
+---[0.001317ms] com.sunshanpeng.platform.pub.common.enums.PubStatusEnum:getCode() #569
`---[0.001365ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setStatus() #569
```
**可以看到目标方法的耗时为`3771.437071ms`,其中`com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:selectBySelective()`方法调用了两次,并且耗时都在1.5秒左右。**
## 优化前执行计划
```bash
mysql> explain select id, ci_code, build_no, creator_code, sys_code, sys_name, pub_env,cluster_code, job_name, pub_param_key, pub_param_value, status, remark, creator, gmt_create, gmt_modify
from t_pub_publish
where sys_code = "aim" and pub_env = "qa" and cluster_code = 'cn-hd-idc-test-1' and status = 1;
+----+-------------+---------------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | t_pub_publish | ALL | NULL | NULL | NULL | NULL | 30544 | Using where |
+----+-------------+---------------+------+---------------+------+---------+------+-------+-------------+
1 row in set
```
## 加组合索引
```bash
ALTER TABLE `t_pub_publish`
ADD INDEX `idx_code` (`sys_code`, `pub_env`, `cluster_code`, `status`) ;
```
## 优化后执行计划
```bash
mysql> explain select id, ci_code, build_no, creator_code, sys_code, sys_name, pub_env,cluster_code, job_name, pub_param_key, pub_param_value, status, remark, creator, gmt_create, gmt_modify
from t_pub_publish
where sys_code = "aim" and pub_env = "qa" and cluster_code = 'cn-hd-idc-test-1' and status = 1;
+----+-------------+---------------+------+---------------+----------+---------+-------------------------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+------+---------------+----------+---------+-------------------------+------+-----------------------+
| 1 | SIMPLE | t_pub_publish | ref | idx_code | idx_code | 249 | const,const,const,const | 1 | Using index condition |
+----+-------------+---------------+------+---------------+----------+---------+-------------------------+------+-----------------------+
1 row in set
```
## 优化后耗时
```bash
[arthas@30]$ trace com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl checkPrePub
Press Q or Ctrl+C to abort.
Affect(class-cnt:2 , method-cnt:1) cost in 390 ms.
`---ts=2019-11-13 13:42:15;thread_name=http-nio-8266-exec-143;id=7934;is_daemon=true;priority=5;TCCL=org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedWebappClassLoader@6c902fd5
`---[203.648108ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:checkPrePub()
+---[min=4.7E-4ms,max=0.010168ms,total=0.010638ms,count=2] java.lang.Integer:() #157
+---[4.61E-4ms] java.lang.reflect.Method:invoke() #157
+---[0.003624ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:getClusterCode() #157
+---[0.001096ms] java.util.Map:get() #157
+---[0.002196ms] com.sunshanpeng.platform.pub.common.enums.PubStatusEnum:getCode() #161
+---[0.001674ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setStatus() #161
+---[0.578989ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:selectBySelective() #162
+---[6.84E-4ms] org.springframework.util.CollectionUtils:isEmpty() #163
+---[5.82E-4ms] com.sunshanpeng.platform.pub.common.enums.PubStatusEnum:getCode() #169
+---[5.45E-4ms] com.sunshanpeng.platform.pub.dto.publish.PublishDetailDTO:setStatus() #169
+---[0.407368ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:selectBySelective() #170
+---[5.59E-4ms] org.springframework.util.CollectionUtils:isEmpty() #171
`---[202.38997ms] com.sunshanpeng.platform.pub.service.impl.PublishServiceImpl:buildPublishDetailDTO() #178
```
**优化后SQL查询时间降到1ms不到,总耗时200ms,效果明显。**
一键复制
编辑
Web IDE
原始数据
按行查看
历史
java trace优化_使用Arthas trace定位并优化接口响应慢的问题.md相关推荐
- 【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略
本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处. 文章链接: https://zhuanlan.zhihu.com/p/32928016 这是一篇很特殊的文章.它将会是这个系列文章主线 ...
- 【转载】【《Real-Time Rendering 3rd》 提炼总结】(十二) 渲染管线优化方法论:从瓶颈定位到优化策略
本文由@浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处. 文章链接: https://zhuanlan.zhihu.com/p/32928016 这是一篇很特殊的文章.它将会是这个系列文章主线 ...
- tensorflow超参数优化_机器学习模型的超参数优化
引言 模型优化是机器学习算法实现中最困难的挑战之一.机器学习和深度学习理论的所有分支都致力于模型的优化. 机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数.超参数与一般 ...
- mysql sql优化_浅谈mysql中sql优化
说到sql优化,一般有几个步骤呢,在网上看到了一篇很不错的帖子.在这分享一下吧,也是自己学习的一个过程. 一.查找慢查询 1.1.查看SQL执行频率 SHOW STATUS LIKE 'Com_%'; ...
- url模糊匹配优化_企业必备的网站SEO优化解决方案
一.网站优化与调整倡议 一个好网站不只要满足阅读者,还要契合搜索引擎规则.满足搜索引擎快照抓取.赋予评级.提升关键词排序等.我们站在用户角度和搜索引擎规则根底上为您提供一套完好的SEO处理计划 SEO ...
- delete优化_深入理解JIT和编译优化
点击上方的蓝字关注我吧 程序那些事 简介 小师妹已经学完JVM的简单部分了,接下来要进入的是JVM中比较晦涩难懂的概念,这些概念是那么的枯燥乏味,甚至还有点惹人讨厌,但是要想深入理解JVM,这些概念是 ...
- win10 固态nvm优化_同步进行:NVM缓存优化指南
win10 固态nvm优化 阿里巴巴缓存技术团队的最佳实践,如何将非易失性内存(NVM)最佳地部署到生产环境 有效的数据存储对于任何计算任务都是必不可少的,但是当您运行一个为数十亿消费者服务的电子商务 ...
- mysql ssd优化_针对 SSD 的 MySQL IO 优化
现在数据库标配基本都是SSD了,在使用SSD之前,对SSD进行了充分的测试,这其中当然包括最为关键的性能测试部分.下面就跟大家分享一下在SSD性能测试过程中遇到的一个问题和解决问题的思路. 我们的性能 ...
- mysql 连接 优化_(一)MySQL 连接优化
1.查看连接参数(show variables) mysql> show variables like '%connect%'; +------------------------------- ...
最新文章
- [译] 在 iOS 上使用 Carthage 建立依赖
- iphone4/iphone5/iphone6/iphone6Plus响应式布局适配代码
- rpm批量卸载所有带有Java的文件
- Java中如何解决double和float精度不准的问题
- Package require os(darwin) not compatible with your platform(win32)
- String常用的方法总结
- POJ1789-Truck History .
- Linux usb bus日志如何打开,从linux usb bus节点来认识usb linux usb认识
- Linux入门学习(一)
- [bzoj4006][JLOI2015]管道连接_斯坦纳树_状压dp
- python能做什么游戏-Python有做大型游戏的潜力吗?
- html 自定义标签 ios,iOS标签 | 菜鸟教程
- attrib批量显示文件夹_CMD中使用attrib命令设置文件只读、隐藏属性详解
- 最短路径例题(Floyd、Dijkstra)
- 计算机二级2018VB题库百度云,2018年计算机二级VB考试真题
- Android font-awesome 4.2 icons png(包含holo-light和holo-dark)
- rxj热血江hsf湖私服_如何使用RxJ进行React性思考和动画化移动对象
- 本田及通用公司利用区块链技术探索智能电网与电动汽车的互操作性
- 古代五大美男的悲惨结局:潘安被灭三族
- HTML+CSS实现聚光灯效果
热门文章
- Android CoordinatorLayout使用
- EF中一对多的关系中,用单字段保存ID拼接字符串
- 交换一个整数二进制表示中的奇数位和偶数位
- TortoiseGit入门(图文教程) Git,Github,puttygen,SSH
- 向DataTable中添加自定义的行
- python 释放变量所指向的内存_通俗易懂的Python垃圾回收机制及内存管理
- 华为存储iscsi配置_iscsi 华为存储配置 上课内容
- 获取cookie_抢券第一课:三种方法获取Cookie
- 漫步者煲耳机软件_它是苹果AirPods的“真香替身”——漫步者lolliPods开箱体验...
- oracle12c 新特性,12c Oracle数据库新特性汇总