diff --git a/site/src/site/sphinx/Home.md b/site/src/site/sphinx/Home.md index 472f6cca0..49cd6a966 100644 --- a/site/src/site/sphinx/Home.md +++ b/site/src/site/sphinx/Home.md @@ -42,7 +42,7 @@ curl -L TODO /install.sh | sh `./as.sh` -执行该脚本的用户需要和目标进程具有相同的权限。在公司内部通常需要使用admin用户执行。 +执行该脚本的用户需要和目标进程具有相同的权限。比如以`admin`用户来执行: `sudo su admin && ./as.sh` 或 `sudo -u admin -EH ./as.sh` @@ -57,31 +57,31 @@ curl -L TODO /install.sh | sh #### 想快速了解系统、应用运行状况 --- -* [dashboard](cmds/dashboard)——当前系统的实时数据面板 -* [thread](cmds/thread)——查看当前 JVM 的线程堆栈信息 -* [jvm](cmds/jvm)——查看当前 JVM 的信息 -* [sysprop](cmds/sysprop)——查看和修改JVM的系统属性 -* **New!** [getstatic](cmds/getstatic)——查看类的静态属性 +* [dashboard](dashboard)——当前系统的实时数据面板 +* [thread](thread)——查看当前 JVM 的线程堆栈信息 +* [jvm](jvm)——查看当前 JVM 的信息 +* [sysprop](sysprop)——查看和修改JVM的系统属性 +* **New!** [getstatic](getstatic)——查看类的静态属性 #### 类、方法冲突、class文件、classloader继承问题等 --- -* [sc](cmds/sc)——查看JVM已加载的类信息 -* [sm](cmds/sm)——查看已加载类的方法信息 -* [dump](cmds/dump)——dump 已加载类的 byte code 到特定目录 -* [redefine](cmds/redefine)——加载外部的`.class`文件,redefine到JVM里 -* [jad](cmds/jad)——反编译指定已加载类的源码 -* [classloader](cmds/classloader)——查看classloader的继承树,urls,类加载信息,使用classloader去getResource +* [sc](sc)——查看JVM已加载的类信息 +* [sm](sm)——查看已加载类的方法信息 +* [dump](dump)——dump 已加载类的 byte code 到特定目录 +* [redefine](redefine)——加载外部的`.class`文件,redefine到JVM里 +* [jad](jad)——反编译指定已加载类的源码 +* [classloader](classloader)——查看classloader的继承树,urls,类加载信息,使用classloader去getResource #### 查看方法执行参数、异常、返回值、调用路径等 > 非常重要,请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 `shutdown` 或将增强过的类执行 `reset` 命令。 -* [monitor](cmds/monitor)——方法执行监控 -* [watch](cmds/watch)——方法执行数据观测 -* [trace](cmds/trace)——方法内部调用路径,并输出方法路径上的每个节点上耗时 -* [stack](cmds/stack)——输出当前方法被调用的调用路径 -* [tt](cmds/tt)——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 +* [monitor](monitor)——方法执行监控 +* [watch](watch)——方法执行数据观测 +* [trace](trace)——方法内部调用路径,并输出方法路径上的每个节点上耗时 +* [stack](stack)——输出当前方法被调用的调用路径 +* [tt](tt)——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 #### options @@ -92,11 +92,11 @@ curl -L TODO /install.sh | sh * help——查看命令帮助信息 * cls——清空当前屏幕区域 * session——查看当前会话的信息 -* [reset](cmds/reset)——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 +* [reset](reset)——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 * version——输出当前目标 Java 进程所加载的 Arthas 版本号 * quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 * shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出 -* [keymap](cmds/keymap)——Arthas快捷键列表及自定义快捷键 +* [keymap](keymap)——Arthas快捷键列表及自定义快捷键 #### 管道 @@ -108,7 +108,7 @@ Arthas支持使用管道对上述命令的结果进行进一步的处理,如`s #### 后台异步任务 -当线上出现偶发的问题,比如需要watch某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考[这里](async) +当线上出现偶发的问题,比如需要watch某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考[这里](async.md) * 使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session断开不影响任务执行(生命周期默认为1天) * jobs——列出所有job @@ -122,9 +122,9 @@ TODO ### 5. 其他特性说明 -* [异步命令支持](async) -* [执行结果存日志](cmds/options) -* [批处理的支持](batch-support) +* [异步命令支持](async.md) +* [执行结果存日志](options.md) +* [批处理的支持](batch-support.md) * [ognl表达式的用法说明](TODO/articles/92448) ### 6. 用户使用案例 diff --git a/site/src/site/sphinx/SUMMARY.md b/site/src/site/sphinx/SUMMARY.md index e79a11b92..6b3dfbcb5 100644 --- a/site/src/site/sphinx/SUMMARY.md +++ b/site/src/site/sphinx/SUMMARY.md @@ -1,17 +1,17 @@ * 命令使用 - * [系统指标](cmds/dashboard) - * [线程堆栈](cmds/thread) - * [JVM信息](cmds/jvm) - * [查看类信息](cmds/sc) - * [查看方法信息](cmds/sm) - * [dump字节码](cmds/dump) - * [反编译类](cmds/jad) - * [查看类加载信息](cmds/classloader) - * [方法执行监控](cmds/monitor) - * [方法AOP观测](cmds/watch) - * [方法内部路径耗时](cmds/trace) - * [查看方法调用栈](cmds/stack) - * [方法执行记录与回放](cmds/tt) + * [系统指标](dashboard) + * [线程堆栈](thread) + * [JVM信息](jvm) + * [查看类信息](sc) + * [查看方法信息](sm) + * [dump字节码](dump) + * [反编译类](jad) + * [查看类加载信息](classloader) + * [方法执行监控](monitor) + * [方法AOP观测](watch) + * [方法内部路径耗时](trace) + * [查看方法调用栈](stack) + * [方法执行记录与回放](tt) * [启动脚本说明](start-arthas) * [Release Notes](release-notes) * 常见问题 diff --git a/site/src/site/sphinx/SUMMARY_EN.md b/site/src/site/sphinx/SUMMARY_EN.md deleted file mode 100644 index 77cd80b0f..000000000 --- a/site/src/site/sphinx/SUMMARY_EN.md +++ /dev/null @@ -1,3 +0,0 @@ -* [Introduction](introduction) -* [Features](features) -* [FAQ](faq-en) \ No newline at end of file diff --git a/site/src/site/sphinx/advanced-use.md b/site/src/site/sphinx/advanced-use.md new file mode 100644 index 000000000..9eb68d54b --- /dev/null +++ b/site/src/site/sphinx/advanced-use.md @@ -0,0 +1,75 @@ +进阶使用 +=== + +## 基础命令 + + +* help——查看命令帮助信息 +* cls——清空当前屏幕区域 +* session——查看当前会话的信息 +* [reset](reset.md)——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 +* version——输出当前目标 Java 进程所加载的 Arthas 版本号 +* quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 +* shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出 +* [keymap](keymap.md)——Arthas快捷键列表及自定义快捷键 + +## jvm相关 + + +* [dashboard](dashboard.md)——当前系统的实时数据面板 +* [thread](thread.md)——查看当前 JVM 的线程堆栈信息 +* [jvm](jvm.md)——查看当前 JVM 的信息 +* [sysprop](sysprop.md)——查看和修改JVM的系统属性 +* **New!** [getstatic](getstatic.md)——查看类的静态属性 + +## class/classloader相关 + + +* [sc](sc.md)——查看JVM已加载的类信息 +* [sm](sm.md)——查看已加载类的方法信息 +* [dump](dump.md)——dump 已加载类的 byte code 到特定目录 +* [redefine](redefine.md)——加载外部的`.class`文件,redefine到JVM里 +* [jad](jad.md)——反编译指定已加载类的源码 +* [classloader](classloader.md)——查看classloader的继承树,urls,类加载信息,使用classloader去getResource + +## monitor/watch/trace相关 + + +> 请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 `shutdown` 或将增强过的类执行 `reset` 命令。 + +* [monitor](monitor.md)——方法执行监控 +* [watch](watch.md)——方法执行数据观测 +* [trace](trace.md)——方法内部调用路径,并输出方法路径上的每个节点上耗时 +* [stack](stack.md)——输出当前方法被调用的调用路径 +* [tt](tt.md)——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测 + +## options + +* [options](options.md)——查看或设置Arthas全局开关 + + +## 管道 + +Arthas支持使用管道对上述命令的结果进行进一步的处理,如`sm org.apache.log4j.Logger | grep ` + +* grep——搜索满足条件的结果 +* plaintext——将命令的结果去除颜色 +* wc——按行统计输出结果 + +## 后台异步任务 + +当线上出现偶发的问题,比如需要watch某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考[这里](async.md) + +* 使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session断开不影响任务执行(生命周期默认为1天) +* jobs——列出所有job +* kill——强制终止任务 +* fg——将暂停的任务拉到前台执行 +* bg——将暂停的任务放到后台执行 + + +## 其他特性 + +* [异步命令支持](async.md) +* [执行结果存日志](save-log.md) +* [批处理的支持](batch-support.md) +* [ognl表达式的用法说明](TODO/articles/92448) diff --git a/site/src/site/sphinx/cmds/advice-class.md b/site/src/site/sphinx/advice-class.md similarity index 100% rename from site/src/site/sphinx/cmds/advice-class.md rename to site/src/site/sphinx/advice-class.md diff --git a/site/src/site/sphinx/arthas3.md b/site/src/site/sphinx/arthas3.md index 5b0f250c5..8fe7c5388 100644 --- a/site/src/site/sphinx/arthas3.md +++ b/site/src/site/sphinx/arthas3.md @@ -27,7 +27,7 @@ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "params + 为了避免这个问题,Arthas 3.0中使用了ognl这个更加轻量的表达式求值库来代替groovy,彻底解决了groovy引起的FGC风险。但由于这个替换,导致原来使用groovy脚本编写的自定义脚本失效。这个问题留待后续解决。 -在3.0中,watch命令的表达式部分的书写有了一些改变,详见[这里](https://github.com/alibaba/arthas/wiki/cmds/watch) +在3.0中,watch命令的表达式部分的书写有了一些改变,详见[这里](https://github.com/alibaba/arthas/wiki/watch) #### 提升rt统计精度 diff --git a/site/src/site/sphinx/arthas_3_0/new_feature.md b/site/src/site/sphinx/arthas_3_0/new_feature.md index 319431c24..67f07f267 100644 --- a/site/src/site/sphinx/arthas_3_0/new_feature.md +++ b/site/src/site/sphinx/arthas_3_0/new_feature.md @@ -63,7 +63,7 @@ watch com.alibaba.sample.petstore.web.store.module.screen.ItemList add "params + 为了避免这个问题,Arthas 3.0中使用了ognl这个更加轻量的表达式求值库来代替groovy,彻底解决了groovy引起的FGC风险。但由于这个替换,导致原来使用groovy脚本编写的自定义脚本失效。这个问题留待后续解决。 -在3.0中,watch命令的表达式部分的书写有了一些改变,详见[这里](https://github.com/alibaba/arthas/wiki/cmds/watch) +在3.0中,watch命令的表达式部分的书写有了一些改变,详见[这里](https://github.com/alibaba/arthas/wiki/watch) ### 提升rt统计精度 Arthas 2.0中,统计rt都是以`ms`为单位,对于某些比较小的方法调用,耗时在毫秒以下的都会被认为是0ms,造成trace总时间和各方法的时间相加不一致等问题(虽然这里面确实会有误差,主要Arthas自身的开销)。Arthas 3.0中所有rt的单位统一改为使用`ns`来统计,精准捕获你的方法耗时,让0ms这样无意义的统计数据不再出现! diff --git a/site/src/site/sphinx/async.md b/site/src/site/sphinx/async.md index 63bd65e84..92e971c7d 100644 --- a/site/src/site/sphinx/async.md +++ b/site/src/site/sphinx/async.md @@ -2,7 +2,6 @@ Arthas异步调用 === arthas中的异步调用,使用了仿linux系统任务相关的命令。[linux任务相关介绍](https://ehlxr.me/2017/01/18/Linux-%E4%B8%AD-fg%E3%80%81bg%E3%80%81jobs%E3%80%81-%E6%8C%87%E4%BB%A4/)。 -# 使用方式 ## 1. 使用&在后台执行任务 比如希望执行后台执行trace命令,那么调用下面命令 diff --git a/site/src/site/sphinx/batch-support.md b/site/src/site/sphinx/batch-support.md index 5c94c84ab..5d17473fb 100644 --- a/site/src/site/sphinx/batch-support.md +++ b/site/src/site/sphinx/batch-support.md @@ -13,7 +13,7 @@ > * 目前需要每个命令占一行 > * dashboard务必开启批处理模式(`-b`),指定执行次数(`-n`),否则会导致批处理脚本无法终止 > * watch/tt/trace/monitor/stack等命令务必指定执行次数(`-n`),否则会导致批处理脚本无法终止 -> * 可以使用异步后台任务,如 `watch c.t.X test returnObj > &`,让命令一直在后台运行,通过日志获取结果,[获取更多异步任务的信息](async) +> * 可以使用异步后台任务,如 `watch c.t.X test returnObj > &`,让命令一直在后台运行,通过日志获取结果,[获取更多异步任务的信息](async.md) ``` ➜ arthas git:(develop) cat /var/tmp/test.as diff --git a/site/src/site/sphinx/cmds/classloader.md b/site/src/site/sphinx/classloader.md similarity index 100% rename from site/src/site/sphinx/cmds/classloader.md rename to site/src/site/sphinx/classloader.md diff --git a/site/src/site/sphinx/commands.md b/site/src/site/sphinx/commands.md index 97229338f..012b65902 100644 --- a/site/src/site/sphinx/commands.md +++ b/site/src/site/sphinx/commands.md @@ -1,22 +1,37 @@ -Arthas 用户命令文档 +命令列表 ============= -* [仪表板/dashboard](cmds/dashboard.md) -* [线程堆栈/thread](cmds/thread.md) -* [JVM信息/jvm](cmds/jvm.md) -* [查看类信息/sc](cmds/sc.md) -* [查看方法信息/sm](cmds/sm.md) -* [dump字节码/dump](cmds/dump.md) -* [反编译类/jad](cmds/jad.md) -* [查看类加载信息/classloader](cmds/classloader.md) -* [重新加载类/redefine](cmds/redefine) -* [方法执行监控/monitor](cmds/monitor.md) -* [方法AOP观测/watch](cmds/watch.md) -* [方法内部路径耗时/trace](cmds/trace.md) -* [查看方法调用栈/stack](cmds/stack.md) -* [方法执行记录与回放/tt](cmds/tt.md) +* [dashboard](dashboard.md) +* [thread](thread.md) +* [jvm](jvm.md) +* [sysprop](sysprop.md) +* [getstatic](getstatic.md) -* [JVM属性/sysprop](cmds/sysprop) -* [查看类的静态属性/getstatic](cmds/getstatic) -* [全局开关/options](options) + +* [sc](sc.md) +* [sm](sm.md) +* [dump](dump.md) + +* [jad](jad.md) +* [classloader](classloader.md) +* [redefine](redefine.md) + +* [monitor](monitor.md) +* [watch](watch.md) +* [trace](trace.md) +* [stack](stack.md) +* [tt](tt.md) + +* [options](options.md) + +### Arthas 基础命令 + +* help——查看命令帮助信息 +* cls——清空当前屏幕区域 +* session——查看当前会话的信息 +* [reset](reset.md)——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类 +* version——输出当前目标 Java 进程所加载的 Arthas 版本号 +* quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响 +* shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出 +* [keymap](keymap.md)——Arthas快捷键列表及自定义快捷键 \ No newline at end of file diff --git a/site/src/site/sphinx/conf.py b/site/src/site/sphinx/conf.py index 7604a10d7..e716153e7 100644 --- a/site/src/site/sphinx/conf.py +++ b/site/src/site/sphinx/conf.py @@ -296,6 +296,7 @@ def setup(app): 'url_resolver': lambda url: github_doc_root + url, # 'auto_toc_tree_section': 'Contents', 'enable_eval_rst': True, - 'enable_auto_doc_ref': True, + # 'enable_auto_doc_ref': True, + 'enable_auto_toc_tree': True, }, True) app.add_transform(AutoStructify) diff --git a/site/src/site/sphinx/cmds/dashboard.md b/site/src/site/sphinx/dashboard.md similarity index 96% rename from site/src/site/sphinx/cmds/dashboard.md rename to site/src/site/sphinx/dashboard.md index 595e3a1f1..19b88575c 100644 --- a/site/src/site/sphinx/cmds/dashboard.md +++ b/site/src/site/sphinx/dashboard.md @@ -58,7 +58,4 @@ uptime 16020s busy ### 截图展示 -![alt text](https://github.com/alibaba/arthas/wiki/files/dashboard.png "dashboard") - - - \ No newline at end of file +![alt text](files/dashboard.png "dashboard") diff --git a/site/src/site/sphinx/cmds/dump.md b/site/src/site/sphinx/dump.md similarity index 100% rename from site/src/site/sphinx/cmds/dump.md rename to site/src/site/sphinx/dump.md diff --git a/site/src/site/sphinx/cmds/getstatic.md b/site/src/site/sphinx/getstatic.md similarity index 100% rename from site/src/site/sphinx/cmds/getstatic.md rename to site/src/site/sphinx/getstatic.md diff --git a/site/src/site/sphinx/cmds/groovy.markdown b/site/src/site/sphinx/groovy.md similarity index 97% rename from site/src/site/sphinx/cmds/groovy.markdown rename to site/src/site/sphinx/groovy.md index b8c9ef4d7..3ab816b70 100644 --- a/site/src/site/sphinx/cmds/groovy.markdown +++ b/site/src/site/sphinx/groovy.md @@ -71,7 +71,7 @@ interface ScriptListener { ### 参数 `Advice` 说明 -`Advice` 参数最主要是封装了通知节点的所有信息。参考[表达式核心变量](https://github.com/alibaba/arthas/wiki/cmds/advice-class)中关于该节点的描述。 +`Advice` 参数最主要是封装了通知节点的所有信息。参考[表达式核心变量](advice-class.md)中关于该节点的描述。 ### 参数 `Output` 说明 diff --git a/site/src/site/sphinx/index.md b/site/src/site/sphinx/index.md index 110cbdc6b..020ca8375 100644 --- a/site/src/site/sphinx/index.md +++ b/site/src/site/sphinx/index.md @@ -19,8 +19,14 @@ Contents -------- * [安装](install-detail.md) +* [快速入门](quick-start.md) +* [进阶使用](advanced-use.md) * [命令列表](commands.md) +* [用户案例](https://github.com/alibaba/arthas/labels/user-case) * [Release Notes](release-notes.md) * [Questions and answers](https://github.com/alibaba/arthas/labels/question-answered) * [Fork me at GitHub](https://github.com/alibaba/arthas) * [参与贡献](https://github.com/alibaba/arthas/CONTRIBUTING.md) + + + diff --git a/site/src/site/sphinx/install-detail.md b/site/src/site/sphinx/install-detail.md index 652b631ee..665b60fd8 100644 --- a/site/src/site/sphinx/install-detail.md +++ b/site/src/site/sphinx/install-detail.md @@ -1,35 +1,38 @@ Arthas Install ============= -This document is for developers of recommonmark, it contans the API functions -## 安装 +## Linux/Unix/Mac -* Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 `回车` 执行即可: +Arthas 支持在 Linux/Unix/Mac 等平台上一键安装,请复制以下内容,并粘贴到命令行中,敲 `回车` 执行即可: - > curl -L TODO/install.sh | sh +```bash +curl -L https://alibaba.github.io/arthas/install.sh | sh +``` - 上述命令将会下载的启动脚本文件 as.sh 到当前目录,你可以放在任何地方或将其加入到 $PATH 中; +上述命令将会下载的启动脚本文件 `as.sh` 到当前目录,你可以放在任何地方或将其加入到 $PATH 中。 -* 对于 Windows 平台,你也可以下载最新的 zip 包,解压后运行 bin 目录下的 as.bat。 +## Windows - 下载地址:TODO (点击下载推荐的 Arthas 版本) +下载最新的 zip 包,解压后运行 bin 目录下的 `as.bat`。 - Windows用户如果在cmd里不能正常显示颜色,可以使用这个软件:https://sourceforge.net/projects/conemu +下载地址:[arthas-packaging-3.0.0-RC-bin.zip](https://search.maven.org/remotecontent?filepath=com/taobao/arthas/arthas-packaging/3.0.0-RC/arthas-packaging-3.0.0-RC-bin.zip) +Windows用户如果在cmd里不能正常显示颜色,可以使用[conemu](https://sourceforge.net/projects/conemu)。 + +## 独立的帮助文档 + +下载地址:[arthas-packaging-3.0.0-RC-doc.zip](https://search.maven.org/remotecontent?filepath=com/taobao/arthas/arthas-packaging/3.0.0-RC/arthas-packaging-3.0.0-RC-doc.zip) ## 卸载 * 在 Linux/Unix/Mac 平台 - 删除下面文件就可以了。 - - > rm -rf ~/.arthas/ ~/.arthas_history + 删除下面文件: + ```bash + rm -rf ~/.arthas/ ~/.arthas_history + ``` * Windows平台直接删除zip包和解压的文件 - -## 手动安装 - -* [手动安装步骤](manual-install.md) \ No newline at end of file diff --git a/site/src/site/sphinx/cmds/jad.md b/site/src/site/sphinx/jad.md similarity index 100% rename from site/src/site/sphinx/cmds/jad.md rename to site/src/site/sphinx/jad.md diff --git a/site/src/site/sphinx/cmds/jvm.md b/site/src/site/sphinx/jvm.md similarity index 100% rename from site/src/site/sphinx/cmds/jvm.md rename to site/src/site/sphinx/jvm.md diff --git a/site/src/site/sphinx/cmds/keymap.md b/site/src/site/sphinx/keymap.md similarity index 100% rename from site/src/site/sphinx/cmds/keymap.md rename to site/src/site/sphinx/keymap.md diff --git a/site/src/site/sphinx/cmds/monitor.md b/site/src/site/sphinx/monitor.md similarity index 100% rename from site/src/site/sphinx/cmds/monitor.md rename to site/src/site/sphinx/monitor.md diff --git a/site/src/site/sphinx/quick-start.md b/site/src/site/sphinx/quick-start.md new file mode 100644 index 000000000..33d748348 --- /dev/null +++ b/site/src/site/sphinx/quick-start.md @@ -0,0 +1,142 @@ +快速入门 +=== + +## 1. 启动Demo + +```java +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicInteger; +public class Demo { + static class Counter { + private static AtomicInteger count = new AtomicInteger(0); + public static void increment() { + count.incrementAndGet(); + } + public static int value() { + return count.get(); + } + } + + public static void main(String[] args) throws InterruptedException { + while (true) { + Counter.increment(); + System.out.println("counter: " + Counter.value()); + TimeUnit.SECONDS.sleep(1); + } + } +} +``` + +把上面的内容保存到`Demo.java`里,然后在命令行下编绎启动: +```bash +javac Demo.java +java Demo +``` + +也可以把代码保存到IDE里,然后启动。 + +## 2. 启动arthas + +### Linux/Unix/Mac +在命令行下面执行: + +```bash +./as.sh +``` + +> 执行该脚本的用户需要和目标进程具有相同的权限。比如以`admin`用户来执行: +> `sudo su admin && ./as.sh` 或 `sudo -u admin -EH ./as.sh`。 +> 详细的启动脚本说明,请参考[这里](start-arthas.md)。 +> 如果attatch不上目标进程,可以查看`~/logs/arthas/` 目录下的日志。 + +选择应用java进程: + +``` +$ ./as.sh +Arthas script version: 3.0.2 +Found existing java process, please choose one and hit RETURN. +* [1]: 95428 + [2]: 22647 org.jetbrains.jps.cmdline.Launcher + [3]: 21736 + [4]: 13560 Demo +``` + +Demo进程是第4个,则输入4,再输入回车/enter。Arthas会attach到目标进程上,并输出日志: + +``` +Connecting to arthas server... current timestamp is 1536656867 +Trying 127.0.0.1... +Connected to 127.0.0.1. +Escape character is '^]'. + ,---. ,------. ,--------.,--. ,--. ,---. ,---. + / O \ | .--. ''--. .--'| '--' | / O \ ' .-' +| .-. || '--'.' | | | .--. || .-. |`. `-. +| | | || |\ \ | | | | | || | | |.-' | +`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' + + +doc: https://alibaba.github.io/arthas +version: 3.0.1-RC-SNAPSHOT +pid: 13560 +timestamp: 1536656867894 +``` + +### Windows + +打开Dos命令行窗口,在解压的arthas目录下执行`as.bat`。 + + +## 3. 查看dashboard + +输入[dashboard](dashboard.md),按enter/回车,会展示当前进程的信息,按`ctrl+c`可以中断执行。 + +``` +$ dashboard +ID NAME GROUP PRIORI STATE %CPU TIME INTERRU DAEMON +17 pool-2-thread-1 system 5 WAITIN 67 0:0 false false +27 Timer-for-arthas-dashb system 10 RUNNAB 32 0:0 false true +11 AsyncAppender-Worker-a system 9 WAITIN 0 0:0 false true +9 Attach Listener system 9 RUNNAB 0 0:0 false true +3 Finalizer system 8 WAITIN 0 0:0 false true +2 Reference Handler system 10 WAITIN 0 0:0 false true +4 Signal Dispatcher system 9 RUNNAB 0 0:0 false true +26 as-command-execute-dae system 10 TIMED_ 0 0:0 false true +13 job-timeout system 9 TIMED_ 0 0:0 false true +1 main main 5 TIMED_ 0 0:0 false false +14 nioEventLoopGroup-2-1 system 10 RUNNAB 0 0:0 false false +18 nioEventLoopGroup-2-2 system 10 RUNNAB 0 0:0 false false +23 nioEventLoopGroup-2-3 system 10 RUNNAB 0 0:0 false false +15 nioEventLoopGroup-3-1 system 10 RUNNAB 0 0:0 false false +Memory used total max usage GC +heap 32M 155M 1820M 1.77% gc.ps_scavenge.count 4 +ps_eden_space 14M 65M 672M 2.21% gc.ps_scavenge.time(m 166 +ps_survivor_space 4M 5M 5M s) +ps_old_gen 12M 85M 1365M 0.91% gc.ps_marksweep.count 0 +nonheap 20M 23M -1 gc.ps_marksweep.time( 0 +code_cache 3M 5M 240M 1.32% ms) +Runtime +os.name Mac OS X +os.version 10.13.4 +java.version 1.8.0_162 +java.home /Library/Java/JavaVir + tualMachines/jdk1.8.0 + _162.jdk/Contents/Hom + e/jre +``` + +## 4. watch + +通过[watch](watch.md)命令来查看`Counter.value()`函数的返回值: + +``` +$ watch Demo$Counter value returnObj +Press Ctrl+C to abort. +Affect(class-cnt:1 , method-cnt:1) cost in 29 ms. +ts=2018-09-10 17:53:11;result=@Integer[621] +ts=2018-09-10 17:53:12;result=@Integer[622] +ts=2018-09-10 17:53:13;result=@Integer[623] +ts=2018-09-10 17:53:14;result=@Integer[624] +ts=2018-09-10 17:53:15;result=@Integer[625] +``` + +更多的功能可以查看[进阶使用](advanced-use.md)。 \ No newline at end of file diff --git a/site/src/site/sphinx/cmds/redefine.md b/site/src/site/sphinx/redefine.md similarity index 100% rename from site/src/site/sphinx/cmds/redefine.md rename to site/src/site/sphinx/redefine.md diff --git a/site/src/site/sphinx/release-notes.md b/site/src/site/sphinx/release-notes.md index 50b510690..2b7a50b60 100644 --- a/site/src/site/sphinx/release-notes.md +++ b/site/src/site/sphinx/release-notes.md @@ -3,7 +3,7 @@ Release Notes === -2017-11-03 +v2017-11-03 ---- * 增加getstatic方法获取静态变量 @@ -19,31 +19,31 @@ Release Notes * trace命令增加过滤jdk方法调用的功能 -2017-09-22 +v2017-09-22 ---- * 优化agent server启动时的异常信息 * 修复异步命令的一些bug -2017-09-11 +v2017-09-11 ---- -* 支持[异步后后命令](async) +* 支持[异步后后命令](async.md) * jad命令优化,支持JDK8及内部类 * 修复中文乱码问题 -2017-05-11 +v2017-05-11 ---- * tt命令默认只展开1层,防止对象过大造成卡顿 * 修复中文无法展示的问题 -2017-05-12 +v2017-05-12 ---- * Arthas 3.0 release -2016-12-09 +v2016-12-09 ---- * as.sh支持-h输出帮助 @@ -67,7 +67,7 @@ Release Notes * [#180] 修复第一次Attach成功之后,删除之前Arthas的安装包,重新编译打包,再次attach失败的问题 -2016-06-07 +v2016-06-07 ---- * 修复以资源方式加载spy类时出现NPE的问题 @@ -75,7 +75,7 @@ Release Notes * 优化 Thread 输出,按线程名排序 * 获取topN忙的线程时,支持指定刷新间隔 -2016-04-08 +v2016-04-08 ---- * New feature: @@ -100,7 +100,7 @@ Release Notes * 修正增强BootstrapClassLoader加载的类,找不到Spy的问题 * 修复某些配色方案下,结果显示不友好的问题 -2016-03-07 +v2016-03-07 ---- * 支持一键查看当前最忙的前N个线程及其堆栈 @@ -108,13 +108,13 @@ Release Notes * 一些体验优化 -2016-01-18 +v2016-01-18 ---- * 优化 jad,实时 dump 内存 byte array,并使用 jd-core-java 反编译,支持`行号显示` * 修复 tt 命令在监控与线程上下文相关的方法调用时,显示/重做等场景下的 bug -2016-01-08 +v2016-01-08 ---- * 修复一些 bug @@ -124,7 +124,7 @@ Release Notes * 数据统计问题修复 * sc 查看静态变量内部层次结构 -2015-12-29 +v2015-12-29 --- * Arthas 2.0 测试版本发布! \ No newline at end of file diff --git a/site/src/site/sphinx/cmds/reset.md b/site/src/site/sphinx/reset.md similarity index 100% rename from site/src/site/sphinx/cmds/reset.md rename to site/src/site/sphinx/reset.md diff --git a/site/src/site/sphinx/cmds/options.md b/site/src/site/sphinx/save-log.md similarity index 100% rename from site/src/site/sphinx/cmds/options.md rename to site/src/site/sphinx/save-log.md diff --git a/site/src/site/sphinx/cmds/sc.md b/site/src/site/sphinx/sc.md similarity index 100% rename from site/src/site/sphinx/cmds/sc.md rename to site/src/site/sphinx/sc.md diff --git a/site/src/site/sphinx/cmds/sm.md b/site/src/site/sphinx/sm.md similarity index 100% rename from site/src/site/sphinx/cmds/sm.md rename to site/src/site/sphinx/sm.md diff --git a/site/src/site/sphinx/cmds/stack.md b/site/src/site/sphinx/stack.md similarity index 98% rename from site/src/site/sphinx/cmds/stack.md rename to site/src/site/sphinx/stack.md index eee7e5679..8d0a1b6f5 100644 --- a/site/src/site/sphinx/cmds/stack.md +++ b/site/src/site/sphinx/stack.md @@ -20,7 +20,7 @@ stack 观察的维度也比较多,主要体现在参数 `advice` 的数据结构上。`Advice` 参数最主要是封装了通知节点的所有信息。 -请参考[表达式核心变量](https://github.com/alibaba/arthas/wiki/cmds/advice-class)中关于该节点的描述。 +请参考[表达式核心变量](advice-class.md)中关于该节点的描述。 * 特殊用法请参考:TODO middleware-container/arthas/issues/263 * OGNL表达式官网:https://commons.apache.org/proper/commons-ognl/language-guide.html diff --git a/site/src/site/sphinx/start-arthas.md b/site/src/site/sphinx/start-arthas.md index 7c5893bb6..82624274e 100644 --- a/site/src/site/sphinx/start-arthas.md +++ b/site/src/site/sphinx/start-arthas.md @@ -69,5 +69,4 @@ Arthas 支持通过 telnet 来访问服务端,如果当你手头的机器没 ### Windows 环境支持 * 目前 Arthas 提供了 `as.bat` 脚本,用于 Windows 环境下的诊断场景;此脚本暂时只接受一个参数 pid,即只能诊断本机上的 Java 进程; -* 要使用 Windows 下的诊断脚本,需要手动下载整个 Arthas Zip 包,解压开后即可使用;下载地址:TODO (点击下载推荐的 Arthas 版本) * 另外,`as.bat` 脚本在体验方面还有一些问题,如果需要更好的体验,可以在本地使用 `as.bat pid` 启动 Arthas Server 后,然后在另外的 Linux/Mac 上使用 as.bat pid@ip:port 来远程诊断; \ No newline at end of file diff --git a/site/src/site/sphinx/cmds/sysprop.md b/site/src/site/sphinx/sysprop.md similarity index 98% rename from site/src/site/sphinx/cmds/sysprop.md rename to site/src/site/sphinx/sysprop.md index 9f2a7a7f3..221f60284 100644 --- a/site/src/site/sphinx/cmds/sysprop.md +++ b/site/src/site/sphinx/sysprop.md @@ -1,5 +1,5 @@ -sysprop命令 -=== +sysprop +======================= > 查看当前JVM的系统属性(`System Property`) @@ -18,7 +18,7 @@ sysprop命令 sysprop production.mode true WIKI: - https://github.com/alibaba/arthas/wiki/cmds/sysprop + https://github.com/alibaba/arthas/wiki/sysprop OPTIONS: -h, --help this help diff --git a/site/src/site/sphinx/cmds/thread.md b/site/src/site/sphinx/thread.md similarity index 100% rename from site/src/site/sphinx/cmds/thread.md rename to site/src/site/sphinx/thread.md diff --git a/site/src/site/sphinx/cmds/trace.md b/site/src/site/sphinx/trace.md similarity index 97% rename from site/src/site/sphinx/cmds/trace.md rename to site/src/site/sphinx/trace.md index 7b8766460..9f45ad357 100644 --- a/site/src/site/sphinx/cmds/trace.md +++ b/site/src/site/sphinx/trace.md @@ -21,7 +21,7 @@ trace 观察的维度也比较多,主要体现在参数 `advice` 的数据结构上。`Advice` 参数最主要是封装了通知节点的所有信息。 -请参考[表达式核心变量](https://github.com/alibaba/arthas/wiki/cmds/advice-class)中关于该节点的描述。 +请参考[表达式核心变量](advice-class.md)中关于该节点的描述。 * 特殊用法请参考:TODO middleware-container/arthas/issues/263 * OGNL表达式官网:https://commons.apache.org/proper/commons-ognl/language-guide.html diff --git a/site/src/site/sphinx/cmds/tt.md b/site/src/site/sphinx/tt.md similarity index 91% rename from site/src/site/sphinx/cmds/tt.md rename to site/src/site/sphinx/tt.md index 3525c2758..f1902bbb4 100644 --- a/site/src/site/sphinx/cmds/tt.md +++ b/site/src/site/sphinx/tt.md @@ -16,19 +16,19 @@ tt 对于一个最基本的使用来说,就是记录下当前方法的每次调用环境现场。 ```java -$ tt -t -n 3 *Test print -Press Ctrl+D or Ctrl+X to abort. -Affect(class-cnt:1 , method-cnt:1) cost in 115 ms. -+----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ -| INDEX | TIMESTAMP | COST(ms) | IS-RET | IS-EXP | OBJECT | CLASS | METHOD | -+----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ -| 1007 | 2015-07-26 12:23:21 | 138 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | -+----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ -| 1008 | 2015-07-26 12:23:22 | 143 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | -+----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ -| 1009 | 2015-07-26 12:23:23 | 130 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | -+----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ -$ + $ tt -t -n 3 *Test print + Press Ctrl+D or Ctrl+X to abort. + Affect(class-cnt:1 , method-cnt:1) cost in 115 ms. + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + | INDEX | TIMESTAMP | COST(ms) | IS-RET | IS-EXP | OBJECT | CLASS | METHOD | + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + | 1007 | 2015-07-26 12:23:21 | 138 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + | 1008 | 2015-07-26 12:23:22 | 143 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + | 1009 | 2015-07-26 12:23:23 | 130 | true | false | 0x42cc13a0 | GaOgnlUtilsTest | print | + +----------+----------------------+------------+----------+----------+-----------------+--------------------------------+--------------------------------+ + $ ``` - 命令参数解析 @@ -78,7 +78,7 @@ $ - 构成条件表达式的 `Advice` 对象 - 前边看到了很多条件表达式中,都适用了 `params[0]`,有关这个变量的介绍,请参考[表达式核心变量](https://github.com/alibaba/arthas/wiki/cmds/advice-class) + 前边看到了很多条件表达式中,都适用了 `params[0]`,有关这个变量的介绍,请参考[表达式核心变量](advice-class.md) ### 检索调用记录 diff --git a/site/src/site/sphinx/cmds/watch.md b/site/src/site/sphinx/watch.md similarity index 99% rename from site/src/site/sphinx/cmds/watch.md rename to site/src/site/sphinx/watch.md index 60122bf92..66deb5053 100644 --- a/site/src/site/sphinx/cmds/watch.md +++ b/site/src/site/sphinx/watch.md @@ -27,7 +27,7 @@ watch 的参数比较多,主要是因为它能在 4 个不同的场景观察 观察的维度也比较多,主要体现在参数 `advice` 的数据结构上。`Advice` 参数最主要是封装了通知节点的所有信息。 -请参考[表达式核心变量](https://github.com/alibaba/arthas/wiki/cmds/advice-class)中关于该节点的描述。 +请参考[表达式核心变量](advice-class.md)中关于该节点的描述。 * 特殊用法请参考:TODO middleware-container/arthas/issues/263 * OGNL表达式官网:https://commons.apache.org/proper/commons-ognl/language-guide.html