Arthas常用命令

这篇具有很好参考价值的文章主要介绍了Arthas常用命令。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、常用命令

二、常用系统命令

三、JVM相关命令 

四、class/classloader相关命令

五、高级命令


一、常用命令

1、dashboard 仪表板

第一部分是显示JVM中运行的所有线程:所在线程组,优先级,线程的状态,CPU的占用率,是否是后台进程等

第二部分显示的JVM内存的使用情况

第三部分是操作系统的一些信息和Java版本号

2、通过 thread 命令来获取线程信息

1、当没有参数时,显示所有线程的信息

thread
2、展示当前最忙的前3个线程并打印堆栈

thread -n 3
3、显示1号线程的运行堆栈

thread 1
4、找出当前阻塞其他线程的线程,有时候我们发现应用卡住了, 通常是由于某个线程拿住了某个锁, 并且其他线程都在等待这把锁造成的。 为了排查这类问题, arthas提供了thread -b, 一键找出那个罪魁祸首。

thread -b
5、指定采样时间间隔,每过1000毫秒采样,显示最占时间的3个线程

thread -i 1000 -n 3
6、查看处于等待状态的线程

thread --state WAITING

3、通过 jad 来反编译获取源码

1、编译java.lang.String

jad java.lang.String
2、反编绎时只显示源代码,默认情况下,反编译结果里会带有ClassLoader信息,通过–source-only选项,可以只打印源代码。方便和mc/redefine命令结合使用。

jad --source-only demo.MathGame
3、反编译指定的方法

jad demo.MathGame main

4、watch监视

watch demo.MathGame(监视的包名和类名) primeFactors(监视的方法) returnObj(监视的返回值)

5、退出arthas

如果只是退出当前的连接,可以用quit或者exit命令。Attach到目标进程上的arthas还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出arthas,可以执行stop命令。

二、常用系统命令

1、help 查看命令帮助信息

2、cat 打印文件内容,和linux里的cat命令类似 注:汉字有乱码的问题 如果没有写路径,则显示当前目录下的文件

3、grep 匹配查找,和linux里的grep命令类似,但它只能用于管道命令

4、pwd 返回当前的工作目录,和linux命令类似

5、cls 清空当前屏幕区域

6、session 查看当前会话的信息

7、reset 重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类

8、version 输出当前目标 Java 进程所加载的 Arthas 版本号

9、history 打印命令历史

10、quit 退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

11、stop 关闭 Arthas 服务端,所有 Arthas 客户端全部退出

12、keymap Arthas快捷键列表及自定义快捷键

三、JVM相关命令 

1、sysprop:查看和修改JVM的系统属性

# 查看所有属性

sysprop

# 查看单个属性,支持通过tab补全

sysprop java.version

# 修改单个属性

sysprop user.country

sysprop user.country CN

2、sysenv:查看当前JVM的环境属性

# 查看所有属性

sysenv

# 查看单个环境变量

sysenv USER

3、vmoption:查看,更新JVM诊断相关的参数

# 查看所有的选项

vmoption

# 查看指定的选项

vmoption PrintGCDetails

# 更新指定的选项

vmoption PrintGCDetails true

4、 getstatic:查看类的静态属性

getstatic 类名 属性名

5、ognl:可替代上面getstatic命令

# 调用静态函数

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

# 获取静态类的静态字段

ognl '@demo.MathGame@random'

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

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

 四、class/classloader相关命令

1、sc: 查看JVM已加载的类信息

2、sm :查看已加载类的方法信息

参数名称 参数说明
class-pattern 类名表达式匹配
method-pattern 方法名表达式匹配
[d] 展示每个方法的详细信息
[E] 开启正则表达式匹配,默认为通配符匹配

3、jad:反编译指定已加载类的源码。

参数名称 参数说明
class-pattern 类名表达式匹配
[E] 开启正则表达式匹配,默认为通配符匹配

4、mc:编译.java文件生成.class

# 在内存中编译Hello.java为Hello.class

mc /root/Hello.java

# 可以通过-d命令指定输出目录

mc -d /root/bbb /root/Hello.java

5、redefine:加载外部的.class文件,redefine到JVM里

