@ -54,7 +54,7 @@ Arthas provides `pipe` to process the result returned from commands further, e.g
## async in background
[async](async.md) can be handy when a problem is hardly to reproduce in the production enviornment, e.g. one `watch` condition may happen only once in one single day.
[async](async.md) can be handy when a problem is hardly to reproduce in the production environment, e.g. one `watch` condition may happen only once in one single day.
* job control - use `>` to redirect result into the log file, use `&` to put the job to the background. Job keeps running even if the session is disconnected (the session lifecycle is 1 day by default)
There is a very fundamental class `Advice` for the expressions used in filtering, tracing or monitoring and other aspects in commands.
@ -16,29 +16,29 @@ public class Advice {
private final boolean isBefore;
private final boolean isThrow;
private final boolean isReturn;
...
// getter/setter
}
```
Description for the variables in the class `Advice`:
|Name|Specification|
|---:|:---|
|loader|class loader of the class|
|clazz|the reference of the class|
|method|the reflective reference of the method|
|target|the instance of the class|
|params|the parameters of the method, which is an array (when there is no argument in the method, it will be an empty array)|
|returnObj|the return value of the method - only when `isReturn==true`, it's a valid result but if the return value is `void` then it will be a `null`|
|throwExp|the exceptions thrown by the method invoking - only when `isThrow==true`, it's a valid thrown exception|
|isBefore|assistant checking flag used in [`before-watching` point](watch.md) and at this very moment: `isBefore==true`, `isThrow==false` and `isReturn==false` since it's before we invoke the method|
|isThrow|assistant checking flag: whether the current method invoking ends with exceptions|
|isReturn|assistant checking flag: whether the method invoking exits normally without exceptions|
F.Y.I
1. all the *fields* mentioned in the table above can be used directly in the `expressions`;
2. if the expressions are [invalid OGNL](https://en.wikipedia.org/wiki/OGNL), the command will be cancelled automatically with hints to correct the expressions;
3. [typical use cases](https://github.com/alibaba/arthas/issues/71);
4. [OGNL official usage guide](https://commons.apache.org/proper/commons-ognl/language-guide.html).
|loader|the class loader for the current called class|
|clazz|the reference to the current called class|
|method|the reference to the current called method|
|target|the instance of the current called class|
|params|the parameters for the current call, which is an array (when there's no parameter, it will be an empty array)|
|returnObj|the return value from the current call - only available when the method call returns normally (`isReturn==true`), and `null` is for `void` return value|
|throwExp|the exceptions thrown from the current call - only available when the method call throws exception (`isThrow==true`)|
|isBefore|flag to indicate the method is about to execute. `isBefore==true` but `isThrow==false` and `isReturn==false` since it's no way to know how the method call will end|
|isThrow|flag to indicate the method call ends with exception thrown|
|isReturn|flag to indicate the method call ends normally without exception thrown|
All variables listed above can be used directly in the [OGNL expression](https://commons.apache.org/proper/commons-ognl/language-guide.html). The command will not execute and exit if there's illegal OGNL grammar or unexpected variable in the expression.
* [typical use cases](https://github.com/alibaba/arthas/issues/71);
* [OGNL language guide](https://commons.apache.org/proper/commons-ognl/language-guide.html).
You can see that there is currently a background job executing.
You can see that there is currently a background job executing:
* job id is 10, `*` indicates that this job is created by the current session.
* status is `Stopped`
* execution count is the number of executions, which have been executed 19 times since the start.
* timeout date: After this time, the job will automatically timeout and exit.
* timeout date: timeout timestamp, when the time exceeds this timestamp, the job will be automatically timeout and exit.
## 3. Suspend and Cannel job
## 3. Suspend and cancel job
When the job is executing in the foreground, such as directly calling the command `trace Test t` or calling the background job command `trace Test t &`, the job is transferred to the foreground through the `fg` command. At this point, the console cannot continue to execute the command, but can receive and process the following keyboard events:
When the job is executing in the foreground, for example, directly executing the command `trace Test t`, or executing the background job command `trace Test t &`, then putting the job back to the forground via `fg` command, the console cannot continue to execute other command, but can receive and process the following keyboard events:
* ‘ctrl + z’: Suspend the job, the job status will change to `Stopped`, and the job can be restarted by `bg <job-id>` or `fg <job-id>`
* ‘ctrl + c’: Stop the job
* ‘ctrl + d’: According to linux semantics should be the exit terminal, currently arthas ignore this input.
* ‘ctrl + d’: According to linux semantics this should lead to exit the terminal, right now Arthas has not implemented this yet, therefore simply ignore this keystroke.
## 4. fg/bg, Bring a background job to the foreground/Restart a stopped background job
## 4. fg/bg, switch the job from the foreground to the background, and vise verse
* When the job is executed in the background or suspended (`ctrl + z` to suspend job), executing `fg <job-id>` will transfer the corresponding job to the foreground to continue execution.
* When the job is suspended (`ctrl + z` to suspend job), executing `bg <job-id>` will continue the corresponding job in the background.
* A job created by a non-current session can only be executed by the current session fg to the foreground.
* When a job is executed in the background or in suspended status (use `ctrl + z` to suspend job), `fg <job-id>` can transfer the job to the foreground to continue to run.
* When a job is in suspended status (use `ctrl + z` to suspend job), `bg <job-id>` can put the job to the background to continue to run.
* A job created by other session can only be put to the foreground to run by using `fg` in the current session.
## 5. Redirect the job output
## 5. Redirect the output
The job output can be redirect to the specified file by `>` or `>>`, and can be used together with `&` to implement the asynchronous job of the arthas command. such as:
The job output can be redirect to the specified file by `>` or `>>`, and can be used together with `&`. By doing this, you can achieve running commands asynchronously, for example:
```bash
$ trace Test t >> test.out &
```
The trace command will be executed in the background and the output will be redirect to `~/logs/arthas-cache/test.out`. You can continue to execute other commands in the console.
The trace command will be running in the background and the output will be redirect to `~/logs/arthas-cache/test.out`. You can continue to execute other commands in the console, at the same time, you can also examine the execution result from the output file.
When connecting to a remote arthas server, you may not be able to view the files of the remote machine. Arthas also supports automatic redirection to the local cache file. Examples are as follows:
When connect to a remote Arthas server, you may not be able to view the output file on the remote machine. In this case, Arthas also supports automatically redirecting the output to the local cache file. Examples are as follows:
You can see that does not specify the redirect file after `>>`, arthas will automatically redirect the job output to the `~/logs/arthas-cache`.
In the above example, pid is `28198` and job id is `2`.
If output path is not given, Arthas will automatically redirect the output to the local cache. Job id and cache location will be shown on the console. Cache location is a directory where the output files are put. For one given job, the path of its output file contains PID and job id in order to avoid potential conflict with other jobs. In the above example, pid is `28198` and job id is `2`.
## 6. Stop job
@ -79,5 +76,5 @@ If you want to stop background job, just `kill <job-id>`.
## 7. Others
* Support up to 8 commands at the same time redirect the output to the log file.
* Do not open too many background asynchronous commands at the same time to avoid affecting the performance of the target JVM.
* Support up to 8 commands at the same time to redirect the output to the log files.
* Do not open too many background jobs at the same time to avoid negative performance effect to the target JVM.
If the downloading is rather clumsy, try to download from the [repository in AliYun](https://maven.aliyun.com/); the downloading URL template is (remember to fill up the version `3.x.x` template to your needs)
If the download is slow, try to download from the [repository in AliYun](https://maven.aliyun.com/); the downloading URL template is (remember to fill up the version `3.x.x` template to your needs)
<spanid="async-in-background"></span><h2>async in background<aclass="headerlink"href="#async-in-background"title="Permalink to this headline">¶</a></h2>
<p><aclass="reference internal"href="async.html"><spanclass="doc">async</span></a> can be handy when a problem is hardly to reproduce in the production enviornment, e.g. one <codeclass="docutils literal notranslate"><spanclass="pre">watch</span></code> condition may happen only once in one single day.</p>
<p><aclass="reference internal"href="async.html"><spanclass="doc">async</span></a> can be handy when a problem is hardly to reproduce in the production environment, e.g. one <codeclass="docutils literal notranslate"><spanclass="pre">watch</span></code> condition may happen only once in one single day.</p>
<ulclass="simple">
<li>job control - use <codeclass="docutils literal notranslate"><spanclass="pre">></span></code> to redirect result into the log file, use <codeclass="docutils literal notranslate"><spanclass="pre">&</span></code> to put the job to the background. Job keeps running even if the session is disconnected (the session lifecycle is 1 day by default)</li>
<spanid="critical-fields-in-expressions"></span><h1>Critical Fields in Expressions<aclass="headerlink"href="#critical-fields-in-expressions" title="Permalink to this headline">¶</a></h1>
<spanid="fundamental-fields-in-expressions"></span><h1>Fundamental Fields in Expressions<aclass="headerlink"href="#fundamental-fields-in-expressions" title="Permalink to this headline">¶</a></h1>
<p>There is a very fundamental class <codeclass="docutils literal notranslate"><spanclass="pre">Advice</span></code> for the expressions used in filtering, tracing or monitoring and other aspects in commands.</p>
<p>Description for the variables in the class <codeclass="docutils literal notranslate"><spanclass="pre">Advice</span></code>:</p>
<tableborder="1"class="docutils">
<thead>
<tr>
@ -227,52 +228,50 @@
<tbody>
<tr>
<tdalign="right">loader</td>
<tdalign="left">class loader of the class</td>
<tdalign="left">the class loader for the current called class</td>
</tr>
<tr>
<tdalign="right">clazz</td>
<tdalign="left">the reference of the class</td>
<tdalign="left">the reference to the current called class</td>
</tr>
<tr>
<tdalign="right">method</td>
<tdalign="left">the reflective reference of the method</td>
<tdalign="left">the reference to the current called method</td>
</tr>
<tr>
<tdalign="right">target</td>
<tdalign="left">the instance of the class</td>
<tdalign="left">the instance of the current called class</td>
</tr>
<tr>
<tdalign="right">params</td>
<tdalign="left">the parameters of the method, which is an array (when there is no argument in the method, it will be an empty array)</td>
<tdalign="left">the parameters for the current call, which is an array (when there's no parameter, it will be an empty array)</td>
</tr>
<tr>
<tdalign="right">returnObj</td>
<tdalign="left">the return value of the method - only when <code>isReturn==true</code>, it's a valid result but if the return value is <code>void</code> then it will be a <code>null</code></td>
<tdalign="left">the return value from the current call - only available when the method call returns normally (<code>isReturn==true</code>), and <code>null</code> is for <code>void</code> return value</td>
</tr>
<tr>
<tdalign="right">throwExp</td>
<tdalign="left">the exceptions thrown by the method invoking - only when <code>isThrow==true</code>, it's a valid thrown exception</td>
<tdalign="left">the exceptions thrown from the current call - only available when the method call throws exception (<code>isThrow==true</code>)</td>
</tr>
<tr>
<tdalign="right">isBefore</td>
<tdalign="left">assistant checking flag used in <ahref="watch.md"><code>before-watching</code> point</a> and at this very moment:<code>isBefore==true</code>,<code>isThrow==false</code> and <code>isReturn==false</code> since it's before we invoke the method</td>
<tdalign="left">flag to indicate the method is about to execute.<code>isBefore==true</code> but<code>isThrow==false</code> and <code>isReturn==false</code> since it's no way to know how the method call will end</td>
</tr>
<tr>
<tdalign="right">isThrow</td>
<tdalign="left">assistant checking flag: whether the current method invoking ends with exceptions</td>
<tdalign="left">flag to indicate the method call ends with exception thrown</td>
</tr>
<tr>
<tdalign="right">isReturn</td>
<tdalign="left">assistant checking flag: whether the method invoking exits normally without exceptions</td>
<tdalign="left">flag to indicate the method call ends normally without exception thrown</td>
</tr>
</tbody>
</table><p>F.Y.I</p>
<olclass="simple">
<li>all the <em>fields</em> mentioned in the table above can be used directly in the <codeclass="docutils literal notranslate"><spanclass="pre">expressions</span></code>;</li>
<li>if the expressions are <aclass="reference external"href="https://en.wikipedia.org/wiki/OGNL">invalid OGNL</a>, the command will be cancelled automatically with hints to correct the expressions;</li>
</table><p>All variables listed above can be used directly in the <aclass="reference external"href="https://commons.apache.org/proper/commons-ognl/language-guide.html">OGNL expression</a>. The command will not execute and exit if there’s illegal OGNL grammar or unexpected variable in the expression.</p>
<ulclass="simple">
<li><aclass="reference external"href="https://github.com/alibaba/arthas/issues/71">typical use cases</a>;</li>
<li><aclass="reference external"href="https://commons.apache.org/proper/commons-ognl/language-guide.html">OGNL official usage guide</a>.</li>
</ol>
<li><aclass="reference external"href="https://commons.apache.org/proper/commons-ognl/language-guide.html">OGNL language guide</a>.</li>
<liclass="toctree-l4"><aclass="reference internal"href="#use-to-run-the-command-in-the-background">1. Use & to run the command in the background</a></li>
<liclass="toctree-l4"><aclass="reference internal"href="#list-background-jobs">2. List background jobs</a></li>
<liclass="toctree-l4"><aclass="reference internal"href="#suspend-and-cannel-job">3. Suspend and Cannel job</a></li>
<liclass="toctree-l4"><aclass="reference internal"href="#fg-bg-bring-a-background-job-to-the-foreground-restart-a-stopped-background-job">4. fg/bg, Bring a background job to the foreground/Restart a stopped background job</a></li>
<liclass="toctree-l4"><aclass="reference internal"href="#redirect-the-job-output">5. Redirect the job output</a></li>
<liclass="toctree-l4"><aclass="reference internal"href="#suspend-and-cancel-job">3. Suspend and cancel job</a></li>
<liclass="toctree-l4"><aclass="reference internal"href="#fg-bg-switch-the-job-from-the-foreground-to-the-background-and-vise-verse">4. fg/bg, switch the job from the foreground to the background, and vise verse</a></li>
<liclass="toctree-l4"><aclass="reference internal"href="#redirect-the-output">5. Redirect the output</a></li>
<spanid="arthas-async-jobs"></span><h1>Arthas Async Jobs<aclass="headerlink"href="#arthas-async-jobs"title="Permalink to this headline">¶</a></h1>
<p>Asynchronous jobs in arthas, using commands related to linux jobs.<aclass="reference external"href="http://man7.org/linux/man-pages/man1/jobs.1p.html">linux man jobs</a>。</p>
<p>Asynchronous jobs in arthas. The idea is borrowed from <aclass="reference external"href="http://man7.org/linux/man-pages/man1/jobs.1p.html">linux jobs</a>.</p>
<spanid="use-to-run-the-command-in-the-background"></span><h2>1. Use & to run the command in the background<aclass="headerlink"href="#use-to-run-the-command-in-the-background"title="Permalink to this headline">¶</a></h2>
<p>For example, execute the trace command in the background:</p>
<divclass="highlight-bash notranslate"><divclass="highlight"><pre><span></span>trace Test t <spanclass="p">&</span>
</pre></div>
</div>
<p>By doing this, the current command is put to the background to run, you can continue to execute other commands in the console.</p>
</div>
<divclass="section"id="list-background-jobs">
<spanid="list-background-jobs"></span><h2>2. List background jobs<aclass="headerlink"href="#list-background-jobs"title="Permalink to this headline">¶</a></h2>
<p>You can see that there is currently a background job executing.</p>
<p>You can see that there is currently a background job executing:</p>
<ulclass="simple">
<li>job id is 10, <codeclass="docutils literal notranslate"><spanclass="pre">*</span></code> indicates that this job is created by the current session.</li>
<li>status is <codeclass="docutils literal notranslate"><spanclass="pre">Stopped</span></code></li>
<li>execution count is the number of executions, which have been executed 19 times since the start.</li>
<li>timeout date: After this time, the job will automatically timeout and exit.</li>
<li>timeout date: timeout timestamp, when the time exceeds this timestamp, the job will be automatically timeout and exit.</li>
</ul>
</div>
<divclass="section"id="suspend-and-cannel-job">
<spanid="suspend-and-cannel-job"></span><h2>3. Suspend and Cannel job<aclass="headerlink"href="#suspend-and-cannel-job" title="Permalink to this headline">¶</a></h2>
<p>When the job is executing in the foreground, such as directly calling the command <codeclass="docutils literal notranslate"><spanclass="pre">trace</span><spanclass="pre">Test</span><spanclass="pre">t</span></code> or calling the background job command <codeclass="docutils literal notranslate"><spanclass="pre">trace</span><spanclass="pre">Test</span><spanclass="pre">t</span><spanclass="pre">&</span></code>, the job is transferred to the foreground through the<codeclass="docutils literal notranslate"><spanclass="pre">fg</span></code> command. At this point, the console cannot continue to execute the command, but can receive and process the following keyboard events:</p>
<divclass="section"id="suspend-and-cancel-job">
<spanid="suspend-and-cancel-job"></span><h2>3. Suspend and cancel job<aclass="headerlink"href="#suspend-and-cancel-job" title="Permalink to this headline">¶</a></h2>
<p>When the job is executing in the foreground, for example, directly executing the command <codeclass="docutils literal notranslate"><spanclass="pre">trace</span><spanclass="pre">Test</span><spanclass="pre">t</span></code>, or executing the background job command <codeclass="docutils literal notranslate"><spanclass="pre">trace</span><spanclass="pre">Test</span><spanclass="pre">t</span><spanclass="pre">&</span></code>, then putting the job back to the forground via<codeclass="docutils literal notranslate"><spanclass="pre">fg</span></code> command, the console cannot continue to execute other command, but can receive and process the following keyboard events:</p>
<ulclass="simple">
<li>‘ctrl + z’: Suspend the job, the job status will change to <codeclass="docutils literal notranslate"><spanclass="pre">Stopped</span></code>, and the job can be restarted by <codeclass="docutils literal notranslate"><spanclass="pre">bg</span><spanclass="pre"><job-id></span></code> or <codeclass="docutils literal notranslate"><spanclass="pre">fg</span><spanclass="pre"><job-id></span></code></li>
<li>‘ctrl + c’: Stop the job</li>
<li>‘ctrl + d’: According to linux semantics should be the exit terminal, currently arthas ignore this input.</li>
<li>‘ctrl + d’: According to linux semantics this should lead to exit the terminal, right now Arthas has not implemented this yet, therefore simply ignore this keystroke.</li>
<spanid="fg-bg-bring-a-background-job-to-the-foreground-restart-a-stopped-background-job"></span><h2>4. fg/bg, Bring a background job to the foreground/Restart a stopped background job<aclass="headerlink"href="#fg-bg-bring-a-background-job-to-the-foreground-restart-a-stopped-background-job" title="Permalink to this headline">¶</a></h2>
<spanid="fg-bg-switch-the-job-from-the-foreground-to-the-background-and-vise-verse"></span><h2>4. fg/bg, switch the job from the foreground to the background, and vise verse<aclass="headerlink"href="#fg-bg-switch-the-job-from-the-foreground-to-the-background-and-vise-verse" title="Permalink to this headline">¶</a></h2>
<ulclass="simple">
<li>When the job is executed in the background or suspended (<codeclass="docutils literal notranslate"><spanclass="pre">ctrl</span><spanclass="pre">+</span><spanclass="pre">z</span></code> to suspend job), executing <codeclass="docutils literal notranslate"><spanclass="pre">fg</span><spanclass="pre"><job-id></span></code>will transfer the corresponding job to the foreground to continue execution.</li>
<li>When the job is suspended (<codeclass="docutils literal notranslate"><spanclass="pre">ctrl</span><spanclass="pre">+</span><spanclass="pre">z</span></code> to suspend job), executing <codeclass="docutils literal notranslate"><spanclass="pre">bg</span><spanclass="pre"><job-id></span></code>will continue the corresponding job in the background.</li>
<li>A job created by a non-current session can only be executed by the current session fg to the foreground.</li>
<li>When a job is executed in the background or in suspended status (use <codeclass="docutils literal notranslate"><spanclass="pre">ctrl</span><spanclass="pre">+</span><spanclass="pre">z</span></code> to suspend job), <codeclass="docutils literal notranslate"><spanclass="pre">fg</span><spanclass="pre"><job-id></span></code>can transfer the job to the foreground to continue to run.</li>
<li>When a job is in suspended status (use <codeclass="docutils literal notranslate"><spanclass="pre">ctrl</span><spanclass="pre">+</span><spanclass="pre">z</span></code> to suspend job), <codeclass="docutils literal notranslate"><spanclass="pre">bg</span><spanclass="pre"><job-id></span></code>can put the job to the background to continue to run.</li>
<li>A job created by other session can only be put to the foreground to run by using <codeclass="docutils literal notranslate"><spanclass="pre">fg</span></code> in the current session.</li>
</ul>
</div>
<divclass="section"id="redirect-the-job-output">
<spanid="redirect-the-job-output"></span><h2>5. Redirect the job output<aclass="headerlink"href="#redirect-the-job-output" title="Permalink to this headline">¶</a></h2>
<p>The job output can be redirect to the specified file by <codeclass="docutils literal notranslate"><spanclass="pre">></span></code> or <codeclass="docutils literal notranslate"><spanclass="pre">>></span></code>, and can be used together with <codeclass="docutils literal notranslate"><spanclass="pre">&</span></code> to implement the asynchronous job of the arthas command. such as:</p>
<divclass="section"id="redirect-the-output">
<spanid="redirect-the-output"></span><h2>5. Redirect the output<aclass="headerlink"href="#redirect-the-output" title="Permalink to this headline">¶</a></h2>
<p>The job output can be redirect to the specified file by <codeclass="docutils literal notranslate"><spanclass="pre">></span></code> or <codeclass="docutils literal notranslate"><spanclass="pre">>></span></code>, and can be used together with <codeclass="docutils literal notranslate"><spanclass="pre">&</span></code>. By doing this, you can achieve running commands asynchronously, for example:</p>
<divclass="highlight-bash notranslate"><divclass="highlight"><pre><span></span>$ trace Test t >> test.out <spanclass="p">&</span>
</pre></div>
</div>
<p>The trace command will be executed in the background and the output will be redirect to <codeclass="docutils literal notranslate"><spanclass="pre">~/logs/arthas-cache/test.out</span></code>. You can continue to execute other commands in the console.</p>
<p>When connecting to a remote arthas server, you may not be able to view the files of the remote machine. Arthas also supports automatic redirection to the local cache file. Examples are as follows:</p>
<p>The trace command will be running in the background and the output will be redirect to <codeclass="docutils literal notranslate"><spanclass="pre">~/logs/arthas-cache/test.out</span></code>. You can continue to execute other commands in the console, at the same time, you can also examine the execution result from the output file.</p>
<p>When connect to a remote Arthas server, you may not be able to view the output file on the remote machine. In this case, Arthas also supports automatically redirecting the output to the local cache file. Examples are as follows:</p>
<divclass="highlight-bash notranslate"><divclass="highlight"><pre><span></span>$ trace Test t >><spanclass="p">&</span>
<p>You can see that does not specify the redirect file after <codeclass="docutils literal notranslate"><spanclass="pre">>></span></code>, arthas will automatically redirect the job output to the <codeclass="docutils literal notranslate"><spanclass="pre">~/logs/arthas-cache</span></code>.</p>
<p>In the above example, pid is <codeclass="docutils literal notranslate"><spanclass="pre">28198</span></code> and job id is <codeclass="docutils literal notranslate"><spanclass="pre">2</span></code>.</p>
<p>If output path is not given, Arthas will automatically redirect the output to the local cache. Job id and cache location will be shown on the console. Cache location is a directory where the output files are put. For one given job, the path of its output file contains PID and job id in order to avoid potential conflict with other jobs. In the above example, pid is <codeclass="docutils literal notranslate"><spanclass="pre">28198</span></code> and job id is <codeclass="docutils literal notranslate"><spanclass="pre">2</span></code>.</p>
</div>
<divclass="section"id="stop-job">
<spanid="stop-job"></span><h2>6. Stop job<aclass="headerlink"href="#stop-job"title="Permalink to this headline">¶</a></h2>
<spanid="manual-installation"></span><h1>Manual Installation<aclass="headerlink"href="#manual-installation"title="Permalink to this headline">¶</a></h1>
<divclass="section"id="download">
<spanid="download"></span><h2>Download<aclass="headerlink"href="#download"title="Permalink to this headline">¶</a></h2>
<p>If the downloading is rather clumsy, try to download from the <aclass="reference external"href="https://maven.aliyun.com/">repository in AliYun</a>; the downloading URL template is (remember to fill up the version <codeclass="docutils literal notranslate"><spanclass="pre">3.x.x</span></code> template to your needs)</p>
<p>If the download is slow, try to download from the <aclass="reference external"href="https://maven.aliyun.com/">repository in AliYun</a>; the downloading URL template is (remember to fill up the version <codeclass="docutils literal notranslate"><spanclass="pre">3.x.x</span></code> template to your needs)</p>
<spanid="windows"></span><h3>Windows<aclass="headerlink"href="#windows"title="Permalink to this headline">¶</a></h3>
<p>Open the <em>DOS</em> console, under the unzipped arthas folder execture <codeclass="docutils literal notranslate"><spanclass="pre">as.bat</span><spanclass="pre"><pid></span></code></p>
<p>Open the <em>DOS</em> console, under the unzipped arthas folder execute <codeclass="docutils literal notranslate"><spanclass="pre">as.bat</span><spanclass="pre"><pid></span></code></p>
<spanid="v2017-05-11"></span><h2>v2017-05-11<aclass="headerlink"href="#v2017-05-11"title="Permalink to this headline">¶</a></h2>
<ulclass="simple">
<li>[improvement] <aclass="reference external"href="tt.md"><codeclass="docutils literal notranslate"><spanclass="pre">tt</span></code></a> investigating/recording level one to avoid too much performance overhea</li>
<li>[improvement] <aclass="reference external"href="tt.md"><codeclass="docutils literal notranslate"><spanclass="pre">tt</span></code></a> investigating/recording level one to avoid too much performance overhead</li>
<li>[bug] fix Chinese characters can not be presented issue</li>
<div>Attention: only <codeclass="docutils literal notranslate"><spanclass="pre">synchronized</span></code> blocked threads can be located for now, <codeclass="docutils literal notranslate"><spanclass="pre">JUL</span></code> not supported yet.</div></blockquote>
<p>Attention: only <codeclass="docutils literal notranslate"><spanclass="pre">synchronized</span></code> blocked threads can be located for now, while <codeclass="docutils literal notranslate"><spanclass="pre">java.util.concurrent.Lock</span></code> not supported yet.</p>
<spanid="thread-i-specify-the-collecting-interval"></span><h3>thread -i specify the collecting interval<aclass="headerlink"href="#thread-i-specify-the-collecting-interval"title="Permalink to this headline">¶</a></h3>