arthas 阿尔萨斯

这种命令行的东西首先得知道 如何使用帮助,帮助文档最先开始用的,应该是可以在网上找到的官方文档

文档一:https://alibaba.github.io/arthas/index.html ,然后这个文档只是给出了一些常用的例子,并没有详细的写出每一个参数,需要使用命令行帮助才能看到完整参数及其示例

文档二:命令行帮助,help 命令列出了当前版本可以使用的命令列表,在使用某一个命令时,不知道有哪些参数可以用时可以使用 <command> -h 查看示例及参数列表和每个参数的意思

文档三:百度,google ,官网 github issues https://github.com/alibaba/arthas/issues

下载和安装

curl -O https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

初次使用时的一些问题

[ERROR] Target process 116477 is not the process using port 3658, you will connect to an unexpected process.
[ERROR] 1. Try to restart arthas-boot, select process 90686, shutdown it first with running the 'stop' command.
[ERROR] 2. Or try to use different telnet port, for example: java -jar arthas-boot.jar --telnet-port 9998 --http-port -1

这个问题初用者必出,原因为 arthas 选择一个应用进行诊断时弄了一个 session,可以使用 arthas-client ,web arthas client 进行登录,这个提示告诉你要先关闭以前的 arthas-boot ,或者重新选择一个端口

你可以这么做,在 ~/.arthas/lib/3.1.7/arthas 下有一个 arthas-client.jar 使用 java -jararthas-client.jar 可以进入上次的 session ,shutdown 后就可以选择其它的进程进行诊断了,或者你可以继续诊断当前应用

docker 如何使用

官网已经有例子了,这样

docker exec -it arthas-demo /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar"

常见使用示例

arthas 默认是通配符匹配,可以开启正则匹配

用到后面,需要了解表达式核心变量 https://alibaba.github.io/arthas/advice-class.html

查询类加载器,类和类的所有方法,类源码

classloader 用来查询类加载器,以树状结构展示类加载器 classloader -t

sc 用来查询类,全称为 search-class ,如要查所有的 controller ,一般取名是有规则的 sc *Controller* ,查询单个类时,加 -d 参数可以看到详细信息,一般用来 看这个类是哪个类加载器加载的

sm 用来查询类的方法,全称为 search-method ,如要查当前查到 Controller 的所有的接口,选择某一个 Controller sm xx.xx.xx.xxxController

jad 用来在线反编译代码,可以用来查看线上代码是否已经更新

查看接口出入参,并重新发起请求 tt

第一步,先监控方法 tt -t classFullName methodName ,发起请求后,会展示一个请求列表,第一列为requestId

第二步,另启一个 arthas-client,执行 tt -i <requestId> 可以看到请求入参和出参,使用 -x 参数可以增加展示深度,看到更详细的信息,例如:tt -i <requestId> -x 3

如果在调试,需要使用同样的参数重新发起请求,只需要执行 tt -i <requestId> -p 就可以重新发起调用

查询出慢方法 trace

trace classFullName methodName -n 3 '#cost > 10'
监控方法调用 3 次,并找出花费时长超过 10ms 的节点 注:trace 只会监控一层子调用

找到 applicationContext 获取 bean

比较通用一点的办法是监控 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter 类的 invokeHandlerMethod 方法,因为所有的请求都会经过这里,然后这个类有一个方法是获取 applicationContext ,可以这样做

tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod

然后随便发起一个请求,再使秀 ognl 表达式获取 applicationContext  对象
之后就可以调用方法了
tt -i 1000 -w 'target.getApplicationContext().getBean("groupMembersController").detail("1")'

上面只是调了一个字符串的参数,如果需要调用复杂参数的方法,就需要了解下 ognl 表达式了,可以使用 ognl 表达式来创建对象

查看 Jvm 参数并设置 vmoption

可能 Jdk 提供的工具也有这样的功能,但这个可以有网页客户端,使用 Jdk 提供的工具类需要在本机调用,可能由于公司用户权限的原因可能使用不了,那这玩意就有用了。

使用这个命令必须使用 Jvm 参数的全称,简称是不支持的,并且要求大小写完全匹配,后面跟一个参数用于显示值,两个用于设置值

可以在这个文档查找全称 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html#BGBCIEFC

常见全称:

-Xms and -Xmx (or: -XX:InitialHeapSize and -XX:MaxHeapSize)
-Xss (or -XX:ThreadStackSize)

引入 issues 上的一张图来说明 arthas 的使用,可以当操作手册 ,图片较大,可以下载下来看,清晰点