注意, redefine后的原来的类不能恢复,redefine有可能失败(比如增加了新的field),参考jdk本身的文档。

        1、reset命令对redefine的类无效。如果想重置,需要redefine原始的字节码。

        2、redefine命令和jad/watch/trace/monitor/tt等命令会冲突。执行完redefine之后,如果 再执行上面提到的命令,则会把redefine的字节码重置。

        3、不允许新增加field/method 正在跑的函数,没有退出不能生效

        4、结合 jad/mc 命令使用 

                # 1. 使用jad反编译demo.MathGame输出到/root/MathGame.java

                        jad --source-only demo.MathGame > /root/MathGame.java

                #2.按上面的代码编辑完毕以后,使用mc内存中对新的代码编译

                        mc /root/MathGame.java -d /root

                # 3.使用redefine命令加载新的字节码

                        redefine /root/demo/MathGame.class

五、高级命令

1、dump: 将正在JVM中运行的程序的字节码文件提取出来,保存在logs相应的目录下,不同的类加载器放在不同的目录

参数名称 参数说明
class-pattern 类名表达式匹配
[c:] 类所属 ClassLoader 的 hashcode
[E] 开启正则表达式匹配,默认为通配符匹配

# 把String类的字节码文件保存到~/logs/arthas/classdump/目录下

dump java.lang.String 

# 把demo包下所有的类的字节码文件保存到~/logs/arthas/classdump/目录下

dump demo.*

 

2、classloader:获取类加载器的信息

默认按类加载器的类型查看统计信息

classloader
按类加载器的实例查看统计信息,可以看到类加载的hashCode

classloader -l
查看ClassLoader的继承树

classloader -t
通过类加载器的hash,查看此类加载器实际所在的位置

classloader -c 680f2737
使用ClassLoader去查找指定资源resource所在的位置

classloader -c 680f2737 -r META-INF/MANIFEST.MF
使用ClassLoader去查找类的class文件所在的位置

classloader -c 680f2737 -r java/lang/String.class
使用ClassLoader去加载类

classloader -c 70dea4e --load java.lang.String

3、monitor:监控指定类中方法的执行情况

每5秒监控一次,类demo.MathGame中primeFactors方法

monitor -c 5 demo.MathGame primeFactors

4、watch :观察到指定方法的调用情况

class-pattern    类名表达式匹配
method-pattern    方法名表达式匹配
express    观察表达式
condition-express    条件表达式
[b]    在方法调用之前观察 before
[e]    在方法异常之后观察 exception
[s]    在方法返回之后观察 success
[f]    在方法结束之后(正常返回和异常返回)观察 finish
[E]    开启正则表达式匹配,默认为通配符匹配
[x:]    指定输出结果的属性遍历深度,默认为 1

5、trace :方法调用耗时追踪

trace函数指定类的指定方法

trace demo.MathGame run
如果方法调用的次数很多,那么可以用-n参数指定捕捉结果的次数。比如下面的例子里,捕捉到一次调用就退出命令。

trace demo.MathGame run -n 1
默认情况下,trace不会包含jdk里的函数调用,如果希望trace jdk里的函数,需要显式设置–skipJDKMethod false。

trace --skipJDKMethod false demo.MathGame run
据调用耗时过滤,trace大于0.5ms的调用路径

trace demo.MathGame run '#cost > .5'
可以用正则表匹配路径上的多个类和函数,一定程度上达到多层trace的效果。

trace -E com.test.ClassA|org.test.ClassB method1|method2|method3

 6、stack:查看方法调用链

获取primeFactors的调用路径

stack demo.MathGame primeFactors
条件表达式来过滤,第0个参数的值小于0,-n表示获取2次

stack demo.MathGame primeFactors 'params[0]<0' -n 2
据执行时间来过滤,耗时大于0.5毫秒

stack demo.MathGame primeFactors '#cost>0.5'

7、tt:查看方法的出入参数

tt的参数 说明
-t 记录某个方法在一个时间段中的调用
-l 显示所有已经记录的列表
-n 次数 只记录多少次
-s 表达式 搜索表达式
-i 索引号 查看指定索引号的详细调用信息
-p 重新调用指定的索引号时间碎片

记录下当前方法的每次调用环境现场。

tt -t demo.MathGame primeFactors 

8、options:全局开关

查看所有的options

options

获取option的值

options json-format

设置指定的option,打开执行结果存日志功能,输入如下命令即可:

options save-result true文章来源地址https://www.toymoban.com/news/detail-472542.html

