Arthas - 开源的java诊断工具,非常有用
常用命令
help 查看帮助
help COMMAND 查看指定命令的详细帮助
COMMAND -h 查看指定命令的详细帮助
double tab 查看支持的所有命令 dashboard 查看线程JVM信息仪表盘 thread 查看所有线程
thread 查看指定线程堆栈
thread -n 查看前5个线程堆栈
thread -n - 查看所有线程堆栈
thread -b 查看阻塞线程
thread -i 在计算CPU使用率时指定采样间隔(2秒后输出结果) jad javax.servlet.Servlet 对jvm已加载的类进行反编译
>>>
java -jar cfr-0.148.jar /tmp/TestClass.class 可以反编译class文件,org.benf:cfr0.
<<< mc -c ClassLoaderHash /tmp/Test.java 编译java文件
<<<
有依赖关系的单个java文件用javac编译是肯定不行的。内存编译器mc则可以,但也有可能会个别代码编译失败
<<< sc javax.servlet.Servlet 查找jvm已加载的类
sc -d javax.servlet.Servlet 查找jvm已加载的类,打印详细 stack com.TestClass testMethod 查看方法的调用堆栈,重新触发后打印 trace com.TestClass testMethod 查看方法的子调用方法的耗时 monitor -c com.TestClass testMethod 监控方法的调用次数,成功率等信息,每隔3秒输出一次。 classloader 查看类加载器数量,以及每个加载器加载的类数量 【ognl】 执行表达式
ognl '@java.lang.System@out.println("hello")' 调用静态方法
ognl '#str=new String("hello"), #str.length()' 这样都行
ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}' 执行多个表达式,并赋值给临时变量 【redefine + sc + jad】 实现不重启加载class
redefine 加载外部的.class文件,redefine jvm已加载的类
redefine -c ClassLoaderHash /tmp/TestClass.class 将修改后编译出来的class文件放到指定目录,并redefine
>>>
其中ClassLoaderHash为该类的类加载器HashCode,可通过"sc com.TestClass -d"查询
必须指定ClassLoaderHash,否则修改不生效。redefine后可以使用jad反编译查看修改。
注意:redefine后的原来的类不能恢复,可以redefine原始的class文件来还原
限制:. 不允许新增加field/method . 修改正在跑的函数,没有退出不能生效
<<< 【watch】 观察方法的执行,有点像在方法中打断点debug。用法同tt中的-w,相当于实时的tt
watch 类 方法 观察表达式 条件表达式 用法
watch com.TestClass testMethod returnObj 观察方法的执行,包括观察当前对象、传入参数、返回值、抛出的异常等等
watch com.TestClass testMethod "@java.lang.Thread@currentThread().getName()" 调用静态方法
watch com.TestClass testMethod target 观察当前对象
watch com.TestClass testMethod 'new String("hello")' 像极了debug模式的表达式
watch com.TestClass testMethod {params[],returnObj} -e 观察方法执行的第一个入参合和返回值,仅当方法抛出异常时才打印
>>>
https://github.com/alibaba/arthas/issues/71 表达式用法说明
https://alibaba.github.io/arthas/advice-class.html 表达式变量说明, 如target、params、returnObj等变量
方法重载问题:使用条件表达式(stack,trace等作用于方法的命令也都适用)
. 指定参数长度 watch com.TestClass testMethod params[] params.length==
. 指定某参数类型 watch com.TestClass testMethod params[] 'params[1] instanceof String'
<<< 【tt】 记录方法调用的时间片信息
tt -t com.TestClass testMethod 开始记录
tt -l 查看历史记录
tt -i ID 查看某个时间片信息(含参数值)
tt -i ID -w params[] 查看时间片方法的第一个参数的值,-w用法同watch命令
tt -i ID -w params[].length() 查看时间片方法的第一个参数的值,支持对象访问
tt -i ID -w {params[],param[]} 查看时间片方法的多个参数的值
>>>
spring mvc应用
拦截RequestMappingHandlerAdapter这个调用,获取到spring context为所欲为
tt -t org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter invokeHandlerMethod
tt -i invokeHandlerMethodID -w 'target.getApplicationContext().getBean("helloWorldService")'
<<<
使用/安装指南【下载工具】
https://alibaba.github.io/arthas/arthas-boot.jar
或
https://alibaba.github.io/arthas/install.sh(sh install.sh下载启动脚本as.sh) 【使用条件】
环境需要安装java
依赖jdk/lib/tools.jar
如果只有jre,可拷贝jdk的tools.jar到jre/lib/下
as.sh需要telnet命令,若无telnet可使用arthas-boot.jar方式 【启动工具】
java -jar arthas-boot.jar 或 sh as.sh 第一次启动会下载arthas-3.1.-bin.zip到/root/.arthas/lib/3.1./arthas下并解压。
每次启动会检测是否有java进程,然后输入数字选择需要诊断的进程。(PS:工具检测进程的原理$JAVA_HOME/bin/jps -l -v)
sh as.sh --repo-mirror aliyun //如果下载速度比较慢,可以使用aliyun的镜像
sh as.sh --target-ip 192.168.1.9 //指定telnet监听IP
sh as.sh -h //查看更多启动配置
sh as.sh PID //指定进程诊断 linux-8ku8:/opt/arthas # sh as.sh
Arthas script version: 3.1.
[INFO] JAVA_HOME: /opt/jdk1..0_74
[INFO] Process already using port
[INFO] Process already using port
Found existing java process, please choose one and hit RETURN.
* []: org.apache.catalina.startup.Bootstrap 【默认自动下载目录】
linux-8ku8:~/.arthas/lib/3.1./arthas # ls -lh
total 22M
-rw-r--r-- root root 11M Jun : arthas-3.1.-bin.zip
-rw-r--r-- root root .2K Sep arthas-agent.jar
-rw-r--r-- root root 109K Sep arthas-boot.jar
-rw-r--r-- root root 394K Sep arthas-client.jar
-rw-r--r-- root root 11M Sep arthas-core.jar
-rw-r--r-- root root .7K Sep arthas-demo.jar
-rw-r--r-- root root .9K Sep arthas-spy.jar
-rwxr-xr-x root root .6K Sep as-service.bat
-rwxr-xr-x root root .1K Sep as.bat
-rwxr-xr-x root root 28K Sep as.sh
-rwxr-xr-x root root Sep install-local.sh 【启动成功】
linux-8ku8:/opt/arthas # sh as.sh
........
,---. ,------. ,--------.,--. ,--. ,---. ,---.
/ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'
........
[arthas@]$ help //查看帮助;double tab查看支持的所有命令;help COMMAND查看指定命令的详细帮助
[arthas@]$ exit //断开连接,工具还在运行。重新执行as.sh可再次进入,或者telnet 127.0.0.1 3658也可再次重连(后者连接速度超快)
[arthas@]$ shutdown 或 stop //关闭工具 【离线安装】
将arthas-3.1.-bin.zip解压到/root/.arthas/lib/3.1./arthas/目录下
非root用户解压到/home/$USER/.arthas/lib/3.1./arthas/目录下,注意修改文件的用户属组
然后启动即可,不同用户下执行as.sh,会调用各自用户家目录下的arthas
只要创建了ARTHAS_HOME目录,即/home/$USER/.arthas/lib/$USER_VERSION/arthas,启动as.sh时就不会联网下载包,之后把包解压进去即可。 快捷安装:解压arthas-3.1.4-bin.zip后执行install-local.sh即可。原理上面的一样,自动创建ARTHAS_HOME目录并拷贝包进去。
ARTHAS_HOME目录也可以是自定义的路径,sh as.sh --arthas-home <value> 使用指定的ARTHAS_HOME目录执行 【Arthas用户文档】
https://github.com/alibaba/arthas/blob/master/README_CN.md
https://alibaba.github.io/arthas/dashboard
Arthas - 开源的java诊断工具,非常有用的更多相关文章
- 款阿里开源的 Java 诊断工具Arthas
Arthas是什么鬼? Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题. Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux. ...
- 阿里巴巴开源框架java诊断工具--Arthas
下载:arthas wget https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar --target-i ...
- 推荐一款阿里开源的 Java 诊断工具,好用到爆!
Arthas是什么鬼? Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题. Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux. ...
- 一款阿里开源的 Java 诊断工具
Arthas是什么鬼? Arthas是一款阿里巴巴开源的 Java 线上诊断工具,功能非常强大,可以解决很多线上不方便解决的问题. Arthas诊断使用的是命令行交互模式,支持JDK6+,Linux. ...
- Arthas阿里开源的 Java 诊断工具
当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决: 1.这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 2.我改的代码为什么没有执行到?难道是我没 commi ...
- Arthas Alibaba 开源 Java 诊断工具
Arthas 用户文档 English Docs Arthas(阿尔萨斯) 能为你做什么? Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱. 当你遇到以下类似问题而束手无策时,A ...
- 阿里JAVA诊断工具Arthas的初步使用
Arthas 是Alibaba开源的Java诊断工具,主要解决以下问题: 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception? 我改的代码为什么没有执行到?难道是我没 comm ...
- Alibaba Java诊断工具Arthas查看Dubbo动态代理类
原创/朱季谦 阅读Dubbo源码过程中,会发现,Dubbo消费端在做远程调用时,默认通过 Javassist 框架为服务接口生成动态代理类,接着再去调用代理类实现远程接口调用.在阅读这部分源码时,最后 ...
- java 诊断工具——Arthas
该说不说!小编做的这些功能,最讨厌的就是优化!某些前辈大佬写的代码小辈我实在不敢恭维!那逻辑!那sql! 接下来!今天的主角就登场了,阿里巴巴最近开源出来的一个针对 java 的工具,主要是针对 ja ...
随机推荐
- Python【每日一问】22
问: [基础题]:输出 9*9 口诀表 [提高题]:古典问题:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? ...
- Spring Boot 2整合Redis做缓存
既然是要用Redis做缓存,自然少不了安装了.但是本文主要讲Spring Boot与Redis整合.安装教程请另行百度! 1.首先是我们的Redis配置类 package com.tyc; impor ...
- Adobe Audition cc 修改音频 --- 淡出、淡入,合并、裁剪
1.导入音频到Adobe Audition cc中支持多个音频操作 也可以使用鼠标把音频放入其中 2.淡出淡入: 红色圈中的就是淡出淡入的控制符 左手按住ctrl 或者 shift 键 右手按住鼠 ...
- [转帖]中国首颗通信能力达10Gbps的低轨宽带卫星出厂
中国首颗通信能力达10Gbps的低轨宽带卫星出厂 From 新浪科技 原来卫星都能够达到10G带宽了 我们公司的工位还TM有百兆的呢. 近日,中国首颗通信能力可达到10Gbps的5G低轨宽带卫星正式出 ...
- 超级简单POI多sheet导出Excel实战
本章节主要基于上一章节单sheet导出的基础上进行改造实现多sheet的导出,上一章节参考地址:https://www.cnblogs.com/sunny1009/p/11437005.html 1. ...
- my first blog by cnblogs
#include <stdio.h> int main() { printf("hello everyone."); ; } 上面为我的第一个C语言测试代码,仅供初学者 ...
- Oracel 数据库表操作
表结构操作 创建表 create table tableName (id varchar2(36) primary key, name varchar2(36), age number(12,2), ...
- 解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题
解决Spring Boot 从1.x升级到 2.x 后 单点登陆(SSO)问题 在学习Spring Cloud 时,遇到了授权服务oauth 相关内容时,总是一知半解,因此决定先把Spring S ...
- NodeJS新建服务器以及CommonJS规范
1.什么是node.js?(1)Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效.( ...
- 使用EF Core+CodeFirst建立ASP.NET Core MVC项目
本篇随笔介绍如何使用.NET Core+EF Core创建Web应用程序 首先借用官网的话简单介绍一下ASP.NET Core ASP.NET Core 是一个跨平台的高性能开源框架,用于生成基于云且 ...