我改的代码为什么没有执行到?难道是我没 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
推荐阅读
-
「南京市第二医院」腰骶部疼痛数月,我院骨科显微镜下捉“元凶”
-
养生食疗保健|可能是这几个“好习惯”!,摧毁你健康的
-
自称核酸阳性顾客转运至发热门诊 石景山万达恢复营业
-
贾康:要让房地产形成“保障轨”与“市场轨”的双轨统筹
-
癌症患者:大夫,我就想知道晚期癌症还有必要治吗?没治我就回家
-
-
晴天小运势|好运围绕,喜事缠身,财旺福旺运气旺的3生肖,6月上旬
-
-
新华社|新华社调查多地高温津贴:有的被克扣,有的标准十几年不变
-
银行|结构性存款预期利率达4.3%,与普通存款有什么区别、值得购买吗?
-
金融|信贷、上市、发债多渠道共发力 金融多管齐下支持市场主体
-
-
-
60岁何赛飞带火了一种新穿法:“新中式风+高马尾”,时髦高级又优雅
-
三分钟军事速递|专家:扭转乾坤,波罗的海警报声响起!俄战轰迎面对抗北约战机
-
做成|艺术家何云昌取出一根肋骨做成项链,给自己最爱的5个女人戴上
-
-
院线周刊@能做到你也会瘦成闪电,谢安然从150斤瘦到90斤大方分享减肥方法
-
-
体坛叨逼叨|快船130-122独行侠,苏群曝内情,乔治遭炮轰,谁注意伦纳德举动