Arthas进阶学习(常用命令)

摘要:
因此,端口号--server。port=1945(2019年4月5日)在启动期间设置。步骤2启动“arthas”javajarthas引导。jar——目标i p0.0.0。选择上一项并输入“help”以查看命令Step3syspropsysprop,该命令可以打印所有SystemProperties信息。Sysprop-h自动完成Arthas支持丰富的自动完成功能。
Step1

下载demo-arthas-spring-boot.jar,再用java -jar命令启动:

wget https://github.com/hengyunabc/katacoda-scenarios/raw/master/demo-arthas-spring-boot.jar

java -jar demo-arthas-spring-boot.jar --server.port=1945

  

下载了jar包,因为该项目默认是80端口,而主机上80端口已经被占用,所以启动时设置了端口号--server.port=1945(2019年4月5日)

Step2

启动"arthas"

java -jar arthas-boot.jar --target-ip 0.0.0.0

  

选择刚才的项目

输入"help"可查看命令

Arthas进阶学习(常用命令)第1张

Step3

sysprop

sysprop 可以打印所有的System Properties信息。

Arthas进阶学习(常用命令)第2张

也可以指定单个key: sysprop java.version

也可以通过grep来过滤: sysprop | grep user

可以设置新的value: sysprop testKey testValue

sysenv

sysenv 命令可以获取到环境变量,比如ssh登录的ip等。

Arthas进阶学习(常用命令)第3张

jvm

jvm 命令会打印出JVM的各种详细信息。

Arthas进阶学习(常用命令)第4张

dashboard

dashboard 命令可以查看当前系统的实时数据面板,每5s更新一次。

输入 Q 或者 Ctrl+C 可以退出dashboard命令

Arthas进阶学习(常用命令)第5张

Step4

Tips

为了更好使用Arthas,下面先介绍Arthas里的一些使用技巧。

help

Arthas里每一个命令都有详细的帮助信息。可以用-h来查看。帮助信息里有EXAMPLESWIKI链接。

比如:

sysprop -h

Arthas进阶学习(常用命令)第6张

自动补全

Arthas支持丰富的自动补全功能,在使用有疑惑时,可以输入Tab来获取更多信息。

比如输入 sysprop java. 之后,再输入Tab,会补全出对应的key:

Arthas进阶学习(常用命令)第7张

readline的快捷键支持

Arthas支持常见的命令行快捷键,比如Ctrl + A跳转行首,Ctrl + E跳转行尾。

更多的快捷键可以用 keymap 命令查看。

历史命令的补全

如果想再执行之前的命令,可以在输入一半时,按Up/↑ 或者 Ddown/↓,来匹配到之前的命令。

比如之前执行过sysprop java.version,那么在输入sysprop ja之后,可以输入Up/↑,就会自动补全为sysprop java.version

如果想查看所有的历史命令,也可以通过 history 命令查看到。

pipeline

Arthas支持在pipeline之后,执行一些简单的命令,比如:

sysprop | grep java

sysprop | wc -l总共的行

Step5

sc/sm 查看已加载的类

下面介绍Arthas里查找已加载类的命令。

sc

sc 命令可以查找到所有JVM已经加载到的类

如果搜索的是接口,还会搜索所有的实现类。比如查看所有的Filter实现类:

sc javax.servlet.Filter

Arthas进阶学习(常用命令)第8张

通过-d参数,可以打印出类加载的具体信息,很方便查找类加载问题。

sc -d javax.servlet.Filter

sc支持通配,比如搜索所有的StringUtils

sc *StringUtils

sm

sm命令则是查找类的具体函数。比如:

sm java.math.RoundingMode

Arthas进阶学习(常用命令)第9张

通过-d参数可以打印函数的具体属性

sm -d java.math.RoundingMode

Arthas进阶学习(常用命令)第10张

也可以查找特定的函数,比如查找构造函数:

sm java.math.RoundingMode <init>

 Arthas进阶学习(常用命令)第11张

