|
|
|
|
|
|
|
|
<!DOCTYPE html>
|
|
|
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
|
|
|
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
|
|
|
<head>
|
|
|
<meta charset="utf-8">
|
|
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
|
|
|
|
<title>trace — Arthas 3.1.0 documentation</title>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="shortcut icon" href="_static/favicon.ico"/>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<link rel="stylesheet" href="_static/css/theme.css" type="text/css" />
|
|
|
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
|
|
|
<link rel="stylesheet" href="_static/overrides.css" type="text/css" />
|
|
|
<link rel="index" title="Index" href="genindex.html" />
|
|
|
<link rel="search" title="Search" href="search.html" />
|
|
|
<link rel="next" title="stack" href="stack.html" />
|
|
|
<link rel="prev" title="Fundamental Fields in Expressions" href="advice-class.html" />
|
|
|
<script src="_static/center_page.js"></script>
|
|
|
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/styles/github.min.css">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script src="_static/js/modernizr.min.js"></script>
|
|
|
|
|
|
</head>
|
|
|
|
|
|
<body class="wy-body-for-nav">
|
|
|
|
|
|
|
|
|
<div class="wy-grid-for-nav">
|
|
|
|
|
|
|
|
|
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
|
|
|
<div class="wy-side-scroll">
|
|
|
<div class="wy-side-nav-search">
|
|
|
|
|
|
|
|
|
|
|
|
<a href="index.html" class="icon icon-home"> Arthas
|
|
|
|
|
|
|
|
|
|
|
|
</a>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div class="version">
|
|
|
3.1.0
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div role="search">
|
|
|
<form id="rtd-search-form" class="wy-form" action="search.html" method="get">
|
|
|
<input type="text" name="q" placeholder="Search docs" />
|
|
|
<input type="hidden" name="check_keywords" value="yes" />
|
|
|
<input type="hidden" name="area" value="default" />
|
|
|
</form>
|
|
|
</div>
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<ul class="current">
|
|
|
<li class="toctree-l1"><a class="reference external" href="https://alibaba.github.io/arthas/arthas-tutorials?language=en">Online tutorials(Recommend)</a></li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="install-detail.html">Installation</a></li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="quick-start.html">Quick start</a></li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="advanced-use.html">Advanced usage</a></li>
|
|
|
<li class="toctree-l1 current"><a class="reference internal" href="commands.html">Commands</a><ul class="current">
|
|
|
<li class="toctree-l2"><a class="reference internal" href="dashboard.html">dashboard</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="thread.html">thread</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="jvm.html">jvm</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="sysprop.html">sysprop</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="sysenv.html">sysenv</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="getstatic.html">getstatic</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="ognl.html">ognl</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="sc.html">sc</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="sm.html">sm</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="dump.html">dump</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="jad.html">jad</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="classloader.html">classloader</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="mc.html">mc</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="redefine.html">redefine</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="monitor.html">monitor</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="watch.html">watch</a></li>
|
|
|
<li class="toctree-l2 current"><a class="current reference internal" href="#">trace</a><ul>
|
|
|
<li class="toctree-l3"><a class="reference internal" href="#parameters">Parameters</a></li>
|
|
|
<li class="toctree-l3"><a class="reference internal" href="#notice">Notice</a></li>
|
|
|
<li class="toctree-l3"><a class="reference internal" href="#usage">Usage</a><ul>
|
|
|
<li class="toctree-l4"><a class="reference internal" href="#start-demo">Start Demo</a></li>
|
|
|
<li class="toctree-l4"><a class="reference internal" href="#trace-method">trace method</a></li>
|
|
|
<li class="toctree-l4"><a class="reference internal" href="#ignore-jdk-method">Ignore jdk method</a></li>
|
|
|
<li class="toctree-l4"><a class="reference internal" href="#filtering-by-cost">Filtering by cost</a></li>
|
|
|
<li class="toctree-l4"><a class="reference internal" href="#trace-multiple-classes-or-multiple-methods">trace multiple classes or multiple methods</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="stack.html">stack</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="tt.html">tt</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="cat.html">cat</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="pwd.html">pwd</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="options.html">options</a></li>
|
|
|
<li class="toctree-l2"><a class="reference internal" href="commands.html#basic-arthas-commands">Basic Arthas Commands</a></li>
|
|
|
</ul>
|
|
|
</li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="docker.html">Docker</a></li>
|
|
|
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas/issues?q=label%3Auser-case">User cases</a></li>
|
|
|
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas/issues?q=label%3Aquestion-answered">Questions and answers</a></li>
|
|
|
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas">Fork me at GitHub</a></li>
|
|
|
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md">CONTRIBUTING</a></li>
|
|
|
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">Release Notes</a></li>
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
</div>
|
|
|
</nav>
|
|
|
|
|
|
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
|
|
|
|
|
|
|
|
|
<nav class="wy-nav-top" aria-label="top navigation">
|
|
|
|
|
|
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
|
|
|
<a href="index.html">Arthas</a>
|
|
|
|
|
|
</nav>
|
|
|
|
|
|
|
|
|
<div class="wy-nav-content">
|
|
|
|
|
|
<div class="rst-content">
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<div role="navigation" aria-label="breadcrumbs navigation">
|
|
|
|
|
|
<ul class="wy-breadcrumbs">
|
|
|
|
|
|
<li><a href="index.html">Docs</a> »</li>
|
|
|
|
|
|
<li><a href="commands.html">All Commands</a> »</li>
|
|
|
|
|
|
<li>trace</li>
|
|
|
|
|
|
|
|
|
<li class="wy-breadcrumbs-aside">
|
|
|
|
|
|
|
|
|
|
|
|
<a href="https://github.com/alibaba/arthas/blob/master/site/src/site/sphinx/en/trace.md" class="fa fa-github"> Edit on GitHub</a>
|
|
|
|
|
|
|
|
|
|
|
|
</li>
|
|
|
|
|
|
</ul>
|
|
|
|
|
|
|
|
|
<hr/>
|
|
|
</div>
|
|
|
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
|
|
|
<div itemprop="articleBody">
|
|
|
|
|
|
<div class="section" id="trace">
|
|
|
<span id="trace"></span><h1>trace<a class="headerlink" href="#trace" title="Permalink to this headline">¶</a></h1>
|
|
|
<blockquote>
|
|
|
<div>Trace method calling path, and output the time cost for each node in the path.</div></blockquote>
|
|
|
<p><tt class="docutils literal">trace</tt> can track the calling path specified by <tt class="docutils literal">class-pattern</tt> / <tt class="docutils literal">method-pattern</tt>, and calculate the time cost on the whole path.</p>
|
|
|
<div class="section" id="parameters">
|
|
|
<span id="parameters"></span><h2>Parameters<a class="headerlink" href="#parameters" title="Permalink to this headline">¶</a></h2>
|
|
|
<table border="1" class="docutils">
|
|
|
<thead>
|
|
|
<tr>
|
|
|
<th align="right">Name</th>
|
|
|
<th align="left">Specification</th>
|
|
|
</tr>
|
|
|
</thead>
|
|
|
<tbody>
|
|
|
<tr>
|
|
|
<td align="right"><em>class-pattern</em></td>
|
|
|
<td align="left">pattern for the class name</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td align="right"><em>method-pattern</em></td>
|
|
|
<td align="left">pattern for the method name</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td align="right"><em>condition-express</em></td>
|
|
|
<td align="left">condition expression</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td align="right"><code>[E]</code></td>
|
|
|
<td align="left">enable regex match, the default behavior is wildcards match</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td align="right"><code>[n:]</code></td>
|
|
|
<td align="left">execution times</td>
|
|
|
</tr>
|
|
|
<tr>
|
|
|
<td align="right">#cost</td>
|
|
|
<td align="left">time cost</td>
|
|
|
</tr>
|
|
|
</tbody>
|
|
|
</table><p>There’s one thing worthy noting here is observation expression. The observation expression supports OGNL grammar, for example, you can come up a expression like this <tt class="docutils literal">"{params,returnObj}"</tt>. All OGNL expressions are supported as long as they are legal to the grammar.</p>
|
|
|
<p>Thanks for <tt class="docutils literal">advice</tt>’s data structure, it is possible to observe from varieties of different angles. Inside <tt class="docutils literal">advice</tt> parameter, all necessary information for notification can be found.</p>
|
|
|
<p>Pls. refer to <a class="reference internal" href="advice-class.html"><span class="doc">core parameters in expression</span></a> for more details.</p>
|
|
|
<ul class="simple">
|
|
|
<li>Pls. also refer to <a class="reference external" href="https://github.com/alibaba/arthas/issues/71">https://github.com/alibaba/arthas/issues/71</a> for more advanced usage</li>
|
|
|
<li>OGNL official site: <a class="reference external" href="https://commons.apache.org/proper/commons-ognl/language-guide.html">https://commons.apache.org/proper/commons-ognl/language-guide.html</a></li>
|
|
|
</ul>
|
|
|
<p>Many times what we are interested is the exact trace result when the method call takes time over one particular period. It is possible to achieve this in Arthas, for example: <tt class="docutils literal">trace *StringUtils isBlank '#cost>100'</tt> means trace result will only be output when the executing time exceeds 100ms.</p>
|
|
|
<blockquote>
|
|
|
<div><tt class="docutils literal">watch</tt>/<tt class="docutils literal">stack</tt>/<tt class="docutils literal">trace</tt>, these three commands all support <tt class="docutils literal">#cost</tt>.</div></blockquote>
|
|
|
</div>
|
|
|
<div class="section" id="notice">
|
|
|
<span id="notice"></span><h2>Notice<a class="headerlink" href="#notice" title="Permalink to this headline">¶</a></h2>
|
|
|
<p><tt class="docutils literal">trace</tt> is handy to help discovering and locating the performance flaws in your system, but pls. note Arthas can only trace the first level method call each time.</p>
|
|
|
</div>
|
|
|
<div class="section" id="usage">
|
|
|
<span id="usage"></span><h2>Usage<a class="headerlink" href="#usage" title="Permalink to this headline">¶</a></h2>
|
|
|
<div class="section" id="start-demo">
|
|
|
<span id="start-demo"></span><h3>Start Demo<a class="headerlink" href="#start-demo" title="Permalink to this headline">¶</a></h3>
|
|
|
<p>Start <tt class="docutils literal">arthas-demo</tt> in <a class="reference internal" href="quick-start.html"><span class="doc">Quick Start</span></a>.</p>
|
|
|
</div>
|
|
|
<div class="section" id="trace-method">
|
|
|
<span id="trace-method"></span><h3>trace method<a class="headerlink" href="#trace-method" title="Permalink to this headline">¶</a></h3>
|
|
|
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ trace demo.MathGame run
|
|
|
Press Ctrl+C to abort.
|
|
|
Affect(class-cnt:1 , method-cnt:1) cost in 42 ms.
|
|
|
`---ts=2018-12-04 00:44:17;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
|
|
|
`---[10.611029ms] demo.MathGame:run()
|
|
|
+---[0.05638ms] java.util.Random:nextInt()
|
|
|
+---[10.036885ms] demo.MathGame:primeFactors()
|
|
|
`---[0.170316ms] demo.MathGame:print()
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
<div class="section" id="ignore-jdk-method">
|
|
|
<span id="ignore-jdk-method"></span><h3>Ignore jdk method<a class="headerlink" href="#ignore-jdk-method" title="Permalink to this headline">¶</a></h3>
|
|
|
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ trace -j demo.MathGame run
|
|
|
Press Ctrl+C to abort.
|
|
|
Affect(class-cnt:1 , method-cnt:1) cost in 31 ms.
|
|
|
`---ts=2018-12-04 01:09:14;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
|
|
|
`---[5.190646ms] demo.MathGame:run()
|
|
|
+---[4.465779ms] demo.MathGame:primeFactors()
|
|
|
`---[0.375324ms] demo.MathGame:print()
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
<ul class="simple">
|
|
|
<li><tt class="docutils literal">-j</tt>: jdkMethodSkip, skip jdk method trace</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
<div class="section" id="filtering-by-cost">
|
|
|
<span id="filtering-by-cost"></span><h3>Filtering by cost<a class="headerlink" href="#filtering-by-cost" title="Permalink to this headline">¶</a></h3>
|
|
|
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ trace demo.MathGame run '#cost > 10'
|
|
|
Press Ctrl+C to abort.
|
|
|
Affect(class-cnt:1 , method-cnt:1) cost in 41 ms.
|
|
|
`---ts=2018-12-04 01:12:02;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69
|
|
|
`---[12.033735ms] demo.MathGame:run()
|
|
|
+---[0.006783ms] java.util.Random:nextInt()
|
|
|
+---[11.852594ms] demo.MathGame:primeFactors()
|
|
|
`---[0.05447ms] demo.MathGame:print()
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
<blockquote>
|
|
|
<div>Only the call path which’s time cost is higher than <tt class="docutils literal">10ms</tt> will be shown. This feature is handy to focus on what’s needed to focus when troubleshoot.</div></blockquote>
|
|
|
<ul class="simple">
|
|
|
<li>Here Arthas provides the similar functionality JProfile and other commercial software provide. Compared to these professional softwares, Arthas doesn’t deduce the time cost <tt class="docutils literal">trace</tt> itself takes, therefore it is not as accurate as these softwares offer. More classes and methods on the calling path, more inaccurate <tt class="docutils literal">trace</tt> output is, but it is still helpful for diagnostics where the bottleneck is.</li>
|
|
|
<li>“[12.033735ms]” means the method on the node takes <tt class="docutils literal">12.033735</tt> ms.</li>
|
|
|
<li>“[min=0.005428ms,max=0.094064ms,total=0.105228ms,count=3] demo:call()” means aggregating all same method calls into one single line. The minimum time cost is <tt class="docutils literal">0.005428</tt> ms, the maximum time cost is <tt class="docutils literal">0.094064</tt> ms, and the total time cost for all method calls (<tt class="docutils literal">3</tt> times in total) to “demo:call()” is <tt class="docutils literal">0.105228ms</tt>. If “throws Exception” appears in this line, it means some exceptions have been thrown from this method calls.</li>
|
|
|
<li>The total time cost may not equal to the sum of the time costs each sub method call takes, this is because Arthas instrumented code takes time too.</li>
|
|
|
</ul>
|
|
|
</div>
|
|
|
<div class="section" id="trace-multiple-classes-or-multiple-methods">
|
|
|
<span id="trace-multiple-classes-or-multiple-methods"></span><h3>trace multiple classes or multiple methods<a class="headerlink" href="#trace-multiple-classes-or-multiple-methods" title="Permalink to this headline">¶</a></h3>
|
|
|
<p>The trace command will only trace the subcalls in the method to the trace, and will not trace down multiple layers. Because traces are expensive, multi-layer traces can lead to a lot of classes and methods that ultimately have to be traced.</p>
|
|
|
<p>You can use the regular expression to match multiple classes and methods on the path to achieve a multi-layer trace effect to some extent.</p>
|
|
|
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">Trace -E com.test.ClassA|org.test.ClassB method1|method2|method3
|
|
|
</pre></div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
|
</div>
|
|
|
<footer>
|
|
|
|
|
|
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
|
|
|
|
|
|
<a href="stack.html" class="btn btn-neutral float-right" title="stack" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
|
|
|
|
|
|
|
|
|
<a href="advice-class.html" class="btn btn-neutral" title="Fundamental Fields in Expressions" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
<hr/>
|
|
|
|
|
|
<div role="contentinfo">
|
|
|
<p>
|
|
|
© Copyright 2018-2019, Alibaba Middleware Group, and contributors.
|
|
|
|
|
|
</p>
|
|
|
</div>
|
|
|
Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
|
|
|
|
|
|
</footer>
|
|
|
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
</section>
|
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
var DOCUMENTATION_OPTIONS = {
|
|
|
URL_ROOT:'./',
|
|
|
VERSION:'3.1.0',
|
|
|
LANGUAGE:'en',
|
|
|
COLLAPSE_INDEX:false,
|
|
|
FILE_SUFFIX:'.html',
|
|
|
HAS_SOURCE: true,
|
|
|
SOURCELINK_SUFFIX: '.txt'
|
|
|
};
|
|
|
</script>
|
|
|
<script type="text/javascript" src="_static/jquery.js"></script>
|
|
|
<script type="text/javascript" src="_static/underscore.js"></script>
|
|
|
<script type="text/javascript" src="_static/doctools.js"></script>
|
|
|
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
|
|
|
|
|
|
|
|
|
|
|
|
<script type="text/javascript" src="_static/js/theme.js"></script>
|
|
|
|
|
|
<script type="text/javascript">
|
|
|
jQuery(function () {
|
|
|
SphinxRtdTheme.Navigation.enable(true);
|
|
|
});
|
|
|
</script>
|
|
|
<div class="github-fork-ribbon-wrapper right">
|
|
|
<div class="github-fork-ribbon">
|
|
|
<a href="https://github.com/alibaba/arthas" target="_blank">Fork me at GitHub</a>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<script type="text/javascript" src="_static/add_badges.js"></script>
|
|
|
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.13.1/highlight.min.js"></script>
|
|
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlightjs-line-numbers.js/2.5.0/highlightjs-line-numbers.min.js"></script>
|
|
|
<script>
|
|
|
document.querySelectorAll('div.hljs > pre').forEach(function(block) {
|
|
|
hljs.highlightBlock(block);
|
|
|
hljs.lineNumbersBlock(block);
|
|
|
});
|
|
|
</script>
|
|
|
|
|
|
<script>
|
|
|
var _hmt = _hmt || [];
|
|
|
(function() {
|
|
|
var hm = document.createElement("script");
|
|
|
hm.src = "https://hm.baidu.com/hm.js?d5c5e25b100f0eb51a4c35c8a86ea9b4";
|
|
|
var s = document.getElementsByTagName("script")[0];
|
|
|
s.parentNode.insertBefore(hm, s);
|
|
|
})();
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
|
|
</body>
|
|
|
</html> |