我的博文大纲:https://blog.csdn.net/sanri1993/article/details/52201255

arthas 使用指导的更多相关文章

  1. 新手入门指导:Vue 2.0 的建议学习顺序

    起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...

  2. Beennan的内嵌汇编指导(译)Brennan's Guide to Inline Assembly

    注:写在前面,这是一篇翻译文章,本人的英文水平很有限,但内嵌汇编是学习操作系统不可少的知识,本人也常去查看这方面的内容,本文是在做mit的jos实验中的一篇关于内嵌汇编的介绍.关于常用的内嵌汇编(AT ...

  3. Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义

    Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...

  4. SQL Server 解读【已分区索引的特殊指导原则】(3) - 非聚集索引分区

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  5. SQL Server 解读【已分区索引的特殊指导原则】(1)- 索引对齐

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  6. SQL Server 解读【已分区索引的特殊指导原则】(2)- 唯一索引分区

    一.前言 在MSDN上看到一篇关于SQL Server 表分区的文档:已分区索引的特殊指导原则,如果你对表分区没有实战经验的话是比较难理解文档里面描述的意思.这里我就里面的一些概念进行讲解,方便大家的 ...

  7. Hive Tutorial(上)(Hive 入门指导)

    用户指导 Hive 指导 Hive指导 概念 Hive是什么 Hive不是什么 获得和开始 数据单元 类型系统 内置操作符和方法 语言性能 用法和例子(在<下>里面) 概念 Hive是什么 ...

  8. 《Java学习笔记(第8版)》学习指导

    <Java学习笔记(第8版)>学习指导 目录 图书简况 学习指导 第一章 Java平台概论 第二章 从JDK到IDE 第三章 基础语法 第四章 认识对象 第五章 对象封装 第六章 继承与多 ...

  9. 《Java程序设计与数据结构教程(第二版)》学习指导

    <Java程序设计与数据结构教程(第二版)>学习指导 欢迎关注"rocedu"微信公众号(手机上长按二维码) 做中教,做中学,实践中共同进步! 原文地址:http:// ...

随机推荐

  1. display常用的三种值:block、inline、inline-block

    display:block(块级元素 ) 会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父级宽度 display:inline(内联(行级)元素 ) 不会独占一 ...

  2. js用for循环实现乘法口诀表

    for循环可以打印一个乘法口诀表.需要使用for循环的嵌套 <script> for(var i = 0; i <= 9; i++){ // 外层循环控制行数,外层循环执行一次,内层 ...

  3. Element节点输出到System.out

    protected void writeElementToFile(Element valrespEle) { try { TransformerFactory transformerFactory ...

  4. SpringSide 3 中的安全框架

    在SpringSide 3的官方文档中,说安全框架使用的是Spring Security 2.0.乍一看,吓了我一跳,以为Acegi这么快就被淘汰了呢.上搜索引擎一搜,发现原来Spring Secur ...

  5. spring security自定义指南

    序 本文主要研究一下几种自定义spring security的方式 主要方式 自定义UserDetailsService 自定义passwordEncoder 自定义filter 自定义Authent ...

  6. 超容易理解的call()、apply()、bind()的区别

    call().apply().bind()是用来改变this的指向的. 一 举个例子 一个叫喵喵的猫喜欢吃鱼,一个叫汪汪的小狗喜欢啃骨头,用代码实现如下: 有一天,小狗汪汪和喵喵共进午餐的时候,汪汪说 ...

  7. POJ 1511 Invitation Cards(逆向思维 SPFA)

    Description In the age of television, not many people attend theater performances. Antique Comedians ...

  8. Hamcrest匹配器框架

    其实在之前的文章中已经使用过 Hamcrest 匹配器框架,本篇文章将系统的介绍它的使用. 为什么要用Hamcrest匹配器框架 Hamcrest是一款软件测试框架, 可以通过现有的匹配器类检查代码中 ...

  9. js实现防抖,节流

    防抖函数. 将几次操作合并为一次操作进行.设置一个计时器,规定在延迟时间后触发函数,但是在延迟时间内如果再次触发,就会取消之前的计时器.如此,只有最后一次操作能触发.代码如下: function de ...

  10. CodeForces 1204 (#581 div 2)

    传送门 A.BowWow and the Timetable •题意 给你一个二进制数,让你求小于这个数的所有4的幂的个数 •思路 第一反应是二进制与四进制转换 (其实不用真正的转换 QwQ) 由于二 ...