到了这里,关于Arthas常用命令的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • shell命令之文件目录常用命令

    1.1返回到某一级目录 dirName1、dirName2、dirName3表示某一目录; 1.2返回到上级目录 也可以写成: 1.3返回到家目录 1.4返回上一次目录 2.1查看当前目录 显示当前目录下的文件和目录; -l 列出文件和目录的详细信息,可缩写成ll; -a 列出当前目录下所有文件及目录,包括隐藏的文件或

    2024年02月06日
    浏览(30)
  • Windows基础命令:目录和文件操作&文本处理&网络相关操作

    方法一:打开\\\"运行\\\"对话框(Win+R),输入cmd 也可以通过cmd /c 命令和cmd /k 命令的方式来直接运行命令(/c表示执行完命令后关闭cmd窗口;/k表示执行完命令后保留cmd窗口) 方法二:在任务栏直接搜索“cmd” 显示当前目录或改变当前目录 语法规则 (1)显示目录 显示当前驱动

    2024年02月05日
    浏览(32)
  • windows常用命令及相关命令

    目录 一、cmd的打开方式 二、windows常用命令 三、网络操作命令 四、系统操作命令 五、用户与管理 六、查看自己的本机重要信息 七、windows命令之mysql授权 任务栏搜索框里输入cmd能打开 在文档的路径框里输入cmd能打开 win + r打开运行---输入cmd ---回车进入命令提示符窗口 win

    2024年02月14日
    浏览(27)
  • cmd常用命令:更换文件夹、切换路径、查看目录和返回根目录和子目录

    打开cmd:快捷键 Win+R,输入cmd 打开cmd之后,默认是在C:Users电脑路径 文件夹中 更换磁盘:输入D:,然后回车 +dir查看当前目录 cd…可以返回上一级目录 cd 返回到根目录 输入 cd 文件夹名, 可以进入子文件夹 例如输入 cd Program Files/Java/jdk-19/ 【注意反斜杠】 cmd命令打开及切换目

    2023年04月18日
    浏览(40)
  • Linux——认识Linux的目录结构 & 常用命令 & vim命令 & 权限及其控制

    一切皆文件 文件分类 【安装】Linux环境下的 JDK的安装 安装配置 环境变量 1.进程kill -9 运行窗口退出 2.ctrl c退出 ls -a 查看所有文件(包含隐藏) ​ ls -la 查看所有文件详细信息 查看当前文件夹下的文件 在 Linux 系统中,ls 和 ll 命令都是用来列出目录内容的命令,它们的区别

    2024年02月16日
    浏览(53)
  • Linux工作原理2常用基本命令和目录层次结构

    本章是对本书中你将遇到的Unix命令和工具的指南。 为什么是Unix命令?这不是一本关于Linux如何工作的书吗?当然是的,但Linux在本质上是一种Unix风格。在本章中,你会看到Unix这个词,而不是Linux,因为你可以把你学到的东西直接带到BSD和其他Unix风味的系统中去。我试图避免

    2024年02月06日
    浏览(36)
  • liunx 常用命令1-目录/文件:新建、修改、移动和删除

        创建         mkdir newdir         #递归地创建多级目录         mkdir -p /path/to/newdir/subdir            更改权限         chmod 755 /path/to/directory          更改所有者和组         ##将“/home/user/documents”目录的所有者更改为“newowner”,组更改为“newgroup”   

    2024年02月01日
    浏览(38)
  • linux常用命令介绍 06 篇——Linux查看目录层级结构以及创建不同情况的层级目录

    Linux命令01篇——Linux解压缩文件常用命令. Linux命令02篇——linux日常常用命令介绍. linux常用命令介绍 03 篇——常用的文本处理工具之grep和cut(以及部分正则使用). linux常用命令介绍 04 篇——uniq命令使用介绍(Linux重复数据的统计处理). linux常用命令介绍 05 篇——实际应用

    2024年02月12日
    浏览(36)
  • cmake常用命令(1)——函数相关

    cmake中的函数与其他语言相似,表示一个命令集,可以被重复调用。形式如下: function:表示函数开始 name:函数名 arg1 ...:表示参数与name用 空格分隔 ,多个参数间用 空格分隔 ,可省略。 commands:表示命令集。 enfunction:表示函数结束。endfunction实际形式为: 其中name可以省

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包