我改的代码为什么没有执行到?难道是我没 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
推荐阅读
-
-
「掌阅科技」数字阅读市场陷入两强之争,掌阅能不能守住半壁江山? 月活跃用户过亿,掌阅科技推青少年阅读产品“掌阅课外书”
-
JR史密斯|警告JR别以为稳了,关系铁也不如韦德!若不上进恐以后都别想混了
-
-
果味仙女|结局太美好,还记得13年前的这部剧吗?林峯胡定欣都还只是配角
-
-
-
探测器|国庆假期刚过,2900万公里外传来一个好消息,美:为何才公开?
-
-
-
-
[乌克兰]谁是乌克兰最有前途的伙伴?美国被抛之脑后,中国上榜令人欣慰
-
-
『地下城与勇士』DNF:100级武器排名出炉,T0位置属性最强,鬼剑士天帝剑上榜
-
-
『上线』江苏“五一”定制出行“上线”:开行定制客运线路176条
-
经历的青春喊话越南敢越线就开火,这次不是菲律宾,南海头号对手已经出现
-
【数字世界】40首发!,秒杀高通865?麒麟1020即将量产,华为Mate
-
网罗说科技 120Hz+双模5G+骁龙865+44W,128GB降价300元,顶级vivo冲销量
-