我改的代码为什么没有执行到?难道是我没 commit?分支搞错了? 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗? 线上遇到某个用户的数据处理有问题 , 但线上同样无法 debug,线下无法重现! 是否有一个全局视角来查看系统的运行状况? 有什么办法可以监控到JVM的实时运行状态?上面是Arthas的官方简介,这次我只需要用他的一个小功能trace 。动态计算方法调用路径和时间,这样我就可以定位时间在哪个地方被消耗了 。
- trace 方法内部调用路径,并输出方法路径上的每个节点上耗时
- trace 命令能主动搜索 class-pattern/method-pattern
- 对应的方法调用路径 , 渲染和统计整个调用链路上的所有性能开销和追踪调用链路 。
有了神器,那么该追踪什么方法呢?由于我对Tomcat源码不是很熟,所以只能从spring mvc下手,先来trace一下spring mvc的入口:
[arthas@24851]$ trace org.springframework.web.servlet.DispatcherServlet *Press Q or Ctrl+C to abort.Affect(class-cnt:1 , method-cnt:44) cost in 508 ms.`---ts=2019-09-14 21:07:44;thread_name=http-nio-7744-exec-2;id=11;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@7c136917`---[2.952142ms] org.springframework.web.servlet.DispatcherServlet:buildLocaleContext()`---ts=2019-09-14 21:07:44;thread_name=http-nio-7744-exec-2;id=11;is_daemon=true;priority=5;TCCL=org.springframework.boot.web.embedded.tomcat.TomcatEmbeddedWebappClassLoader@7c136917`---[18.08903ms] org.springframework.web.servlet.DispatcherServlet:doService()+---[0.041346ms] org.Apache.commons.logging.Log:isDebugEnabled() #889+---[0.022398ms] org.springframework.web.util.WebUtils:isIncludeRequest() #898+---[0.014904ms] org.springframework.web.servlet.DispatcherServlet:getWebApplicationContext() #910+---[1.071879ms] javax.servlet.http.HttpServletRequest:setAttribute() #910+---[0.020977ms] javax.servlet.http.HttpServletRequest:setAttribute() #911+---[0.017073ms] javax.servlet.http.HttpServletRequest:setAttribute() #912+---[0.218277ms] org.springframework.web.servlet.DispatcherServlet:getThemeSource() #913|`---[0.137568ms] org.springframework.web.servlet.DispatcherServlet:getThemeSource()|`---[min=0.00783ms,max=0.014251ms,total=0.022081ms,count=2] org.springframework.web.servlet.DispatcherServlet:getWebApplicationContext() #782+---[0.019363ms] javax.servlet.http.HttpServletRequest:setAttribute() #913+---[0.070694ms] org.springframework.web.servlet.FlashMapManager:retrieveAndUpdate() #916+---[0.01839ms] org.springframework.web.servlet.FlashMap:<init>() #920+---[0.016943ms] javax.servlet.http.HttpServletRequest:setAttribute() #920+---[0.015268ms] javax.servlet.http.HttpServletRequest:setAttribute() #921+---[15.050124ms] org.springframework.web.servlet.DispatcherServlet:doDispatch() #925|`---[14.943477ms] org.springframework.web.servlet.DispatcherServlet:doDispatch()|+---[0.019135ms] org.springframework.web.context.request.async.WebAsyncUtils:getAsyncManager() #953|+---[2.108373ms] org.springframework.web.servlet.DispatcherServlet:checkMultipart() #960||`---[2.004436ms] org.springframework.web.servlet.DispatcherServlet:checkMultipart()||`---[1.890845ms] org.springframework.web.multipart.MultipartResolver:isMultipart() #1117|+---[2.054361ms] org.springframework.web.servlet.DispatcherServlet:getHandler() #964||`---[1.961963ms] org.springframework.web.servlet.DispatcherServlet:getHandler()||+---[0.02051ms] java.util.List:iterator() #1183||+---[min=0.003805ms,max=0.009641ms,total=0.013446ms,count=2] java.util.Iterator:hasNext() #1183||+---[min=0.003181ms,max=0.009751ms,total=0.012932ms,count=2] java.util.Iterator:next() #1183||+---[min=0.005841ms,max=0.015308ms,total=0.021149ms,count=2] org.apache.commons.logging.Log:isTraceEnabled() #1184||`---[min=0.474739ms,max=1.19145ms,total=1.666189ms,count=2] org.springframework.web.servlet.HandlerMapping:getHandler() #1188|+---[0.013071ms] org.springframework.web.servlet.HandlerExecutionChAIn:getHandler() #971|+---[0.372236ms] org.springframework.web.servlet.DispatcherServlet:getHandlerAdapter() #971||`---[0.280073ms] org.springframework.web.servlet.DispatcherServlet:getHandlerAdapter()||+---[0.004804ms] java.util.List:iterator() #1224||+---[0.003668ms] java.util.Iterator:hasNext() #1224||+---[0.003038ms] java.util.Iterator:next() #1224||+---[0.006451ms] org.apache.commons.logging.Log:isTraceEnabled() #1225||`---[0.012683ms] org.springframework.web.servlet.HandlerAdapter:supports() #1228|+---[0.012848ms] javax.servlet.http.HttpServletRequest:getMethod() #974|+---[0.013132ms] java.lang.String:equals() #975|+---[0.003025ms] org.springframework.web.servlet.HandlerExecutionChain:getHandler() #977|+---[0.008095ms] org.springframework.web.servlet.HandlerAdapter:getLastModified() #977|+---[0.006596ms] org.apache.commons.logging.Log:isDebugEnabled() #978|+---[0.018024ms] org.springframework.web.context.request.ServletWebRequest:<init>() #981|+---[0.017869ms] org.springframework.web.context.request.ServletWebRequest:checkNotModified() #981|+---[0.038542ms] org.springframework.web.servlet.HandlerExecutionChain:applyPreHandle() #986|+---[0.00431ms] org.springframework.web.servlet.HandlerExecutionChain:getHandler() #991|+---[4.248493ms] org.springframework.web.servlet.HandlerAdapter:handle() #991|+---[0.014805ms] org.springframework.web.context.request.async.WebAsyncManager:isConcurrentHandlingStarted() #993|+---[1.444994ms] org.springframework.web.servlet.DispatcherServlet:applyDefaultViewName() #997||`---[0.067631ms] org.springframework.web.servlet.DispatcherServlet:applyDefaultViewName()|+---[0.012027ms] org.springframework.web.servlet.HandlerExecutionChain:applyPostHandle() #998|+---[0.373997ms] org.springframework.web.servlet.DispatcherServlet:processDispatchResult() #1008||`---[0.197004ms] org.springframework.web.servlet.DispatcherServlet:processDispatchResult()||+---[0.007074ms] org.apache.commons.logging.Log:isDebugEnabled() #1075||+---[0.005467ms] org.springframework.web.context.request.async.WebAsyncUtils:getAsyncManager() #1081||+---[0.004054ms] org.springframework.web.context.request.async.WebAsyncManager:isConcurrentHandlingStarted() #1081||`---[0.011988ms] org.springframework.web.servlet.HandlerExecutionChain:triggerAfterCompletion() #1087|`---[0.004015ms] org.springframework.web.context.request.async.WebAsyncManager:isConcurrentHandlingStarted() #1018+---[0.005055ms] org.springframework.web.context.request.async.WebAsyncUtils:getAsyncManager() #928`---[0.003422ms] org.springframework.web.context.request.async.WebAsyncManager:isConcurrentHandlingStarted() #928
推荐阅读
-
《金锁记》中曹七巧的性格成因,金锁记赏析曹七巧的性格特点-
-
-
时尚达人穿的羊绒大衣咋那么好看? 在隆庆祥买这几款准没错
-
中国新闻网|法国宣布抗疫新措施:马赛将关闭餐馆酒吧 巴黎限制聚会人数
-
『AI财经社』诺基亚的5G困局:投入巨大利润微薄,与华为爱立信竞争处于下风
-
路人战队|华为:既是中华民族的骄傲,也是中国模式的牺牲品
-
-
-
#非典#广州银河革命公墓启动集中祭扫,首批祭扫“抗非”烈士
-
小逗搞笑爆笑GIF趣图:阿姨不敲门就突然进来了,真是大写的尴尬,
-
-
淘宝开店要交多少费用吗 开淘宝店需要交什么费用吗?
-
麒麟9000|我们冤枉了苹果,台积电工艺“翻车”,华为麒麟9000问题出现
-
印尼苏拉威西岛附近发生6.9级左右地震,或会引发海啸
-
天天读报会|吃不完就被老师摔凳子威胁,谁给幼儿园权力?,20分钟必须吃完饭
-
预亏|半年预亏超4000万!奥飞娱乐频扩张,四驱车陀螺玩不转了?
-
『腾讯QQ』80后的你,为什么还在每天登录QQ,即使没人聊天?
-
快手■一加科技联合创始人裴宇离职;欧盟延长谷歌Fitbit交易调查期限;马云:要用做CEO的方式做校
-
【车与生活】如何正确对爱车进行日常消杀保洁,建议收藏!,新冠疫情期间
-
「小悦爱搞笑」新郎跟我们分享与老po认识的过程,开心笑话:在亲戚的喜宴上