本文已参与「新人创作礼」活动,一起开启掘金创作之路。
命令大全
1. 使用docker进入arthas命令
docker exec -it 6a04266c2a48 /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
如图所示
红色区域为执行的代码块
黄色区域为每个项目对应的${containerId}
蓝色区域为要监控的项目(输入1进入到arthas)
2. 使用k8s进入arthas命令
kubectl exec -it ${pod} --container ${containerId} -- /bin/bash -c "wget https://arthas.aliyun.com/arthas-boot.jar && java -jar arthas-boot.jar"
3. 查看当前jvm信息
| 命令 | 描述 |
|---|---|
| jvm | 查看当前jvm信息 |
| jvm / grep PATH | 查找Java应用的classpath |
jvm中参数说明 RUNTIME(内存管理)参数说明
MACHINE-NAME 机器名
JVM-START-TIME jvm运行开始时间
MANAGEMENT-SPEC-VERSION 管理规范版本
SPEC-NAME 规范名称
SPEC-VENDOR 规范提供商
SPEC-VERSION 规范版本
VM-NAME 虚拟机名称
VM-VENDOR 虚拟机提供者
VM-VERSION 虚拟机版本
INPUT-ARGUMENTS 输入参数
CLASS-PATH 类路径
BOOT-CLASS-PATH 引导类路径
LIBRARY-PATH 库路径
CLASS-LOADING (类加载)参数说明
LOADED-CLASS-COUNT 装载类计数
TOTAL-LOADED-CLASS-COUNT 总类数
UNLOADED-CLASS-COUNT 非类计数
IS-VERBOSE 是否冗余
COMPILATION (编译)参数说明
NAME 编译机器名称
TOTAL-COMPILE-TIME 总的编译时间
GARBAGE-COLLECTORS (垃圾收集器)参数说明
PS Scavenge 垃圾收集器:清道夫
collectionCount 技术
collectionTime 收集时间
PS MarkSweep 垃圾收集器:标记扫描
MEMORY-MANAGERS (内存管理器)参数说明
CodeCacheManager 编码缓存管理器
Metaspace Manager 元空间管理器
MEMORY (持久化工具)参数说明
HEAP-MEMORY-USAGE 堆内存使用
NO-HEAP-MEMORY-USAGE 无堆内存使用
PENDING-FINALIZE-COUNT 待定计数
OPERATING-SYSTEM (操作系统)参数说明
OS 操作系统类型
ARCH 发行版本
PROCESSORS-COUNT 处理器总数
LOAD-AVERAGE 负荷平均
LOAD-AVERAGE 版本
THREAD (线程)参数说明
COUNT 线程总数
DAEMON-COUNT 守护进程总数
PEAK-COUNT 线程最高总数
STARTED-COUNT 计数线程(从开始到现在一共)
DEADLOCK-COUNT 死锁计数
FILE-DESCRIPTOR (文件描述符)参数说明
MAX-FILE-DESCRIPTOR-COUNT JVM进程最大可以打开的文件描述符数
OPEN-FILE-DESCRIPTOR-COUNT JVM当前打开的文件描述符数
4. 查看jvm的系统属性
| 命令 | 描述 |
|---|---|
| sysprop | 查看jvm的全部系统属性 |
| sysprop ${key} | 查看单个系统属性 |
| Sysprop {value} | 修改单个系统属性 |
5. 查看jvm的环境属性
| 命令 | 描述 |
|---|---|
| sysenv | 查看jvm的全部环境属性 |
| sysenv ${key} | 查看某一个jvm环境属性 |
6. 查看、更新VM(虚拟机)诊断参数
| 命令 | 描述 |
|---|---|
| vmoption | 查看vm参数 |
| vmoption ${key} | 查看单个vm参数 |
| vmoption {value} | 更新单个vm参数 |
7. 查看jvm 的Perf Counter(性能计数器)
| 命令 | 描述 |
|---|---|
| perfcounter | 查看全部 |
| perfcounter -d | 查看详细信息 |
注意:jdk9以上需要在应用启动后加下面参数
--add-opens java.base/jdk.internal.perf=ALL-UNNAMED --add-exports
java.base/jdk.internal.perf=ALL-UNNAMED
8. 查看mbean信息(javabean)
| 命令 | 描述 | |
|---|---|---|
| mbean | 查看全部mbean的名称 | |
| mbean -m ${名称} | 查看mbean的元信息 | |
| mbean ${名称} | 查看mbean属性信息(支持通配符*匹配) | |
| mbean -i 1000 ${名称} | 实时监控某一个mbean | |
| mbean -E ${名称} | 这个为正则表达式 可匹配名称里面的元素 元素用 | 分割 |
示例:
mbean -E java.lang:type=Threading PeakThreadCount|ThreadCount|DaemonThreadCount
9. 查看类的静态属性
| 命令 | 描述 |
|---|---|
| getstatic <类名> <静态字段名称> | 直接查看类中的静态属性 |
10. 查看静态属性(进阶)
| 命令 | 描述 |
|---|---|
| ognl '@类路径.类名称@静态名称' | 直接查看类中的静态属性 |
ognl详细用法官方地址:https://commons.apache.org/proper/commons-ognl/language-guide.html
11. 查看jvm已加载的类信息
| 命令 | 描述 |
|---|---|
| sc -d <类的包路径.类名称> | 直接查看类中的静态属性 |
| sc -d -f <类的包路径.类名称> | 查看当前类的成员变量 |
| sc -E <类的包路径.类名称> | 使用通配符进行匹配 |
12. 查看已加载类的方法信息
| 命令 | 描述 |
|---|---|
| sm 类的包路径.类名称 | 展示每个方法的详细信息 |
| sm -d <类的包路径.类名称 方法名> | 展示某一个方法的详细信息 |
13. 查看类路径
| 命令 | 描述 |
|---|---|
| dump 类的包路径.类名称 | 展示类的详细路径 |
| dump -d 目标目录 类的包路径.类名称 | 将这个文件转存到目标目录 |
| dump 类的包路径.* | 展示这个包下的全部文件地址 |
14. 堆转储
| 命令 | 描述 |
|---|---|
| heapdump 保存路径 | 堆转储到指定文件 |
| heapdump --live 保存路径 | 只转储生存堆到指定文件 |
| heapdump | 转储到临时文件 |
15. 查询内存对象,强制GC等功能
16. 查看类加载器的继承树,urls,类加载信息
17. 重发某个class文件
注意:如果要消除重发,需要删除这个类对应的重发记录,再重新发一下
18. 查看当前方法被调用的调用路径
| 命令 | 描述 |
|---|---|
| stack <类的包路径.类名称 方法名 > | 查看类的调用路径 |
| stack <类的包路径.类名称 方法名 > 'params[0]<0' -n 2 | 限制查看类的调用次数(推荐使用) |
| stack <类的包路径.类名称 方法名 > '#cost>5' | 使用执行时间来过滤 |
19. 对方法进行实时检测
| 命令 | 描述 |
|---|---|
| tt -t <类的包路径.类名称 方法名 > | 查看类的调用路径,可以在后面加 -n 3 来限制操作次数 |
| tt -i | 查看某一次的调用信息 |
| tt -i -p | 重做某一次调用 |
20. 生成火焰图(略)
21. 基础命令
| 命令 | 描述 |
|---|---|
| cat 路径文件名 | 打印文件内容 |
| echo 'hello' | 打印参数 |
| base64 /tmp/test.txt | 将文件进行base64编码 |
| base64 -d /tmp/result.txt | 将base64文件解码 |
| base64 -d /tmp/result.txt --output /tmp/bbb.txt | 使用base64解码并保存到目标文件中 |
常用命令
1. 查看系统实时数据面板
2. 查看当前线程相关命令
3. 方法执行监控
4. 函数(方法)执行数据观测
5. 查看方法每个路径耗时
6. 反编译源码
7. 查看logger信息(未补充完整)