Arthas进阶学习(常用命令)第12张

Step6

Jad

可以通过 jad 命令来反编译代码:

jad com.example.demo.arthas.user.UserController

Arthas进阶学习(常用命令)第13张

通过--source-only参数可以只打印出在反编译的源代码

jad --source-only com.example.demo.arthas.user.UserController

 Arthas进阶学习(常用命令)第14张

Step7

Ognl

在Arthas里,有一个单独的ognl命令,可以动态执行代码。

调用static函数

ognl '@java.lang.System@out.println("hello ognl")'

可以检查"demo-arthas-spring-boot.jar "里的进程输出,可以发现打印出了hello ognl

Arthas进阶学习(常用命令)第15张

获取静态类静态字段

获取UserController类里的logger字段:

ognl -c 1be6f5c3 @com.example.demo.arthas.user.UserController@logger

Arthas进阶学习(常用命令)第16张

还可以通过-x参数控制返回值的展开层数。比如:

ognl -c 1be6f5c3 -x 2 @com.example.demo.arthas.user.UserController@logger

 Arthas进阶学习(常用命令)第17张

执行多行表达式,赋值给临时变量,返回一个List

ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'

  

Arthas进阶学习(常用命令)第18张

更多

在Arthas里ognl表达式是很重要的功能,在很多命令里都可以使用ognl表达式。

一些更复杂的用法,可以参考:




Arthas 进阶的案例

 https://www.cnblogs.com/theRhyme/p/10660287.html

来源:https://alibaba.github.io/arthas/arthas-tutorials?language=cn&id=arthas-advanced

免责声明:文章转载自《Arthas进阶学习(常用命令)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇第七章 Python 盒子:模块、包和程序杭州地名集趣下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

su sudo 限制root远程登录

su命令 su用来切换用户。 su -  用户    是完全切换,就是变成另一个用户。 su 用户       是不完全切换,变量还是上一个用户。 注释:完全切换,就是在切换时加载用户的环境变量.bash_history,.bash_logout,.bash_profile 通过-c参数来不切换用户,以这个用户的身份来执行一些命令: [root@ting...

ThinkPHP6 核心分析:系统服务

什么是系统服务?系统服务是对于程序要用到的类在使用前先进行类的标识的绑定,以便容器能够对其进行解析(通过服务类的 register 方法),还有就是初始化一些参数、注册路由等(不限于这些操作,主要是看一个类在使用之前的需要,进行一些配置,使用的是服务类的 boot 方法)。以下面要介绍到的 ModelService 为例,ModelService类提供服务...

Java-修饰符

Java修饰符 修饰符用来定义类、方法或者变量,通常放在语句的最前端 访问控制修饰符 访问控制符可以保护对类、变量、方法和构造方法的访问 四中不同的访问权限: default,在同一包内可见,不使用任何修饰符 private,在同一类内可见 public,对所有类可见 protected,对同一包内的类和所有子类可见 默认访问修饰符-不使用...

Registry 类

提供表示 Windows 注册表中的根项的 RegistryKey 对象,并提供访问项/值对的 static 方法。 继承层次结构 System.Object   Microsoft.Win32.Registry 命名空间:  Microsoft.Win32程序集:  mscorlib(在 mscorlib.dll 中) 方法...

centos 添加/删除用户和用户组

centos系统添加/删除用户和用户组    在centos中增加用户使用adduser命令而创建用户组使用groupadd命令,这个是不是非常的方便呀,其实复杂点的就是用户的组与组权限的命令了,下面来给各位介绍一下吧。   1、建用户: adduser phpq                         //新建phpq用户passwd phpq...

gulp的简单使用

一、Gulp的安装: 注意:在gulp安装之前需要安装nodejs环境  nodejs下载地址:https://nodejs.org/en/    安装v4.6.1版本 1.先在cmd下全局安装gulp,在命令窗口输入:npm install gulp -g 2.然后在项目文字下进行本地安装:npm install gulp --save-dev 二、创建...