You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
arthas/quick-start.html

497 lines
19 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="zh-CN" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="zh-CN" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>快速入门 &mdash; Arthas 3.1.1 文档</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="索引" href="genindex.html" />
<link rel="search" title="搜索" href="search.html" />
<link rel="next" title="进阶使用" href="advanced-use.html" />
<link rel="prev" title="Arthas Install" href="install-detail.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.1
</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/en/">English Docs</a></li>
<li class="toctree-l1"><a class="reference external" href="https://alibaba.github.io/arthas/arthas-tutorials?language=cn">在线教程(推荐)</a></li>
<li class="toctree-l1"><a class="reference internal" href="install-detail.html">安装</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">快速入门</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#demo">1. 启动Demo</a></li>
<li class="toctree-l2"><a class="reference internal" href="#arthas">2. 启动arthas</a></li>
<li class="toctree-l2"><a class="reference internal" href="#dashboard">3. 查看dashboard</a></li>
<li class="toctree-l2"><a class="reference internal" href="#threadarthas-demomain-class">4. 通过thread命令来获取到<tt class="docutils literal">arthas-demo</tt>进程的Main Class</a></li>
<li class="toctree-l2"><a class="reference internal" href="#jadmain-class">5. 通过jad来反编译Main Class</a></li>
<li class="toctree-l2"><a class="reference internal" href="#watch">6. watch</a></li>
<li class="toctree-l2"><a class="reference internal" href="#arthas">7. 退出arthas</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="advanced-use.html">进阶使用</a></li>
<li class="toctree-l1"><a class="reference internal" href="commands.html">命令列表</a></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">用户案例</a></li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas/issues?q=label%3Aquestion-answered">常见问题</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">参与贡献</a></li>
<li class="toctree-l1"><a class="reference internal" href="release-notes.html">Release Notes</a></li>
<li class="toctree-l1"><a class="reference internal" href="contact-us.html">QQ群/钉钉群</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> &raquo;</li>
<li>快速入门</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/alibaba/arthas/blob/master/site/src/site/sphinx/quick-start.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="">
<span id="id1"></span><h1>快速入门<a class="headerlink" href="#" title="永久链接至标题"></a></h1>
<div class="section" id="demo">
<span id="demo"></span><h2>1. 启动Demo<a class="headerlink" href="#demo" title="永久链接至标题"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">wget https://alibaba.github.io/arthas/arthas-demo.jar
java -jar arthas-demo.jar
</pre></div>
</div>
<p><tt class="docutils literal">arthas-demo</tt>是一个简单的程序,每隔一秒生成一个随机数,再执行质因式分解,并打印出分解结果。</p>
<p><tt class="docutils literal">arthas-demo</tt>源代码:<a class="reference external" href="https://github.com/alibaba/arthas/blob/master/demo/src/main/java/demo/MathGame.java">查看</a></p>
</div>
<div class="section" id="arthas">
<span id="arthas"></span><h2>2. 启动arthas<a class="headerlink" href="#arthas" title="永久链接至标题"></a></h2>
<p>在命令行下面执行使用和目标进程一致的用户启动否则可能attach失败</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar
</pre></div>
</div>
<ul class="simple">
<li>执行该程序的用户需要和目标进程具有相同的权限。比如以<tt class="docutils literal">admin</tt>用户来执行:<tt class="docutils literal">sudo su admin && java -jar arthas-boot.jar</tt><tt class="docutils literal">sudo -u admin -EH java -jar arthas-boot.jar</tt></li>
<li>如果attach不上目标进程可以查看<tt class="docutils literal">~/logs/arthas/</tt> 目录下的日志。</li>
<li>如果下载速度比较慢可以使用aliyun的镜像<tt class="docutils literal">java -jar arthas-boot.jar --repo-mirror aliyun --use-http</tt></li>
<li><tt class="docutils literal">java -jar arthas-boot.jar -h</tt> 打印更多参数信息。</li>
</ul>
<p>选择应用java进程</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ $ java -jar arthas-boot.jar
* [1]: 35542
[2]: 71560 arthas-demo.jar
</pre></div>
</div>
<p>Demo进程是第2个则输入2再输入<tt class="docutils literal">回车/enter</tt>。Arthas会attach到目标进程上并输出日志</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">[INFO] Try to attach process 71560
[INFO] Attach process 71560 success.
[INFO] arthas-client connect 127.0.0.1 3658
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. &#x27;&#x27;--. .--&#x27;| &#x27;--&#x27; | / O \ &#x27; .-&#x27;
| .-. || &#x27;--&#x27;.&#x27; | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-&#x27; |
`--&#x27; `--&#x27;`--&#x27; &#x27;--&#x27; `--&#x27; `--&#x27; `--&#x27;`--&#x27; `--&#x27;`-----&#x27;
wiki: https://alibaba.github.io/arthas
version: 3.0.5.20181127201536
pid: 71560
time: 2018-11-28 19:16:24
$
</pre></div>
</div>
</div>
<div class="section" id="dashboard">
<span id="dashboard"></span><h2>3. 查看dashboard<a class="headerlink" href="#dashboard" title="永久链接至标题"></a></h2>
<p>输入<a class="reference internal" href="dashboard.html"><span class="doc">dashboard</span></a>,按<tt class="docutils literal">回车/enter</tt>,会展示当前进程的信息,按<tt class="docutils literal">ctrl+c</tt>可以中断执行。</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ dashboard
ID NAME GROUP PRIORI STATE %CPU TIME INTERRU DAEMON
17 pool-2-thread-1 system 5 WAITIN 67 0:0 false false
27 Timer-for-arthas-dashb system 10 RUNNAB 32 0:0 false true
11 AsyncAppender-Worker-a system 9 WAITIN 0 0:0 false true
9 Attach Listener system 9 RUNNAB 0 0:0 false true
3 Finalizer system 8 WAITIN 0 0:0 false true
2 Reference Handler system 10 WAITIN 0 0:0 false true
4 Signal Dispatcher system 9 RUNNAB 0 0:0 false true
26 as-command-execute-dae system 10 TIMED_ 0 0:0 false true
13 job-timeout system 9 TIMED_ 0 0:0 false true
1 main main 5 TIMED_ 0 0:0 false false
14 nioEventLoopGroup-2-1 system 10 RUNNAB 0 0:0 false false
18 nioEventLoopGroup-2-2 system 10 RUNNAB 0 0:0 false false
23 nioEventLoopGroup-2-3 system 10 RUNNAB 0 0:0 false false
15 nioEventLoopGroup-3-1 system 10 RUNNAB 0 0:0 false false
Memory used total max usage GC
heap 32M 155M 1820M 1.77% gc.ps_scavenge.count 4
ps_eden_space 14M 65M 672M 2.21% gc.ps_scavenge.time(m 166
ps_survivor_space 4M 5M 5M s)
ps_old_gen 12M 85M 1365M 0.91% gc.ps_marksweep.count 0
nonheap 20M 23M -1 gc.ps_marksweep.time( 0
code_cache 3M 5M 240M 1.32% ms)
Runtime
os.name Mac OS X
os.version 10.13.4
java.version 1.8.0_162
java.home /Library/Java/JavaVir
tualMachines/jdk1.8.0
_162.jdk/Contents/Hom
e/jre
</pre></div>
</div>
</div>
<div class="section" id="threadarthas-demomain-class">
<span id="threadarthas-demomain-class"></span><h2>4. 通过thread命令来获取到<tt class="docutils literal">arthas-demo</tt>进程的Main Class<a class="headerlink" href="#threadarthas-demomain-class" title="永久链接至标题"></a></h2>
<p><tt class="docutils literal">thread 1</tt>会打印线程ID 1的栈通常是main函数的线程。</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ thread 1 | grep &#x27;main(&#x27;
at demo.MathGame.main(MathGame.java:17)
</pre></div>
</div>
</div>
<div class="section" id="jadmain-class">
<span id="jadmain-class"></span><h2>5. 通过jad来反编译Main Class<a class="headerlink" href="#jadmain-class" title="永久链接至标题"></a></h2>
<div class="highlight-java notranslate"><div class="highlight hljs"><pre class="java">$ jad demo.MathGame
ClassLoader:
+-sun.misc.Launcher$AppClassLoader@3d4eac69
+-sun.misc.Launcher$ExtClassLoader@66350f69
Location:
/tmp/arthas-demo.jar
/*
* Decompiled with CFR 0_132.
*/
package demo;
import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;
public class MathGame {
private static Random random = new Random();
private int illegalArgumentCount = 0;
public static void main(String[] args) throws InterruptedException {
MathGame game = new MathGame();
do {
game.run();
TimeUnit.SECONDS.sleep(1L);
} while (true);
}
public void run() throws InterruptedException {
try {
int number = random.nextInt();
List&lt;Integer&gt; primeFactors = this.primeFactors(number);
MathGame.print(number, primeFactors);
}
catch (Exception e) {
System.out.println(String.format(&quot;illegalArgumentCount:%3d, &quot;, this.illegalArgumentCount) + e.getMessage());
}
}
public static void print(int number, List&lt;Integer&gt; primeFactors) {
StringBuffer sb = new StringBuffer(&quot;&quot; + number + &quot;=&quot;);
Iterator&lt;Integer&gt; iterator = primeFactors.iterator();
while (iterator.hasNext()) {
int factor = iterator.next();
sb.append(factor).append(&#x27;*&#x27;);
}
if (sb.charAt(sb.length() - 1) == &#x27;*&#x27;) {
sb.deleteCharAt(sb.length() - 1);
}
System.out.println(sb);
}
public List&lt;Integer&gt; primeFactors(int number) {
if (number &lt; 2) {
++this.illegalArgumentCount;
throw new IllegalArgumentException(&quot;number is: &quot; + number + &quot;, need &gt;= 2&quot;);
}
ArrayList&lt;Integer&gt; result = new ArrayList&lt;Integer&gt;();
int i = 2;
while (i &lt;= number) {
if (number % i == 0) {
result.add(i);
number /= i;
i = 2;
continue;
}
++i;
}
return result;
}
}
Affect(row-cnt:1) cost in 970 ms.
</pre></div>
</div>
</div>
<div class="section" id="watch">
<span id="watch"></span><h2>6. watch<a class="headerlink" href="#watch" title="永久链接至标题"></a></h2>
<p>通过<a class="reference internal" href="watch.html"><span class="doc">watch</span></a>命令来查看<tt class="docutils literal">demo.MathGame#primeFactors</tt>函数的返回值:</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">$ watch demo.MathGame primeFactors returnObj
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 107 ms.
ts=2018-11-28 19:22:30; [cost=1.715367ms] result=null
ts=2018-11-28 19:22:31; [cost=0.185203ms] result=null
ts=2018-11-28 19:22:32; [cost=19.012416ms] result=@ArrayList[
@Integer[5],
@Integer[47],
@Integer[2675531],
]
ts=2018-11-28 19:22:33; [cost=0.311395ms] result=@ArrayList[
@Integer[2],
@Integer[5],
@Integer[317],
@Integer[503],
@Integer[887],
]
ts=2018-11-28 19:22:34; [cost=10.136007ms] result=@ArrayList[
@Integer[2],
@Integer[2],
@Integer[3],
@Integer[3],
@Integer[31],
@Integer[717593],
]
ts=2018-11-28 19:22:35; [cost=29.969732ms] result=@ArrayList[
@Integer[5],
@Integer[29],
@Integer[7651739],
]
</pre></div>
</div>
<p>更多的功能可以查看<a class="reference internal" href="advanced-use.html"><span class="doc">进阶使用</span></a></p>
</div>
<div class="section" id="arthas">
<span id="id2"></span><h2>7. 退出arthas<a class="headerlink" href="#arthas" title="永久链接至标题"></a></h2>
<p>如果只是退出当前的连接,可以用<tt class="docutils literal">quit</tt>或者<tt class="docutils literal">exit</tt>命令。Attach到目标进程上的arthas还会继续运行端口会保持开放下次连接时可以直接连接上。</p>
<p>如果想完全退出arthas可以执行<tt class="docutils literal">shutdown</tt>命令。</p>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="advanced-use.html" class="btn btn-neutral float-right" title="进阶使用" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="install-detail.html" class="btn btn-neutral" title="Arthas Install" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; 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.1',
LANGUAGE:'zh_CN',
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="_static/translations.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>