|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="zh-CN">
|
|
|
|
|
<head>
|
|
|
|
|
<meta charset="utf-8">
|
|
|
|
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
|
|
|
<meta name="generator" content="VuePress 2.0.0-beta.51">
|
|
|
|
|
<style>
|
|
|
|
|
:root {
|
|
|
|
|
--c-bg: #fff;
|
|
|
|
|
}
|
|
|
|
|
html.dark {
|
|
|
|
|
--c-bg: #22272e;
|
|
|
|
|
}
|
|
|
|
|
html, body {
|
|
|
|
|
background-color: var(--c-bg);
|
|
|
|
|
}
|
|
|
|
|
</style>
|
|
|
|
|
<script>
|
|
|
|
|
const userMode = localStorage.getItem('vuepress-color-scheme');
|
|
|
|
|
const systemDarkMode = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
|
|
|
if (userMode === 'dark' || (userMode !== 'light' && systemDarkMode)) {
|
|
|
|
|
document.documentElement.classList.toggle('dark', true);
|
|
|
|
|
}
|
|
|
|
|
</script>
|
|
|
|
|
<link rel="icon" href="/images/favicon.ico"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta property="og:title" content="Arthas"><meta property="og:image:alt" content="Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas"><meta property="og:image" content="/images/arthas_mate_image.png"><meta property="og:description" content="Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas"><meta property="og:image:width" content="1200"><meta property="og:image:height" content="600"><meta property="twitter:image:src" content="/images/arthas_mate_image.png"><meta property="twitter:image:alt" content="Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas"><meta itemprop="name" content="Arthas"><meta itemprop="image" content="/images/arthas_mate_image.png"><meta itemprop="description" content="Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas - alibaba/arthas: Alibaba Java Diagnostic Tool Arthas/Alibaba Java诊断利器Arthas"><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><meta name="aes-config" content="pid=xux-opensource&user_type=101&uid=&username=&dim10=arthas"><script src="//g.alicdn.com/alilog/mlog/aplus_v2.js" id="beacon-aplus" exparams="clog=o&aplus&sidx=aplusSidx&ckx=aplusCkx"></script><script src="//g.alicdn.com/aes/??tracker/1.0.34/index.js,tracker-plugin-pv/2.4.5/index.js,tracker-plugin-event/1.2.5/index.js,tracker-plugin-jserror/1.0.13/index.js,tracker-plugin-api/1.1.14/index.js,tracker-plugin-perf/1.1.8/index.js,tracker-plugin-eventTiming/1.0.4/index.js"></script><title>arthas</title><meta name="description" content="arthas 使用文档">
|
|
|
|
|
<link rel="modulepreload" href="/assets/app.170c6bb7.js"><link rel="modulepreload" href="/assets/arthas3.html.af91179b.js"><link rel="modulepreload" href="/assets/arthas3.html.653e03bd.js"><link rel="prefetch" href="/assets/index.html.027a535c.js"><link rel="prefetch" href="/assets/index.html.f4fc56b4.js"><link rel="prefetch" href="/assets/index.html.4fabef9a.js"><link rel="prefetch" href="/assets/advanced-use.html.a364a077.js"><link rel="prefetch" href="/assets/advice-class.html.1e16b78a.js"><link rel="prefetch" href="/assets/agent.html.ea4b4c17.js"><link rel="prefetch" href="/assets/arthas-properties.html.3c6dd837.js"><link rel="prefetch" href="/assets/async.html.c7f2ec88.js"><link rel="prefetch" href="/assets/auth.html.976ea268.js"><link rel="prefetch" href="/assets/base64.html.0ce179d7.js"><link rel="prefetch" href="/assets/batch-support.html.a8ea483a.js"><link rel="prefetch" href="/assets/cat.html.57193482.js"><link rel="prefetch" href="/assets/classloader.html.1cccb103.js"><link rel="prefetch" href="/assets/cls.html.9cc716a2.js"><link rel="prefetch" href="/assets/commands.html.9b04eeb3.js"><link rel="prefetch" href="/assets/contact-us.html.4b75bb12.js"><link rel="prefetch" href="/assets/dashboard.html.471cdbf0.js"><link rel="prefetch" href="/assets/docker.html.eef4a9b6.js"><link rel="prefetch" href="/assets/download.html.ff354b6f.js"><link rel="prefetch" href="/assets/dump.html.c72d4940.js"><link rel="prefetch" href="/assets/echo.html.49af5ef2.js"><link rel="prefetch" href="/assets/faq.html.75378aba.js"><link rel="prefetch" href="/assets/getstatic.html.dafe19bf.js"><link rel="prefetch" href="/assets/grep.html.1d94643c.js"><link rel="prefetch" href="/assets/groovy.html.982837a9.js"><link rel="prefetch" href="/assets/heapdump.html.770781d7.js"><link rel="prefetch" href="/assets/help.html.509b4db6.js"><link rel="prefetch" href="/assets/history.html.24c98bc1.js"><link rel="prefetch" href="/assets/http-api.html.c0834238.js"><link rel="prefetch" href="/assets/idea-plugin.html.ec624e96.js"><link rel="prefetch" href="/assets/install-detail.html.76d1df70.js"><link rel="prefetch" href="/assets/jad.html.f02068c8.js"><link rel="prefetch" href="/assets/jfr.html.0b62ef92.js"><link rel="prefetch" href="/assets/jvm.html.9b6cb899.js"><link rel="prefetch" href="/assets/keymap.html.a8e445a7.js"><link rel="prefetch" href="/assets/logger.html.635d0790.js"><link rel="prefetch" href="/assets/manual-install.html.c49561b2.js"><link rel="prefetch" href="/assets/mbean.html.c09c879d.js"><link rel="prefetch" href="/assets/mc.html.d9028bda.js"><link rel="prefetch" href="/assets/memory.html.953a0d4f.js"><link rel="prefetch" href="/assets/monitor.html.7df88e93.js"><link rel="prefetch" href="/assets/ognl.html.aa12b486.js"><link rel="prefetch" href="/assets/options.html.0348e01c.js"><link rel="prefetch" href="/assets/perfcounter.html.098c9c9e.js"><link rel="prefetch" href="/assets/profiler.html.8be69b54.js"><link rel="prefetch" href="/assets/pwd.html.713f9c32.js"><link rel="prefetch" href="/assets/quick-start.html.be359054.js"><link rel="prefetch" href="/assets/quit.html.02ca41a5.js"><link rel="prefetch" href="/assets/redefine.html.5a9b270a.js"><link rel="prefetch" href="/assets/release-notes.html.a57b43af.js"><link rel="prefetch" href="/assets/reset.html.9c4606b8.js"><link rel="prefetch" href="/assets/retransform.html.6e43ccc9.js"><link rel="prefetch" href="/assets/save-log.html.8bdd55ac.js"><link rel="prefetch" href="/assets/sc.html.a90007ab.js"><link rel="prefetch" href="/assets/session.html.e6db1dfb.js"><link rel="prefetch" href="/assets/sm.html.24ba31c4.js"><link rel="prefetch" href="/assets/spring-boot-starter.html.b19d8a00.js"><link rel="prefetch" href="/assets/stack.html.466606a8.js"><link rel="prefetch" href="/assets/start-arthas.html.b89051d7.js"><link rel="prefetch" href="/assets/stop.html.31f63c78.js"><link rel="prefetch" href="/assets/sysenv.html.bac684ed.js"><link rel="prefetch" href="/assets/sysprop.html.85801cda.js"><link rel="prefetch" href="/assets/tee.html.2888ae13.js"><link rel="prefetch" href="/assets/thread.html.712d553e.
|
|
|
|
|
<link rel="stylesheet" href="/assets/style.da1934a3.css">
|
|
|
|
|
</head>
|
|
|
|
|
<body>
|
|
|
|
|
<div id="app"><!--[--><div class="theme-container"><!--[--><header class="navbar"><div class="toggle-sidebar-button" title="切换侧边栏" aria-expanded="false" role="button" tabindex="0"><div class="icon" aria-hidden="true"><span></span><span></span><span></span></div></div><span><a href="/" class="" data-v-61144abc><!----><span class="site-name can-hide" data-v-61144abc>arthas</span><span class="navbar-version" data-v-61144abc>v3.7.0</span></a></span><div class="navbar-items-wrapper" style=""><!--[--><!--]--><nav class="navbar-items can-hide"><!--[--><div class="navbar-item"><a href="/" class="" aria-label="首页"><!--[--><!--]--> 首页 <!--[--><!--]--></a></div><div class="navbar-item"><a class="external-link" href="/doc/arthas-tutorials.html?language=cn&id=arthas-basics" rel="noopener noreferrer" target="_blank" aria-label="在线教程"><!--[--><!--]--><span>在线教程</span><span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></div><div class="navbar-item"><a href="/doc/" class="router-link-active" aria-label="文档"><!--[--><!--]--> 文档 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/doc/commands.md" class="" aria-label="命令列表"><!--[--><!--]--> 命令列表 <!--[--><!--]--></a></div><div class="navbar-item"><a href="/doc/download.md" class="" aria-label="下载"><!--[--><!--]--> 下载 <!--[--><!--]--></a></div><div class="navbar-item"><div class="navbar-dropdown-wrapper"><button class="navbar-dropdown-title" type="button" aria-label="解决方案"><span class="title">解决方案</span><span class="arrow down"></span></button><button class="navbar-dropdown-title-mobile" type="button" aria-label="解决方案"><span class="title">解决方案</span><span class="right arrow"></span></button><ul style="display:none;" class="navbar-dropdown"><!--[--><li class="navbar-dropdown-item"><a class="external-link" href="https://cn.aliyun.com/product/aliware/mse?spm=arthas.topbar.0.0.0" rel="noopener noreferrer" target="_blank" aria-label="微服务解决方案"><!--[--><!--]--><span>微服务解决方案</span><span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a class="external-link" href="https://www.aliyun.com/aliware/txc?spm=arthas.topbar.0.0.0" rel="noopener noreferrer" target="_blank" aria-label="分布式事务解决方案"><!--[--><!--]--><span>分布式事务解决方案</span><span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></li><li class="navbar-dropdown-item"><a class="external-link" href="https://www.aliyun.com/product/ahas?spm=artha
|
|
|
|
|
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div></div></div><p>其中<code>"params + ' ' + returnObj"</code>以及<code>params.size()==2</code>背后其实都使用了 groovy 来进行表达式求值,如果反复大量的运行这些表达式,groovy 会创建大量的 classloader,打满 perm 区从而触发 FGC。</p><p>为了避免这个问题,Arthas 3.0 中使用了 ognl 这个更加轻量的表达式求值库来代替 groovy,彻底解决了 groovy 引起的 FGC 风险。但由于这个替换,导致原来使用 groovy 脚本编写的自定义脚本失效。这个问题留待后续解决。</p><p>在 3.0 中,watch 命令的表达式部分的书写有了一些改变,详见<a href="https://arthas.aliyun.com/doc/watch" target="_blank" rel="noopener noreferrer">这里<span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span></a></p><h4 id="提升-rt-统计精度" tabindex="-1"><a class="header-anchor" href="#提升-rt-统计精度" aria-hidden="true">#</a> 提升 rt 统计精度</h4><p>Arthas 2.0 中,统计 rt 都是以<code>ms</code>为单位,对于某些比较小的方法调用,耗时在毫秒以下的都会被认为是 0ms,造成 trace 总时间和各方法的时间相加不一致等问题(虽然这里面确实会有误差,主要 Arthas 自身的开销)。Arthas 3.0 中所有 rt 的单位统一改为使用<code>ns</code>来统计,精准捕获你的方法耗时,让 0ms 这样无意义的统计数据不再出现!</p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>$ tt -l
|
|
|
|
|
INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD
|
|
|
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
|
1000 2017-02-24 10:56:46 808.743525 true false 0x3bd5e918 TestTraceServlet doGet
|
|
|
|
|
1001 2017-02-24 10:56:55 805.799155 true false 0x3bd5e918 TestTraceServlet doGet
|
|
|
|
|
1002 2017-02-24 10:57:04 808.026935 true false 0x3bd5e918 TestTraceServlet doGet
|
|
|
|
|
1003 2017-02-24 10:57:22 805.036963 true false 0x3bd5e918 TestTraceServlet doGet
|
|
|
|
|
1004 2017-02-24 10:57:24 803.581886 true false 0x3bd5e918 TestTraceServlet doGet
|
|
|
|
|
1005 2017-02-24 10:57:39 814.657657 true false 0x3bd5e918 TestTraceServlet doGet
|
|
|
|
|
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="watch-stack-trace-命令支持按耗时过滤" tabindex="-1"><a class="header-anchor" href="#watch-stack-trace-命令支持按耗时过滤" aria-hidden="true">#</a> watch/stack/trace 命令支持按耗时过滤</h4><p>我们在 trace 的时候,经常会出现某个方法间隙性的 rt 飙高,但是我们只想知道 rt 高的时候,是哪里慢了,对于正常 rt 的方法我们并不关心,Arthas 3.0 支持了按<code>#cost</code>(方法执行耗时,单位为<code>ms</code>)进行过滤,只输出符合条件的 trace 路径,目前,这三个命令的相关文档已经做了更新,增加了该用法的示例。</p><h4 id="sysprop-命令操作-systemproperty" tabindex="-1"><a class="header-anchor" href="#sysprop-命令操作-systemproperty" aria-hidden="true">#</a> sysprop 命令操作 SystemProperty</h4><p>sysprop 命令支持查看所有的系统属性,以及针对特定属性进行查看和修改。</p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>$ sysprop
|
|
|
|
|
...
|
|
|
|
|
os.arch x86_64
|
|
|
|
|
java.ext.dirs /Users/wangtao/Library/Java/Extensions:/Library/Java/JavaVirtualMachines/jdk1.
|
|
|
|
|
8.0_51.jdk/Contents/Home/jre/lib/ext:/Library/Java/Extensions:/Network/Library
|
|
|
|
|
/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java
|
|
|
|
|
user.dir /Users/wangtao/work/ali-tomcat-home/ant-develop/output/build
|
|
|
|
|
catalina.vendor alibaba
|
|
|
|
|
line.separator
|
|
|
|
|
|
|
|
|
|
java.vm.name Java HotSpot(TM) 64-Bit Server VM
|
|
|
|
|
file.encoding UTF-8
|
|
|
|
|
org.apache.tomcat.util.http.ServerCookie.ALLOW_EQUA true
|
|
|
|
|
LS_IN_VALUE
|
|
|
|
|
com.taobao.tomcat.info Apache Tomcat/7.0.70.1548
|
|
|
|
|
java.specification.version 1.8
|
|
|
|
|
$ sysprop java.version
|
|
|
|
|
java.version=1.8.0_51
|
|
|
|
|
$ sysprop production.mode true
|
|
|
|
|
Successfully changed the system property.
|
|
|
|
|
production.mode=true
|
|
|
|
|
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="thread-命令支持指定采样时间" tabindex="-1"><a class="header-anchor" href="#thread-命令支持指定采样时间" aria-hidden="true">#</a> thread 命令支持指定采样时间</h4><p>thread 命令计算线程 cpu 占用的逻辑,默认是采样 100ms 内各个线程的 cpu 使用情况并计算 cpu 消耗占比。有时候 100ms 的时间间隔太短,看不出问题所在,Arthas3.0 中 thread 命令支持设置采样间隔(以<code>ms</code>为单位),可以观察任意时间段内的 cpu 消耗占比情况。</p><div class="language-text ext-text line-numbers-mode"><pre class="language-text"><code>$ thread -i 1000
|
|
|
|
|
Threads Total: 74, NEW: 0, RUNNABLE: 17, BLOCKED: 0, WAITING: 15, TIMED_WAITING: 42, TERMINATED: 0
|
|
|
|
|
ID NAME GROUP PRIORITY STATE %CPU TIME INTERRUPTED DAEMON
|
|
|
|
|
78 com.taobao.config.client.timer main 5 TIMED_WAITING 22 0:0 false true
|
|
|
|
|
92 Abandoned connection cleanup thread main 5 TIMED_WAITING 15 0:2 false true
|
|
|
|
|
361 as-command-execute-daemon system 10 RUNNABLE 14 0:0 false true
|
|
|
|
|
67 HSF-Remoting-Timer-10-thread-1 main 10 TIMED_WAITING 12 0:2 false true
|
|
|
|
|
113 JamScheduleThread system 9 TIMED_WAITING 2 0:0 false true
|
|
|
|
|
14 Thread-3 main 5 RUNNABLE 2 0:0 false false
|
|
|
|
|
81 com.taobao.remoting.TimerThread main 5 TIMED_WAITING 2 0:0 false true
|
|
|
|
|
104 http-bio-7001-AsyncTimeout main 5 TIMED_WAITING 2 0:0 false true
|
|
|
|
|
123 nioEventLoopGroup-2-1 system 10 RUNNABLE 2 0:0 false false
|
|
|
|
|
127 nioEventLoopGroup-3-2 system 10 RUNNABLE 2 0:0 false false
|
|
|
|
|
345 nioEventLoopGroup-3-3 system 10 RUNNABLE 2 0:0 false false
|
|
|
|
|
358 nioEventLoopGroup-3-4 system 10 RUNNABLE 2 0:0 false false
|
|
|
|
|
27 qos-boss-1-1 main 5 RUNNABLE 2 0:0 false true
|
|
|
|
|
22 EagleEye-AsyncAppender-Thread-BizLog main 5 TIMED_WAITING 1 0:0 false true
|
|
|
|
|
</code></pre><div class="line-numbers" aria-hidden="true"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="trace-命令自动高亮显示最耗时方法调用" tabindex="-1"><a class="header-anchor" href="#trace-命令自动高亮显示最耗时方法调用" aria-hidden="true">#</a> trace 命令自动高亮显示最耗时方法调用</h4><p>trace 命令现在会自动显示</p><p></p></div><!--[--><!--]--></div><footer class="page-meta right-menu-padding" data-v-fdd717e0><div class="meta-item edit-link"><a class="external-link meta-item-label" href="https://github.com/alibaba/arthas/edit/master/site/docs/doc/arthas3.md" rel="noopener noreferrer" target="_blank" aria-label="在 GitHub 上编辑此页"><!--[--><!--]--><span>在 GitHub 上编辑此页</span><span><svg class="external-link-icon" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewbox="0 0 100 100" width="15" height="15"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path><polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg><span class="external-link-icon-sr-only">在新窗口打开</span></span><!--[--><!--]--></a></div><div class="meta-item last-updated"><span class="meta-item-label">Last Updated: </span><!----></div><div class="meta-item contributors"><span class="meta-item-label">贡献者: </span><span class="meta-item-info"><!--[--><!--[--><span class="contributor" title="email: hengyunabc@gmail.com">hengyunabc</span><!----><!--]--><!--]--></span></div></footer><!----><!--[--><!--]--></main><!--]--></div><!----><!--]--></div>
|
|
|
|
|
<script type="module" src="/assets/app.170c6bb7.js" defer></script>
|
|
|
|
|
</body>
|
|
|
|
|
</html>
|