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/faq.html

389 lines
20 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>FAQ &mdash; Arthas 3.6.2 文档</title>
<link rel="shortcut icon" href="_static/favicon.ico"/>
<script type="text/javascript" src="_static/js/modernizr.min.js"></script>
<script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></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/language_data.js"></script>
<script type="text/javascript" src="_static/translations.js"></script>
<script type="text/javascript" src="_static/js/theme.js"></script>
<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="contact-us.html" />
<link rel="prev" title="IDEA Plugin" href="idea-plugin.html" />
<script>
if (window.location.href.startsWith("https://alibaba.github.io/arthas/")) {
window.location.href = "https://arthas.aliyun.com/doc/" + window.location.href.substr("https://alibaba.github.io/arthas/".length);
}
</script>
<script src="_static/center_page.js"></script>
<link rel="stylesheet" href="https://g.alicdn.com/code/lib/highlight.js/9.13.1/styles/github.min.css">
</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.6.2
</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://arthas.aliyun.com/">首页</a></li>
<li class="toctree-l1"><a class="reference external" href="https://arthas.aliyun.com/doc/en/">English Docs</a></li>
<li class="toctree-l1"><a class="reference external" href="https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn">在线教程(katacoda)</a></li>
<li class="toctree-l1"><a class="reference external" href="https://start.aliyun.com/handson-lab?category=arthas">在线教程(阿里云)</a></li>
<li class="toctree-l1"><a class="reference internal" href="install-detail.html">安装</a></li>
<li class="toctree-l1"><a class="reference internal" href="download.html">下载</a></li>
<li class="toctree-l1"><a class="reference internal" href="quick-start.html">快速入门</a></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="web-console.html">WebConsole</a></li>
<li class="toctree-l1"><a class="reference internal" href="tunnel.html">Arthas Tunnel</a></li>
<li class="toctree-l1"><a class="reference internal" href="http-api.html">Http API</a></li>
<li class="toctree-l1"><a class="reference internal" href="docker.html">Docker</a></li>
<li class="toctree-l1"><a class="reference internal" href="spring-boot-starter.html">Arthas Spring Boot Starter</a></li>
<li class="toctree-l1"><a class="reference internal" href="idea-plugin.html">IDEA 插件</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 current"><a class="current reference internal" href="#">FAQ/常见问题</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id1">日志文件在哪里?</a></li>
<li class="toctree-l2"><a class="reference internal" href="#arthas-attach">Arthas attach之后对原进程性能有多大的影响</a></li>
<li class="toctree-l2"><a class="reference internal" href="#target-process-not-responding-or-hotspot-vm-not-loaded">target process not responding or HotSpot VM not loaded</a></li>
<li class="toctree-l2"><a class="reference internal" href="#trace-watchjdk">trace/watch等命令能否增强jdk里的类</a></li>
<li class="toctree-l2"><a class="reference internal" href="#json">怎么以<code class="docutils literal notranslate"><span class="pre">json</span></code>格式查看结果</a></li>
<li class="toctree-l2"><a class="reference internal" href="#arthas-native">Arthas能否跟踪 native 函数</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">能不能查看内存里某个变量的值</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">方法同名过滤</a></li>
<li class="toctree-l2"><a class="reference internal" href="#watchtrace">怎么watch、trace 构造函数 </a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">怎样watch、trace内部类</a></li>
<li class="toctree-l2"><a class="reference internal" href="#unicode">输入中文/Unicode字符</a></li>
<li class="toctree-l2"><a class="reference internal" href="#java-lang-classformaterror-nullskywalking-arthas">java.lang.ClassFormatError: null、skywalking arthas 兼容使用</a></li>
<li class="toctree-l2"><a class="reference internal" href="#class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields">class redefinition failed: attempted to change the schema (add/remove fields)</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#arthas">Arthas能不能离线使用</a></li>
<li class="toctree-l3"><a class="reference internal" href="#attach-docker-k8s-pid-1">Attach docker/k8s 里的 pid 为 1 的进程失败</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id5">为什么下载了新版本的Arthas连接的却是旧版本</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="https://github.com/alibaba/arthas">Star 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 external" href="https://github.com/alibaba/arthas/releases">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>FAQ</li>
<li class="wy-breadcrumbs-aside">
<a href="https://github.com/alibaba/arthas/blob/master/site/src/site/sphinx/faq.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="faq">
<h1>FAQ<a class="headerlink" href="#faq" title="永久链接至标题"></a></h1>
<blockquote>
<div><p>不在本列表里的问题请到issue里搜索。 <a class="reference external" href="https://github.com/alibaba/arthas/issues">https://github.com/alibaba/arthas/issues</a></p>
</div></blockquote>
<div class="section" id="id1">
<h2>日志文件在哪里?<a class="headerlink" href="#id1" title="永久链接至标题"></a></h2>
<p>日志文件路径: <code class="docutils literal notranslate"><span class="pre">~/logs/arthas/arthas.log</span></code></p>
</div>
<div class="section" id="arthas-attach">
<h2>Arthas attach之后对原进程性能有多大的影响<a class="headerlink" href="#arthas-attach" title="永久链接至标题"></a></h2>
<p><a class="reference external" href="https://github.com/alibaba/arthas/issues/44">https://github.com/alibaba/arthas/issues/44</a></p>
</div>
<div class="section" id="target-process-not-responding-or-hotspot-vm-not-loaded">
<h2>target process not responding or HotSpot VM not loaded<a class="headerlink" href="#target-process-not-responding-or-hotspot-vm-not-loaded" title="永久链接至标题"></a></h2>
<p>com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded</p>
<ol class="simple">
<li><p>检查当前用户和目标java进程是否一致。如果不一致则切换到同一用户。JVM只能attach同样用户下的java 进程。</p></li>
<li><p>尝试使用 <code class="docutils literal notranslate"><span class="pre">jstack</span> <span class="pre">-l</span> <span class="pre">$pid</span></code>如果进程没有反应则说明进程可能假死无法响应JVM attach信号。所以同样基于attach机制的Arthas无法工作。尝试使用<code class="docutils literal notranslate"><span class="pre">jmap</span></code> heapdump后分析。</p></li>
<li><p>尝试按<a class="reference internal" href="quick-start.html"><span class="doc">quick-start</span></a>里的方式attach math-game。</p></li>
<li><p>更多情况参考: <a class="reference external" href="https://github.com/alibaba/arthas/issues/347">https://github.com/alibaba/arthas/issues/347</a></p></li>
</ol>
</div>
<div class="section" id="trace-watchjdk">
<h2>trace/watch等命令能否增强jdk里的类<a class="headerlink" href="#trace-watchjdk" title="永久链接至标题"></a></h2>
<p>默认情况下会过滤掉<code class="docutils literal notranslate"><span class="pre">java.</span></code>开头的类和被<code class="docutils literal notranslate"><span class="pre">BootStrap</span> <span class="pre">ClassLoader</span></code>加载的类。可以通过参数开启。</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">options unsafe true</pre></div>
</div>
<p>更多参考 <a class="reference internal" href="options.html"><span class="doc">options</span></a></p>
<blockquote>
<div><p>通过 java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch append到<code class="docutils literal notranslate"><span class="pre">Bootstrap</span> <span class="pre">ClassLoader</span></code>的jar包需要开启unsafe。</p>
</div></blockquote>
</div>
<div class="section" id="json">
<h2>怎么以<code class="docutils literal notranslate"><span class="pre">json</span></code>格式查看结果<a class="headerlink" href="#json" title="永久链接至标题"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">options json-format true</pre></div>
</div>
<p>更多参考 <a class="reference internal" href="options.html"><span class="doc">options</span></a></p>
</div>
<div class="section" id="arthas-native">
<h2>Arthas能否跟踪 native 函数<a class="headerlink" href="#arthas-native" title="永久链接至标题"></a></h2>
<p>不能。</p>
</div>
<div class="section" id="id2">
<h2>能不能查看内存里某个变量的值<a class="headerlink" href="#id2" title="永久链接至标题"></a></h2>
<ol class="simple">
<li><p>可以使用<a class="reference internal" href="vmtool.html"><span class="doc">vmtool</span></a>命令。</p></li>
<li><p>可以用一些技巧,用<a class="reference internal" href="tt.html"><span class="doc">tt</span></a>命令拦截到对象,或者从静态函数里取到对象。</p></li>
</ol>
</div>
<div class="section" id="id3">
<h2>方法同名过滤<a class="headerlink" href="#id3" title="永久链接至标题"></a></h2>
<p>同名方法过滤可以通过匹配表达式,可以使用<a class="reference internal" href="advice-class.html"><span class="doc">表达式核心变量</span></a>中所有变量作为已知条件,可以通过判断参数个数<code class="docutils literal notranslate"><span class="pre">params.length</span> <span class="pre">==1</span></code>, 参数类型<code class="docutils literal notranslate"><span class="pre">params[0]</span> <span class="pre">instanceof</span> <span class="pre">java.lang.Integer</span></code>、返回值类型 <code class="docutils literal notranslate"><span class="pre">returnObj</span> <span class="pre">instanceof</span> <span class="pre">java.util.List</span></code> 等等一种或者多种组合进行过滤。</p>
<p>可以使用 <code class="docutils literal notranslate"><span class="pre">-v</span></code> 查看观察匹配表达式的执行结果 <a class="reference external" href="https://github.com/alibaba/arthas/issues/1348">https://github.com/alibaba/arthas/issues/1348</a></p>
<p>例子<a class="reference internal" href="quick-start.html"><span class="doc">math-game</span></a></p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">watch demo.MathGame primeFactors &#x27;{params,returnObj,throwExp}&#x27; &#x27;params.length &gt;0 &amp;&amp; returnObj instanceof java.util.List&#x27; -v</pre></div>
</div>
</div>
<div class="section" id="watchtrace">
<h2>怎么watch、trace 构造函数 <a class="headerlink" href="#watchtrace" title="永久链接至标题"></a></h2>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">watch demo.MathGame &lt;init&gt; &#x27;{params,returnObj,throwExp}&#x27; -v</pre></div>
</div>
</div>
<div class="section" id="id4">
<h2>怎样watch、trace内部类<a class="headerlink" href="#id4" title="永久链接至标题"></a></h2>
<p>在JVM规范里内部类的格式是<code class="docutils literal notranslate"><span class="pre">OuterClass$InnerClass</span></code></p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">watch OuterClass$InnerClass</pre></div>
</div>
</div>
<div class="section" id="unicode">
<h2>输入中文/Unicode字符<a class="headerlink" href="#unicode" title="永久链接至标题"></a></h2>
<p>把中文/Unicode字符转为<code class="docutils literal notranslate"><span class="pre">\u</span></code>表示方法:</p>
<div class="highlight-bash notranslate"><div class="highlight hljs"><pre class="bash">ognl &#x27;@java.lang.System@out.println(&quot;Hello \u4e2d\u6587&quot;)&#x27;</pre></div>
</div>
</div>
<div class="section" id="java-lang-classformaterror-nullskywalking-arthas">
<h2>java.lang.ClassFormatError: null、skywalking arthas 兼容使用<a class="headerlink" href="#java-lang-classformaterror-nullskywalking-arthas" title="永久链接至标题"></a></h2>
<p>当出现这个错误日志<code class="docutils literal notranslate"><span class="pre">java.lang.ClassFormatError:</span> <span class="pre">null</span></code>,通常情况下都是被其他字节码工具修改过与arthas修改字节码不兼容。</p>
<p>比如: 使用 skywalking V8.1.0 以下版本 <a class="reference external" href="https://github.com/alibaba/arthas/issues/1141">无法trace、watch 被skywalking agent 增强过的类</a>, V8.1.0 以上版本可以兼容使用,更多参考skywalking配置 <a class="reference external" href="https://github.com/apache/skywalking/blob/master/docs/en/FAQ/Compatible-with-other-javaagent-bytecode-processing.md#">skywalking compatible with other javaagent bytecode processing</a></p>
</div>
<div class="section" id="class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields">
<h2>class redefinition failed: attempted to change the schema (add/remove fields)<a class="headerlink" href="#class-redefinition-failed-attempted-to-change-the-schema-add-remove-fields" title="永久链接至标题"></a></h2>
<p>参考: <a class="reference external" href="https://github.com/alibaba/arthas/issues/2165">https://github.com/alibaba/arthas/issues/2165</a></p>
<div class="section" id="arthas">
<h3>Arthas能不能离线使用<a class="headerlink" href="#arthas" title="永久链接至标题"></a></h3>
<p>可以。下载全量包解压即可,参考: <a class="reference internal" href="download.html"><span class="doc">下载</span></a></p>
</div>
<div class="section" id="attach-docker-k8s-pid-1">
<h3>Attach docker/k8s 里的 pid 为 1 的进程失败<a class="headerlink" href="#attach-docker-k8s-pid-1" title="永久链接至标题"></a></h3>
<p>参考: <a class="reference external" href="https://github.com/alibaba/arthas/issues/362#issuecomment-448185416">https://github.com/alibaba/arthas/issues/362#issuecomment-448185416</a></p>
</div>
<div class="section" id="id5">
<h3>为什么下载了新版本的Arthas连接的却是旧版本<a class="headerlink" href="#id5" title="永久链接至标题"></a></h3>
<p>比如启动的 <code class="docutils literal notranslate"><span class="pre">as.sh/arthas-boot.jar</span></code> 版本是3.5.* 的但是连接上之后打印的arthas版本是 3.4.* 的。</p>
<p>可能是之前使用旧版本的arthas诊断过目标进程。可以先执行<code class="docutils literal notranslate"><span class="pre">stop</span></code>停止掉旧版本的arthas再重新使用新版本attach。</p>
</div>
</div>
</div>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="contact-us.html" class="btn btn-neutral float-right" title="联系我们" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a>
<a href="idea-plugin.html" class="btn btn-neutral float-left" title="IDEA Plugin" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<p>
&copy; Copyright 2018-2020, 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">
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://g.alicdn.com/code/lib/highlight.js/9.13.1/highlight.min.js"></script>
<script src="https://g.alicdn.com/code/lib/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 type="text/javascript">document.write(unescape("%3Cspan style='display:none;' id='cnzz_stat_icon_1279151497'%3E%3C/span%3E%3Cscript src='https://s4.cnzz.com/z_stat.php%3Fid%3D1279151497' type='text/javascript'%3E%3C/script%3E"));</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>