<!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.49" >
< 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=" > < 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 > Http API | arthas< / title > < meta name = "description" content = "arthas 使用文档" >
< link rel = "modulepreload" href = "/assets/app.e9adadd6.js" > < link rel = "modulepreload" href = "/assets/http-api.html.243550d0.js" > < link rel = "modulepreload" href = "/assets/arthas-web-ui.d97900e6.js" > < link rel = "modulepreload" href = "/assets/http-api.html.8abd260a.js" > < link rel = "prefetch" href = "/assets/index.html.fc6fe773.js" > < link rel = "prefetch" href = "/assets/index.html.303ae9ec.js" > < link rel = "prefetch" href = "/assets/index.html.5be10814.js" > < link rel = "prefetch" href = "/assets/advanced-use.html.80c572ab.js" > < link rel = "prefetch" href = "/assets/advice-class.html.30be8b5c.js" > < link rel = "prefetch" href = "/assets/agent.html.478e63bb.js" > < link rel = "prefetch" href = "/assets/arthas-properties.html.126a2442.js" > < link rel = "prefetch" href = "/assets/arthas3.html.f866a915.js" > < link rel = "prefetch" href = "/assets/async.html.7fc6690f.js" > < link rel = "prefetch" href = "/assets/auth.html.7faa0702.js" > < link rel = "prefetch" href = "/assets/base64.html.91916ad8.js" > < link rel = "prefetch" href = "/assets/batch-support.html.6d8369c7.js" > < link rel = "prefetch" href = "/assets/cat.html.49018237.js" > < link rel = "prefetch" href = "/assets/classloader.html.e5597a48.js" > < link rel = "prefetch" href = "/assets/cls.html.3d057407.js" > < link rel = "prefetch" href = "/assets/commands.html.58e9e974.js" > < link rel = "prefetch" href = "/assets/contact-us.html.e0d74259.js" > < link rel = "prefetch" href = "/assets/dashboard.html.688b447f.js" > < link rel = "prefetch" href = "/assets/docker.html.17503d14.js" > < link rel = "prefetch" href = "/assets/download.html.19809e39.js" > < link rel = "prefetch" href = "/assets/dump.html.35a47ccf.js" > < link rel = "prefetch" href = "/assets/echo.html.81510109.js" > < link rel = "prefetch" href = "/assets/faq.html.e22d74d2.js" > < link rel = "prefetch" href = "/assets/getstatic.html.9ffb9ff2.js" > < link rel = "prefetch" href = "/assets/grep.html.7747b85b.js" > < link rel = "prefetch" href = "/assets/groovy.html.3c2a5669.js" > < link rel = "prefetch" href = "/assets/heapdump.html.98d7b14d.js" > < link rel = "prefetch" href = "/assets/help.html.67db59f7.js" > < link rel = "prefetch" href = "/assets/history.html.f6e93473.js" > < link rel = "prefetch" href = "/assets/idea-plugin.html.68b7d4f4.js" > < link rel = "prefetch" href = "/assets/install-detail.html.666bc4d2.js" > < link rel = "prefetch" href = "/assets/jad.html.a62cf748.js" > < link rel = "prefetch" href = "/assets/jfr.html.fb32b04e.js" > < link rel = "prefetch" href = "/assets/jvm.html.970a2dcd.js" > < link rel = "prefetch" href = "/assets/keymap.html.79b77d01.js" > < link rel = "prefetch" href = "/assets/logger.html.1c7e6fb8.js" > < link rel = "prefetch" href = "/assets/manual-install.html.5992ea2f.js" > < link rel = "prefetch" href = "/assets/mbean.html.07f7548d.js" > < link rel = "prefetch" href = "/assets/mc.html.4a8fe9c1.js" > < link rel = "prefetch" href = "/assets/memory.html.f3395aa5.js" > < link rel = "prefetch" href = "/assets/monitor.html.f16f1733.js" > < link rel = "prefetch" href = "/assets/ognl.html.e96e8461.js" > < link rel = "prefetch" href = "/assets/options.html.f364e3b1.js" > < link rel = "prefetch" href = "/assets/perfcounter.html.5ac9dd17.js" > < link rel = "prefetch" href = "/assets/profiler.html.8b48b000.js" > < link rel = "prefetch" href = "/assets/pwd.html.0881d938.js" > < link rel = "prefetch" href = "/assets/quick-start.html.d22745bc.js" > < link rel = "prefetch" href = "/assets/quit.html.7ac530c1.js" > < link rel = "prefetch" href = "/assets/redefine.html.7a72fe7b.js" > < link rel = "prefetch" href = "/assets/release-notes.html.dd1cd195.js" > < link rel = "prefetch" href = "/assets/reset.html.452a35fa.js" > < link rel = "prefetch" href = "/assets/retransform.html.fbef0997.js" > < link rel = "prefetch" href = "/assets/save-log.html.c6a45ce2.js" > < link rel = "prefetch" href = "/assets/sc.html.6441d65e.js" > < link rel = "prefetch" href = "/assets/session.html.ebfd8261.js" > < link rel = "prefetch" href = "/assets/sm.html.9e10db61.js" > < link rel = "prefetch" href = "/assets/spring-boot-starter.html.c4118b0a.js" > < link rel = "prefetch" href = "/assets/stack.html.9add4cf4.js" > < link rel = "prefetch" href = "/assets/start-arthas.html.bb492515.js" > < link rel = "prefetch" href = "/assets/stop.html.b66bc06b.js" > < link rel = "prefetch" href = "/assets/sysenv.html.26a8e556.js" > < link rel = "prefetch" href = "/assets/sysprop.html.b7e9f6f3.js" > < link rel = "prefetch" href = "/assets/tee.html.a
< link rel = "stylesheet" href = "/assets/style.3627c3cf.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-2aa8cc94 > <!-- --> < span class = "site-name can-hide" data-v-2aa8cc94 > arthas< / span > < span class = "navbar-version" data-v-2aa8cc94 > v3.6.5< / 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
< span class = "token property" > " action" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " exec" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " requestId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " req112" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " sessionId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 94766d3c-8b39-42d3-8596-98aee3ccbefb" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " consumerId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 955dbd1325334a84972b0f3ac19de4f7_2" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " command" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " version" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " execTimeout" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 10000" < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < p > 请求数据格式说明:< / p > < ul > < li > < code > action< / code > : 请求的动作/行为,可选值请参考" 请求 Action" 小节。< / li > < li > < code > requestId< / code > : 可选请求 ID, 由客户端生成。< / li > < li > < code > sessionId< / code > : Arthas 会话 ID, 一次性命令不需要设置会话 ID。< / li > < li > < code > consumerId< / code > : Arthas 消费者 ID, 用于多人共享会话。< / li > < li > < code > command< / code > : Arthas command line 。< / li > < li > < code > execTimeout< / code > : 命令同步执行的超时时间(ms),默认为 30000。< / li > < / ul > < p > 注意: 不同的 action 使用到参数不同,根据具体的 action 来设置参数。< / p > < h3 id = "请求-action" tabindex = "-1" > < a class = "header-anchor" href = "#请求-action" aria-hidden = "true" > #< / a > 请求 Action< / h3 > < p > 目前支持的请求 Action 如下:< / p > < ul > < li > < code > exec< / code > : 同步执行命令,命令正常结束或者超时后中断命令执行后返回命令的执行结果。< / li > < li > < code > async_exec< / code > : 异步执行命令,立即返回命令的调度结果,命令执行结果通过< code > pull_results< / code > 获取。< / li > < li > < code > interrupt_job< / code > : 中断会话当前的命令,类似 Telnet < code > Ctrl + c< / code > 的功能。< / li > < li > < code > pull_results< / code > : 获取异步执行的命令的结果,以 http 长轮询( long-polling) 方式重复执行< / li > < li > < code > init_session< / code > : 创建会话< / li > < li > < code > join_session< / code > : 加入会话,用于支持多人共享同一个 Arthas 会话< / li > < li > < code > close_session< / code > : 关闭会话< / li > < / ul > < h3 id = "响应状态" tabindex = "-1" > < a class = "header-anchor" href = "#响应状态" aria-hidden = "true" > #< / a > 响应状态< / h3 > < p > 响应中的 state 属性表示请求处理状态,取值如下:< / p > < ul > < li > < code > SCHEDULED< / code > :异步执行命令时表示已经创建 job 并已提交到命令执行队列,命令可能还没开始执行或者执行中;< / li > < li > < code > SUCCEEDED< / code > :请求处理成功(完成状态);< / li > < li > < code > FAILED< / code > :请求处理失败(完成状态),通常附带 message 说明原因;< / li > < li > < code > REFUSED< / code > :请求被拒绝(完成状态),通常附带 message 说明原因;< / li > < / ul > < h2 id = "一次性命令" tabindex = "-1" > < a class = "header-anchor" href = "#一次性命令" aria-hidden = "true" > #< / a > 一次性命令< / h2 > < p > 与执行批处理命令类似,一次性命令以同步方式执行。不需要创建会话,不需要设置< code > sessionId< / code > 选项。< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " action" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " exec" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " command" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " < Arthas command line> " < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < p > 比如获取 Arthas 版本号:< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > '
{
" action" :" exec" ,
" command" :" version"
}
' < / span >
< / 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 > < / div > < p > 响应内容如下:< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SUCCEEDED" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " sessionId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " ee3bc004-4586-43de-bac0-b69d6db7a869" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " body" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " results" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " version" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " version" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 3.3.7" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 5< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 5< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " statusCode" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " status" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " timeExpired" < / span > < span class = "token operator" > :< / span > < span class = "token boolean" > false< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " command" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " version" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobStatus" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " TERMINATED" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 5< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span >
< / 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 class = "line-number" > < / div > < / div > < / div > < p > 响应数据解析:< / p > < ul > < li > < code > state< / code > : 请求处理状态,参考“接口响应状态”说明< / li > < li > < code > sessionId < / code > : Arthas 会话 ID, 一次性命令自动创建及销毁临时会话< / li > < li > < code > body.jobId< / code > : 命令的任务 ID, 同一任务输出的所有 Result 都是相同的 jobId< / li > < li > < code > body.jobStatus< / code > : 任务状态,同步执行正常结束为< code > TERMINATED < / code > < / li > < li > < code > body.timeExpired< / code > : 任务执行是否超时< / li > < li > < code > body/results< / code > : 命令执行的结果列表< / li > < / ul > < p > < strong > 命令结果格式说明< / strong > < / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > [< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " version" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " version" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 3.3.7" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 5< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 5< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " statusCode" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " status" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > ]< / span >
< / 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 > < / div > < ul > < li > < code > type< / code > : 命令结果类型,除了< code > status< / code > 等特殊的几个外,其它的保持与 Arthas 命令名称一致。请参考" < a href = "#special_command_results" > 特殊命令结果< / a > " 小节。< / li > < li > < code > jobId< / code > : 处理命令的任务 ID。< / li > < li > 其它字段为每个不同命令的数据。< / li > < / ul > < p > 注意:也可以使用一次性命令的方式执行 watch/trace 等连续输出的命令,但不能中断命令执行,可能出现长时间没有结束的问题。请参考" < a href = "#change_watch_value_to_map" > watch 命令输出 map 对象< / a > " 小节的示例。< / p > < p > 请尽量按照以下方式处理:< / p > < ul > < li > 设置合理的< code > execTimeout< / code > ,到达超时时间后强制中断命令执行,避免长时间挂起。< / li > < li > 通过< code > -n< / code > 参数指定较少的执行次数。< / li > < li > 保证命令匹配的方法可以成功命中和 condition-express 编写正确,如果 watch/trace 没有命中就算指定< code > -n 1< / code > 也会挂起等待到执行超时。< / li > < / ul > < h2 id = "会话交互" tabindex = "-1" > < a class = "header-anchor" href = "#会话交互" aria-hidden = "true" > #< / a > 会话交互< / h2 > < p > 由用户创建及管理 Arthas 会话,适用于复杂的交互过程。访问流程如下:< / p > < ul > < li > 创建会话< / li > < li > 加入会话(可选)< / li > < li > 拉取命令结果< / li > < li > 执行一系列命令< / li > < li > 中断命令执行< / li > < li > 关闭会话< / li > < / ul > < h3 id = "创建会话" tabindex = "-1" > < a class = "header-anchor" href = "#创建会话" aria-hidden = "true" > #< / a > 创建会话< / h3 > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > '
{
" action" :" init_session"
}
' < / span >
< / 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 > < / div > < p > 响应结果:< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " sessionId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " b09f1353-202c-407b-af24-701b744f971e" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " consumerId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 5ae4e5fbab8b4e529ac404f260d4e2d1_1" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SUCCEEDED" < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < p > 当前会话 ID 为: < code > b09f1353-202c-407b-af24-701b744f971e< / code > , 当前消费者 ID 为:< code > 5ae4e5fbab8b4e529ac404f260d4e2d1_1 < / code > 。< / p > < h3 id = "加入会话" tabindex = "-1" > < a class = "header-anchor" href = "#加入会话" aria-hidden = "true" > #< / a > 加入会话< / h3 > < p > 指定要加入的会话 ID, 服务端将分配一个新的消费者 ID。多个消费者可以接收到同一个会话的命令结果。本接口用于支持多人共享同一个会话或刷新页面后重新拉取会话历史记录。< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > '
{
" action" :" join_session" ,
" sessionId" : " b09f1353-202c-407b-af24-701b744f971e"
}
' < / span >
< / 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 > < / div > < p > 响应结果:< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " consumerId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 8f7f6ad7bc2d4cb5aa57a530927a95cc_2" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " sessionId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " b09f1353-202c-407b-af24-701b744f971e" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SUCCEEDED" < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < p > 新的消费者 ID 为< code > 8f7f6ad7bc2d4cb5aa57a530927a95cc_2 < / code > 。< / p > < h3 id = "拉取命令结果" tabindex = "-1" > < a class = "header-anchor" href = "#拉取命令结果" aria-hidden = "true" > #< / a > 拉取命令结果< / h3 > < p > 拉取命令结果消息的 action 为< code > pull_results< / code > 。请使用 Http long-polling 方式,定时循环拉取结果消息。 消费者的超时时间为 5 分钟,超时后需要调用< code > join_session< / code > 分配新的消费者。每个消费者单独分配一个缓存队列,按顺序拉取命令结果,不会影响到其它消费者。< / p > < p > 请求参数需要指定会话 ID 及消费者 ID:< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > '
{
" action" :" pull_results" ,
" sessionId" : " b09f1353-202c-407b-af24-701b744f971e" ,
" consumerId" : " 8f7f6ad7bc2d4cb5aa57a530927a95cc_2"
}
' < / span >
< / 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 > < / div > < p > 用 Bash 脚本定时拉取结果消息:< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token keyword" > while< / span > < span class = "token boolean" > true< / span > < span class = "token punctuation" > ;< / span > < span class = "token keyword" > do< / span > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > '
{
" action" :" pull_results" ,
" sessionId" : " 2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" ,
" consumerId" : " 8ecb9cb7c7804d5d92e258b23d5245cc_1"
}
' < / span > < span class = "token operator" > |< / span > json_pp< span class = "token punctuation" > ;< / span > < span class = "token function" > sleep< / span > < span class = "token number" > 2< / span > < span class = "token punctuation" > ;< / span > < span class = "token keyword" > done< / span >
< / 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 > < / div > < p > 注: < code > json_pp< / code > 工具将输出内容格式化为 pretty json。< / p > < p > 响应内容如下:< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " body" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " results" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " inputStatus" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " DISABLED" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " input_status" < / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " message" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " message" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " Welcome to arthas!" < / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " tutorials" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " https://arthas.aliyun.com/doc/arthas-tutorials.html" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " time" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 2020-08-06 15:56:43" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " welcome" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " pid" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 7909" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " wiki" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " https://arthas.aliyun.com/doc" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " version" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 3.3.7" < / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " inputStatus" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " ALLOW_INPUT" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " input_status" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " sessionId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " b09f1353-202c-407b-af24-701b744f971e" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " consumerId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 8f7f6ad7bc2d4cb5aa57a530927a95cc_2" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SUCCEEDED" < / span >
< span class = "token punctuation" > }< / span >
< / 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 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 > < h3 id = "异步执行命令" tabindex = "-1" > < a class = "header-anchor" href = "#异步执行命令" aria-hidden = "true" > #< / a > 异步执行命令< / h3 > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > ' ' < / span > '
< span class = "token punctuation" > {< / span >
< span class = "token string" > " action" < / span > < span class = "token builtin class-name" > :< / span > < span class = "token string" > " async_exec" < / span > ,
< span class = "token string" > " command" < / span > < span class = "token builtin class-name" > :< / span > < span class = "token string" > " watch demo.MathGame primeFactors < span class = "token entity" title = "\"" > \" < / span > {params, returnObj, throwExp}< span class = "token entity" title = "\"" > \" < / span > " < / span > ,
< span class = "token string" > " sessionId" < / span > < span class = "token builtin class-name" > :< / span > < span class = "token string" > " 2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token string" > ' ' < / span > '
< / 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 > < / div > < p > < code > async_exec< / code > 的结果:< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " sessionId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SCHEDULED" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " body" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " jobStatus" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " READY" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " command" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " watch demo.MathGame primeFactors \" {params, returnObj, throwExp}\" " < / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span >
< / 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 > < ul > < li > < code > state< / code > : < code > SCHEDULED< / code > 状态表示已经解析命令生成任务,但未开始执行。< / li > < li > < code > body.jobId< / code > : 异步执行命令的任务 ID, 可以根据此任务 ID 来过滤在< code > pull_results< / code > 输出的命令结果。< / li > < li > < code > body.jobStatus< / code > : 任务状态< code > READY< / code > 表示未开始执行。< / li > < / ul > < p > 查看上面自动拉取结果消息脚本的 shell 输出:< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " body" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " results" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " command" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SCHEDULED" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " command" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " watch demo.MathGame primeFactors \" {params, returnObj, throwExp}\" " < / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " inputStatus" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " ALLOW_INTERRUPT" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " input_status" < / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " success" < / span > < span class = "token operator" > :< / span > < span class = "token boolean" > true< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " effect" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " listenerId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " cost" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 24< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " classCount" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 1< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " methodCount" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 1< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " enhancer" < / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " sizeLimit" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 10485760< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " expand" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 1< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " watch" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " cost" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0.071499< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " ts" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 1596703453237< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " value" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token punctuation" > [< / span >
< span class = "token number" > -170365< / span >
< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token null keyword" > null< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " stackTrace" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " className" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " demo.MathGame" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " classLoaderName" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " app" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " methodName" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " primeFactors" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " nativeMethod" < / span > < span class = "token operator" > :< / span > < span class = "token boolean" > false< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " lineNumber" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 46< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " fileName" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " MathGame.java" < / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
...
< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " localizedMessage" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " number is: -170365, need > = 2" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " @type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " java.lang.IllegalArgumentException" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " message" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " number is: -170365, need > = 2" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " watch" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " cost" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0.033375< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " ts" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 1596703454241< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " value" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token punctuation" > [< / span >
< span class = "token number" > 1< / span >
< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > [< / span >
< span class = "token number" > 2< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 2< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 2< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 2< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 13< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 491< / span >
< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token null keyword" > null< / span >
< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " sizeLimit" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 10485760< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " expand" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 1< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " consumerId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 8ecb9cb7c7804d5d92e258b23d5245cc_1" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " sessionId" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " 2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SUCCEEDED" < / span >
< span class = "token punctuation" > }< / span >
< / 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 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 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 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 > < p > watch 命令结果的< code > value< / code > 为 watch-experss 的值,上面命令中为< code > {params, returnObj, throwExp}< / code > ,所以 watch 结果的 value 为一个长度为 3 的数组,每个元素分别对应相应顺序的表达式。 请参考" < a href = "#change_watch_value_to_map" > watch 命令输出 map 对象< / a > " 小节。< / p > < h3 id = "中断命令执行" tabindex = "-1" > < a class = "header-anchor" href = "#中断命令执行" aria-hidden = "true" > #< / a > 中断命令执行< / h3 > < p > 中断会话正在运行的前台 Job( 前台任务) : < / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > ' ' < / span > '
< span class = "token punctuation" > {< / span >
< span class = "token string" > " action" < / span > < span class = "token builtin class-name" > :< / span > < span class = "token string" > " interrupt_job" < / span > ,
< span class = "token string" > " sessionId" < / span > < span class = "token builtin class-name" > :< / span > < span class = "token string" > " 2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token string" > ' ' < / span > '
< / 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 > < / div > < div class = "language-text ext-text line-numbers-mode" > < pre class = "language-text" > < code > {
" state" : " SUCCEEDED" ,
" body" : {
" jobStatus" : " TERMINATED" ,
" jobId" : 3
}
}
< / 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 > < / div > < h3 id = "关闭会话" tabindex = "-1" > < a class = "header-anchor" href = "#关闭会话" aria-hidden = "true" > #< / a > 关闭会话< / h3 > < p > 指定会话 ID, 关闭会话。< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > ' ' < / span > '
< span class = "token punctuation" > {< / span >
< span class = "token string" > " action" < / span > < span class = "token builtin class-name" > :< / span > < span class = "token string" > " close_session" < / span > ,
< span class = "token string" > " sessionId" < / span > < span class = "token builtin class-name" > :< / span > < span class = "token string" > " 2b085b5d-883b-4914-ab35-b2c5c1d5aa2a" < / span >
< span class = "token punctuation" > }< / span >
< span class = "token string" > ' ' < / span > '
< / 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 > < / div > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SUCCEEDED" < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < h2 id = "鉴权" tabindex = "-1" > < a class = "header-anchor" href = "#鉴权" aria-hidden = "true" > #< / a > 鉴权< / h2 > < p > 参考: < a href = "/doc/auth.html" class = "" > auth< / a > < / p > < h2 id = "web-ui" tabindex = "-1" > < a class = "header-anchor" href = "#web-ui" aria-hidden = "true" > #< / a > Web UI< / h2 > < p > < img src = "/images/arthas-web-ui.png" alt = "" title = "arthas web ui" > < / p > < p > 一个基于 Http API 接口实现的 Web UI, 访问地址为: < a href = "http://127.0.0.1:8563/ui" target = "_blank" rel = "noopener noreferrer" > http://127.0.0.1:8563/ui< 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 > < p > 已实现功能:< / p > < ul > < li > 创建会话< / li > < li > 复制并打开 url 加入会话,多人共享会话< / li > < li > 周期性拉取会话命令结果消息< / li > < li > 刷新页面或者加入会话拉取会话历史命令消息< / li > < li > 输入命令/中断命令状态控制< / li > < / ul > < p > 待开发功能:< / p > < ul > < li > 改进将命令结果消息可读性< / li > < li > 命令输入支持自动完成及命令模板< / li > < li > 提供命令帮助< / li > < li > 支持个人选项设置< / li > < / ul > < p > < a id = "special_command_results" > < / a > < / p > < h2 id = "特殊命令结果" tabindex = "-1" > < a class = "header-anchor" href = "#特殊命令结果" aria-hidden = "true" > #< / a > 特殊命令结果< / h2 > < h3 id = "status" tabindex = "-1" > < a class = "header-anchor" href = "#status" aria-hidden = "true" > #< / a > status< / h3 > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 5< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " statusCode" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " status" < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < p > < code > type< / code > 为< code > status< / code > 表示命令执行状态:< / p > < p > 每个命令执行结束后都有唯一一个 status 结果。< code > statusCode< / code > 为 0 表示执行成功,< code > statusCode< / code > 为非 0 值表示执行失败,类似进程退出码(exit code)。< / p > < p > 命令执行失败时一般会提供错误消息,如:< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " message" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " The argument ' class-pattern' is required" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " statusCode" < / span > < span class = "token operator" > :< / span > < span class = "token number" > -10< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " status" < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < h3 id = "input-status" tabindex = "-1" > < a class = "header-anchor" href = "#input-status" aria-hidden = "true" > #< / a > input_status< / h3 > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " inputStatus" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " ALLOW_INPUT" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " input_status" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 0< / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < p > < code > type< / code > 为< code > input_status< / code > 表示输入状态:< / p > < p > 用于 UI 交互时控制用户输入,每次执行命令前后会发送改变的消息。 < code > inputStatus< / code > 的值说明:< / p > < ul > < li > < code > ALLOW_INPUT< / code > : 允许用户输入命令,表示会话没有在执行的前台命令,可以接受新的命令。< / li > < li > < code > ALLOW_INTERRUPT< / code > : 允许用户中断命令执行,表示当前正在执行命令,用户可以发送< code > interrupt_job< / code > 中断执行。< / li > < li > < code > DISABLED< / code > : 禁用状态,不能输入命令也不能中断命令。< / li > < / ul > < h3 id = "command" tabindex = "-1" > < a class = "header-anchor" href = "#command" aria-hidden = "true" > #< / a > command< / h3 > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " command" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " state" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " SCHEDULED" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " command" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " watch demo.MathGame primeFactors \" {params, returnObj, throwExp}\" " < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < p > < code > type< / code > 为< code > command< / code > 表示输入的命令数据:< / p > < p > 用于交互 UI 回显用户输入的命令,拉取的会话命令消息历史会包含< code > command< / code > 类型的消息,按顺序处理即可。< / p > < h3 id = "enhancer" tabindex = "-1" > < a class = "header-anchor" href = "#enhancer" aria-hidden = "true" > #< / a > enhancer< / h3 > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " success" < / span > < span class = "token operator" > :< / span > < span class = "token boolean" > true< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " jobId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " effect" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " listenerId" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 3< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " cost" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 24< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " classCount" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 1< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " methodCount" < / span > < span class = "token operator" > :< / span > < span class = "token number" > 1< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " enhancer" < / span >
< span class = "token punctuation" > }< / span >
< / 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 > < / div > < p > < code > type< / code > 为< code > enhancer< / code > 表示类增强结果:< / p > < p > < code > trace/watch/jad/tt< / code > 等命令需要对类进行增强,会接收到这个< code > enhancer< / code > 结果。可能出现< code > enhancer< / code > 结果成功,但没有命中方法的情况,客户端可以根据< code > enhancer< / code > 结果提示用户。< / p > < h2 id = "案例" tabindex = "-1" > < a class = "header-anchor" href = "#案例" aria-hidden = "true" > #< / a > 案例< / h2 > < h3 id = "获取-java-应用的-classpath" tabindex = "-1" > < a class = "header-anchor" href = "#获取-java-应用的-classpath" aria-hidden = "true" > #< / a > 获取 Java 应用的 Classpath< / h3 > < p > 通过 Http api 查询 Java 应用的 System properties, 提取< code > java.class.path< / code > 的值。< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token assign-left variable" > json_data< / span > < span class = "token operator" > =< / span > < span class = "token variable" > < span class = "token variable" > $(< / span > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d < span class = "token string" > '
{
" action" :" exec" ,
" command" :" sysprop"
}' < / span > < span class = "token variable" > )< / span > < / span >
< / 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 > < / div > < ul > < li > 使用< code > sed< / code > 提取值:< / li > < / ul > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token assign-left variable" > class_path< / span > < span class = "token operator" > =< / span > < span class = "token variable" > < span class = "token variable" > $(< / span > < span class = "token builtin class-name" > echo< / span > $json_data < span class = "token operator" > |< / span > < span class = "token function" > tr< / span > -d < span class = "token string" > ' \n' < / span > < span class = "token operator" > |< / span > < span class = "token function" > sed< / span > < span class = "token string" > ' s/.*" java.class.path" :" \([^" ]*\).*/\1/' < / span > < span class = "token variable" > )< / span > < / span >
< span class = "token builtin class-name" > echo< / span > < span class = "token string" > " classpath: < span class = "token variable" > $class_path< / span > " < / span >
< / code > < / pre > < div class = "line-numbers" aria-hidden = "true" > < div class = "line-number" > < / div > < div class = "line-number" > < / div > < / div > < / div > < ul > < li > 使用< code > json_pp/awk< / code > 提取值< / li > < / ul > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token assign-left variable" > class_path< / span > < span class = "token operator" > =< / span > < span class = "token variable" > < span class = "token variable" > $(< / span > < span class = "token builtin class-name" > echo< / span > $json_data < span class = "token operator" > |< / span > < span class = "token function" > tr< / span > -d < span class = "token string" > ' \n' < / span > < span class = "token operator" > |< / span > json_pp < span class = "token operator" > |< / span > < span class = "token function" > grep< / span > java.class.path < span class = "token operator" > |< / span > < span class = "token function" > awk< / span > -F< span class = "token string" > ' " ' < / span > < span class = "token string" > ' { print $4 }' < / span > < span class = "token variable" > )< / span > < / span >
< span class = "token builtin class-name" > echo< / span > < span class = "token string" > " classpath: < span class = "token variable" > $class_path< / span > " < / span >
< / code > < / pre > < div class = "line-numbers" aria-hidden = "true" > < div class = "line-number" > < / div > < div class = "line-number" > < / div > < / div > < / div > < p > 输出内容:< / p > < div class = "language-text ext-text line-numbers-mode" > < pre class = "language-text" > < code > classpath: demo-arthas-spring-boot.jar
< / code > < / pre > < div class = "line-numbers" aria-hidden = "true" > < div class = "line-number" > < / div > < / div > < / div > < p > 注意:< / p > < ul > < li > < code > echo $json_data | tr -d ' \n' < / code > : 删除换行符(< code > line.separator< / code > 的值),避免影响< code > sed< / code > /< code > json_pp< / code > 命令处理。< / li > < li > < code > awk -F' " ' ' { print $4 }' < / code > : 使用双引号作为分隔符号< / li > < / ul > < p > < a id = "change_watch_value_to_map" > < / a > < / p > < h3 id = "watch-命令输出-map-对象" tabindex = "-1" > < a class = "header-anchor" href = "#watch-命令输出-map-对象" aria-hidden = "true" > #< / a > watch 命令输出 map 对象< / h3 > < p > watch 的结果值由计算< code > watch-express< / code > ognl 表达式产生,可以通过改变 ognl 表达式来生成想要的值,请参考< a href = "https://commons.apache.org/proper/commons-ognl/language-guide.html" target = "_blank" rel = "noopener noreferrer" > OGNL 文档< 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 > < div class = "custom-container tip" > < p class = "custom-container-title" > 提示< / p > < p > Maps can also be created using a special syntax.< / p > < p > #{ " foo" : " foo value" , " bar" : " bar value" }< / p > < p > This creates a Map initialized with mappings for " foo" and " bar" .< / p > < / div > < p > 下面的命令生成 map 格式的值:< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > watch< / span > *MathGame prime* < span class = "token string" > ' #{ " params" : params, " returnObj" : returnObj, " throwExp" : throwExp}' < / span > -x < span class = "token number" > 2< / span > -n < span class = "token number" > 5< / span >
< / code > < / pre > < div class = "line-numbers" aria-hidden = "true" > < div class = "line-number" > < / div > < / div > < / div > < p > 在 Telnet shell/WebConsole 中执行上面的命令,输出的结果:< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token assign-left variable" > ts< / span > < span class = "token operator" > =< / span > < span class = "token number" > 2020< / span > -08-06 < span class = "token number" > 16< / span > :57:20< span class = "token punctuation" > ;< / span > < span class = "token punctuation" > [< / span > cost< span class = "token operator" > =< / span > < span class = "token number" > 0< / span > .241735ms< span class = "token punctuation" > ]< / span > < span class = "token assign-left variable" > result< / span > < span class = "token operator" > =< / span > @LinkedHashMap< span class = "token punctuation" > [< / span >
@String< span class = "token punctuation" > [< / span > params< span class = "token punctuation" > ]< / span > :@Object< span class = "token punctuation" > [< / span > < span class = "token punctuation" > ]< / span > < span class = "token punctuation" > [< / span >
@Integer< span class = "token punctuation" > [< / span > < span class = "token number" > 1< / span > < span class = "token punctuation" > ]< / span > ,
< span class = "token punctuation" > ]< / span > ,
@String< span class = "token punctuation" > [< / span > returnObj< span class = "token punctuation" > ]< / span > :@ArrayList< span class = "token punctuation" > [< / span >
@Integer< span class = "token punctuation" > [< / span > < span class = "token number" > 2< / span > < span class = "token punctuation" > ]< / span > ,
@Integer< span class = "token punctuation" > [< / span > < span class = "token number" > 241< / span > < span class = "token punctuation" > ]< / span > ,
@Integer< span class = "token punctuation" > [< / span > < span class = "token number" > 379< / span > < span class = "token punctuation" > ]< / span > ,
< span class = "token punctuation" > ]< / span > ,
@String< span class = "token punctuation" > [< / span > throwExp< span class = "token punctuation" > ]< / span > :null,
< span class = "token punctuation" > ]< / span >
< / 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 > < / div > < p > 用 Http api 执行上面的命令,注意对 JSON 双引号转义:< / p > < div class = "language-bash ext-sh line-numbers-mode" > < pre class = "language-bash" > < code > < span class = "token function" > curl< / span > -Ss -XPOST http://localhost:8563/api -d @- < span class = "token operator" > < < < / span > < span class = "token string" > EOF
{
" action" :" exec" ,
" execTimeout" : 30000,
" command" :" watch *MathGame prime* ' #{ < span class = "token entity" title = "\"" > \" < / span > params< span class = "token entity" title = "\"" > \" < / span > : params, < span class = "token entity" title = "\"" > \" < / span > returnObj< span class = "token entity" title = "\"" > \" < / span > : returnObj, < span class = "token entity" title = "\"" > \" < / span > throwExp< span class = "token entity" title = "\"" > \" < / span > : throwExp}' -n 3 "
}
EOF< / span >
< / 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 > < / div > < p > Http api 执行结果:< / p > < div class = "language-json ext-json line-numbers-mode" > < pre class = "language-json" > < code > < span class = "token punctuation" > {< / span >
< span class = "token property" > " body" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
...
< span class = "token property" > " results" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
...
< span class = "token punctuation" > {< / span >
...
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " watch" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " value" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " params" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token number" > 1< / span >
< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " returnObj" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token number" > 2< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 5< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 17< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 23< / span > < span class = "token punctuation" > ,< / span >
< span class = "token number" > 23< / span >
< span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
< span class = "token punctuation" > {< / span >
...
< span class = "token property" > " type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " watch" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " value" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " params" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
< span class = "token number" > -98278< / span >
< span class = "token punctuation" > ]< / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " throwExp" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > {< / span >
< span class = "token property" > " @type" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " java.lang.IllegalArgumentException" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " localizedMessage" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " number is: -98278, need > = 2" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " message" < / span > < span class = "token operator" > :< / span > < span class = "token string" > " number is: -98278, need > = 2" < / span > < span class = "token punctuation" > ,< / span >
< span class = "token property" > " stackTrace" < / span > < span class = "token operator" > :< / span > < span class = "token punctuation" > [< / span >
...
< span class = "token punctuation" > ]< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span >
< span class = "token punctuation" > }< / span > < span class = "token punctuation" > ,< / span >
...
< span class = "token punctuation" > }< / span >
< / 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 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 > < p > 可以看到 watch 结果的 value 变成 map 对象,程序可以通过 key 读取结果。< / p > < / div > <!-- [ --> <!-- ] --> < / div > < footer class = "page-meta right-menu-padding" data-v-8e2a76de > < div class = "meta-item edit-link" > < a class = "external-link meta-item-label" href = "https://github.com/alibaba/arthas/edit/master/site/docs/doc/http-api.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 class = "contributor" title = "email: kylixs@qq.com" > gongdewei< / span > <!-- [ --> , <!-- ] --> <!-- ] --> <!-- [ --> < span class = "contributor" title = "email: i@fatpandac.com" > Fatpandac< / span > <!-- [ --> , <!-- ] --> <!-- ] --> <!-- [ --> < span class = "contributor" title = "email: hollowman186@vip.qq.com" > Hollow Man< / span > <!-- --> <!-- ] --> <!-- ] --> < / span > < / div > < / footer > < nav class = "page-nav right-menu-padding" data-v-8e2a76de > < p class = "inner" > < span class = "prev" > < a href = "/doc/tunnel.html" class = "" aria-label = "Arthas Tunnel" > <!-- [ --> <!-- ] --> Arthas Tunnel <!-- [ --> <!-- ] --> < / a > < / span > < span class = "next" > < a href = "/doc/docker.html" class = "" aria-label = "Docker" > <!-- [ --> <!-- ] --> Docker <!-- [ --> <!-- ] --> < / a > < / span > < / p > < / nav > <!-- [ --> <!-- ] --> < / main > <!-- ] --> < / div > <!-- --> <!-- ] --> < / div >
< script type = "module" src = "/assets/app.e9adadd6.js" defer > < / script >
< / body >
< / html >