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. 达观数据CTO纪达麒:小标注数据量下自然语言处理实战经验

    自然语言处理在文本信息抽取.自动审校.智能问答.情感分析等场景下都有非常多的实际应用需求,在人工智能领域里有极为广泛的应用场景.然而在实际工程应用中,最经常面临的挑战是我们往往很难有大量高质量的标注语 ...

  2. codeforces 616D

    题意:给你n个数,找出一个最大的区间,满足:不同的数值个数不超过k; //我开始又看错题了. 以为是找出一个最大区间,里面的数的最大值不超过k; 思路:利用一个窗口滑动,左端点表示当前位置,右端点表示 ...

  3. 【codeforces 764C】Timofey and a tree

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  4. 【9101】求n!的值

    Time Limit: 10 second Memory Limit: 2 MB 问题描述 用高精度的方法,求n!的精确值(n的值以一般整数输入). Input 文件输入仅一行,输入n. Output ...

  5. UVA 1025 "A Spy in the Metro " (DAG上的动态规划?? or 背包问题??)

    传送门 参考资料: [1]:算法竞赛入门经典:第九章 DAG上的动态规划 题意: Algorithm城市的地铁有 n 个站台,编号为 1~n,共有 M1+M2 辆列车驶过: 其中 M1 辆列车从 1 ...

  6. MySQL面试(二)

    1.为什么索引遵循最左匹配原则? 当B+树的数据项是符合的数据结构,比如(name,age,sex)的时候,B+树是按照从左到右的顺序建立搜索树的.比如当(张三,20,F)这样的数据来检索的时候,b+ ...

  7. Java动态编译优化——提升编译速度(N倍)

    一.前言 最近一直在研究Java8 的动态编译, 并且也被ZipFileIndex$Entry 内存泄漏所困扰,在无意中,看到一个第三方插件的动态编译.并且编译速度是原来的2-3倍.原本打算直接用这个 ...

  8. C# 如何在项目引用x86 x64的非托管代码

    因为现在的项目使用的是 AnyCpu 在 x86 的设备使用的是x86,在x64使用的是x64,但是对于非托管代码,必须要在x64使用x64的dll,在x86使用x86的dll.在C++没有和C#一样 ...

  9. linux 操作 I/O 端口

      在驱动硬件请求了在它的活动中需要使用的 I/O 端口范围之后, 它必须读且/或写到这些 端口. 为此, 大部分硬件区别 8-位, 16-位, 和 32-位端口. 常常你无法混合它们, 象你 正常使 ...

  10. MD5登陆密码的生成

    package com.cinc.ecmp.userpermission.utils; import java.security.MessageDigest;import java.security. ...