Arthas 应用诊断利器学习及使用(三) 基础命令help,cat,echo

468 阅读2分钟

这是我参与更文挑战的第1天,活动详情查看: 更文挑战

本文内容基于arthas 3.5.1 版本,介绍基础命令help,cat,echo的使用及实现。

一.help命令

查看命令帮助信息,可以查看当前arthas版本支持的指令,或者查看具体指令的使用说明。

参数名称参数缩写参数说明必填项示例
cmd命令名称可选help cat

文件位于com.taobao.arthas.core.command.basic1000.HelpCommand.java

判断是否有指定参数,即命令名称。如果没有传参数则返回所有命令,有传参数并且有实际返回的话就返回指定命令的描述及名称。 image.png

调用allCommands(Session session)方法,该方法获取所有的命令。 具体实现为获取两个实现了CommandResolver接口的实现类,分别为BuiltinCommandPackBuiltinCommandResolver,两个类都实现了commands方法。都是通过主动添加命令到一个列表中然后返回该列表。

image.png

这里可以做成自动扫描的方式。如果要做成自动扫描命令的方式的话,可以通过扫描注解的方式对指定的路径下的包,主要对com.taobao.arthas.core.command这个包扫描即可。利用现成的方法ArthasReflectUtils.getClasses获取指定的class,当然这种方式相对于原有的方式性能上会有所损失,自定义排序较麻烦。en..还是原来的好,当我没说

image.png

二.cat命令

打印文件内容,和linux里的cat命令类似。

参数名称参数缩写参数说明必填项示例
files可以多个文件名,空格分隔必填cat /tmp/a.txt
--encoding指定编码可选cat --encodeing=UTF-8 /tmp/a.txt
--sizeLimit-M显示的字节数默认128kb,最大可以8Mb,非终端模式下目前最多为128kb可选cat -M 1024 /tmp/a.txt

文件位于com.taobao.arthas.core.command.basic1000.CatCommand.java

遍历访问files参数中的文件,判断文件路径是否存在,文件路径是否是文件夹,再循环判断文件大小是否超出限制,最后将文件中的内容转换成指定编码的字符串输出。这里的两个循环代码可以合并到一起去。

image.png

三.echo命令

打印参数,和linux里的echo命令类似。

参数名称参数缩写参数说明必填项示例
message要输出的内容可选echo 'hello'

文件位于com.taobao.arthas.core.command.basic1000.EchoCommand.java

直接返回message参数的内容,跟linux的echo命令还是有差距的。

image.png