深圳住房和建设局网站 龙华,广州市招投标网站,关于网站开发的参考文献有哪些,微商做图王官方网站Arthas
Alibaba开源的Java诊断工具#xff0c;在线排查问题#xff0c;无需重启#xff0c;动态跟踪Java代码#xff0c;实时监控JVM状态Arthas支持JDK6#xff0c;支持Linux/Mac/Windows#xff0c;采用命令行交互模式#xff0c;同时提供丰富的Tab自动补全功能#…Arthas
Alibaba开源的Java诊断工具在线排查问题无需重启动态跟踪Java代码实时监控JVM状态Arthas支持JDK6支持Linux/Mac/Windows采用命令行交互模式同时提供丰富的Tab自动补全功能进一步方便进行问题的定位和诊断Arthas可以帮助我们解决以下问题 这个类从哪个jar包加载的为什么会报各种类相关的Exception我改的代码为什么没有执行到难道我没commit?分支搞错了遇到问题无法在线上debug难道只能通过日志重新发布吗线上遇到某个用户的数据处理问题但线上同样无法debug线下无法重现是否有一个全局视角来查看系统的运行情况有什么办法可以监控到JVM的实时运行情况怎样快速定位应用的热点生成火焰图 基于哪些工具开发而来 greys-anatomyArthas基于Greys二次开发而来termd是一款优秀的命令行程序开发框架crshArthas的文本渲染功能基于Crash中的文本渲染功能开发cliArthas的命令行界面基于vert.x提供的cli库进行开发compilerArthas里的内存编译器代码来源Apache Commons Net Arthas里的Telnet Client代码来源Java Agent运行在main方法之前的拦截器它内定的就去名叫premain先执行premain方法然后执行main方法ASM一个通用的Java字节码操作和分析框架它可以用于修改现有的类或直接以二进制形式动态生成类ASM提供了一些常见的字节码转换和分析算法可以从它们构建定制的复杂转换和代码分析工具它的设计和实现就可能小和快更关注性能非常适合在动态系统中使用
Arthas安装
①先在Linux上安装JDK设置环境变量 测试代码
[rootmysql8 ~]# ls
anaconda-ks.cfg jdk-8u411-linux-x64.tar.gz logs mysql80-community-release-el7-11.noarch.rpm
[rootmysql8 ~]# tar xf jdk-8u411-linux-x64.tar.gz
[rootmysql8 ~]# mv jdk1.8.0_411 /usr/local/
#配置环境变量使用JDK可用
[rootmysql8 ~]# tail -2 /etc/profile
JAVA_HOME/usr/local/jdk1.8.0_411
export PATH$PATH:$JAVA_HOME/bin
#下载arthas
[rootmysql8 ~]# curl -O https://arthas.aliyun.com/arthas-boot.jar
#执行死锁程序代码
[rootmysql8 /]# java ThreadDeadLock
#重新打开一个容口启动Arthas[rootmysql8 /]# java -jar arthas-boot.jar
[INFO] JAVA_HOME: /usr/local/jdk1.8.0_411/jre
[INFO] arthas-boot version: 3.7.2
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 1568 ThreadDeadLock
1
[INFO] arthas home: /root/.arthas/lib/3.7.2/arthas
[INFO] Try to attach process 1568
[INFO] Attach process 1568 success.
[INFO] arthas-client connect 127.0.0.1 3658,---. ,------. ,--------.,--. ,--. ,---. ,---./ O \ | .--. --. .--| -- | / O \ .-
| .-. || --. | | | .--. || .-. |. -.
| | | || |\ \ | | | | | || | | |.- |
-- ---- -- -- -- ---- -------wiki https://arthas.aliyun.com/doc
tutorials https://arthas.aliyun.com/doc/arthas-tutorials.html
version 3.7.2
main_class
pid 1568
time 2024-06-06 21:37:48
#arthas默认监听本地IP127.0.0.1远程主机无法访问启动arthas时通过--target-ip参数修改远程连接IP
[rootmysql8 /]# java -jar arthas-boot.jar --target-ip 192.168.29.201
#[arthas2081]$显示表示正确进入监控客户端可以执行相应命令进行查看
#退出arthas(quit/exit)
#使用stop/shutdown关闭arthas服务器并退出客户端
[arthas2081]$ quit
#查看arthas日志文件--默认在用户家目录下logs/arthas目录下arthas.log文件
[rootmysql8 /]# cat ~/logs/arthas/arthas.log
#查看帮助
[rootmysql8 /]# java -jar arthas-boot.jar -h命令使用
基础指令
help查看命令帮助信息可以查看当前 arthas 版本支持的指令或者查看具体指令的使用说明cat打印文件内容和 linux 里的 cat 命令类似。echo打印参数和 linux 里的 echo 命令类似。grep类似传统的grep命令匹配查找teetee 指令会从标准输入设备读取数据将其内容输出到标准输出设备同时保存成文件。pwd返回当前的工作目录和 linux 命令类似cls清空当前屏幕区域。注非终端模式下使用 cls 指令会提示Command ‘cls’ is only support tty session.。session查看当前会话的信息显示当前绑定的 pid 以及会话 id。reset重置增强类将被 Arthas 增强过的类全部还原Arthas 服务端stop时会重置所有增强过的类version输出当前目标 Java 进程所加载的 Arthas 版本号history打印命令历史。quit退出当前 Arthas 客户端其他 Arthas 客户端不受影响。等同于exit、logout、q三个指令stop关闭 Arthas 服务端所有 Arthas 客户端全部退出。keymapkeymap命令输出当前的快捷键映射表
[arthas2299]$ version
3.7.2
[arthas2299]$ pwd
/
[arthas2299]$ sessionName Value
--------------------------------------------------JAVA_PID 2299SESSION_ID e0bf1234-57b0-478e-920b-08063ccf714b
[arthas2299]$ echo 123
123
[arthas2299]$ history1 cd /root/.arthas/lib/3.7.2/arthas2 jps... ...
[arthas2299]$ stop
Resetting all enhanced classes ...
Affect(class count: 0 , method count: 0) cost in 0 ms, listenerId: 0
Arthas Server is going to shutdown...
[arthas2299]$ session (e0bf1234-57b0-478e-920b-08063ccf714b) is closed because server is going to shutdown.
JVM相关
dashboard - 当前系统的实时数据面板 [i:] 刷新实时数据的时间间隔 (ms)默认 5000ms[n:] 刷新实时数据的次数 getstatic - 查看类的静态属性heapdump - dump java heap, 类似 jmap 命令的 heap dump 功能jvm - 查看当前 JVM 的信息logger - 查看和修改 loggermbean - 查看 Mbean 的信息memory - 查看 JVM 的内存信息ognl - 执行 ognl 表达式perfcounter - 查看当前 JVM 的 Perf Counter 信息sysenv - 查看 JVM 的环境变量sysprop - 查看和修改 JVM 的系统属性thread - 查看当前 JVM 的线程堆栈信息 id 线程 id[n:] 指定最忙的前 N 个线程并打印堆栈[b] 找出当前阻塞其他线程的线程[i ] 指定 cpu 使用率统计的采样间隔单位为毫秒默认值为 200[–all] 显示所有匹配的线程 vmoption - 查看和修改 JVM 里诊断相关的 optionvmtool - 从 jvm 里查询对象执行 forceGc
#输入dashboard显示相应信息--动态刷新屏幕
[arthas1568]$ dashboard
ID NAME GROUP PRIORITY STATE %CPU DELTA_TIME TIME INTERRUPTED DAEMON
-1 C2 CompilerThread0 - -1 - 0.0 0.000 0:0.282 false true
-1 C1 CompilerThread1 - -1 - 0.0 0.000 0:0.258 false true
-1 VM Periodic Task Thread - -1 - 0.0 0.000 0:0.150 false true
-1 GC task thread#1 (ParallelGC) - -1 - 0.0 0.000 0:0.092 false true
-1 GC task thread#0 (ParallelGC) - -1 - 0.0 0.000 0:0.090 false true
10 DestroyJavaVM main 5 RUNNABLE 0.0 0.000 0:0.085 false false
22 arthas-NettyHttpTelnetBootstrap-3 system 5 RUNNABLE 0.0 0.000 0:0.055 false true
-1 VM Thread - -1 - 0.0 0.000 0:0.045 false true
11 Attach Listener system 9 RUNNABLE 0.0 0.000 0:0.021 false true
16 arthas-NettyHttpTelnetBootstrap-3 system 5 RUNNABLE 0.0 0.000 0:0.017 false true
8 Thread-0 main 5 BLOCKED 0.0 0.000 0:0.007 false false
Memory used total max usage GC
heap 19M 74M 839M 2.27% gc.ps_scavenge.count 5
ps_eden_space 1M 30M 301M 0.47% gc.ps_scavenge.time(ms) 78
ps_survivor_space 0K 2560K 2560K 0.00% gc.ps_marksweep.count 1
ps_old_gen 17M 41M 629M 2.80% gc.ps_marksweep.time(ms) 39
nonheap 27M 28M -1 97.60%
code_cache 4M 4M 240M 1.83%
metaspace 20M 21M -1 97.59%
Runtime
os.name Linux
os.version 3.10.0-1160.el7.x86_64
java.version 1.8.0_411
java.home /usr/local/jdk1.8.0_411/jre
systemload.average 0.00
processors 2
#-------------------------------thread ---------------------------------
[arthas2299]$ thread
Threads Total: 22, NEW: 0, RUNNABLE: 8, BLOCKED: 2, WAITING: 3, TIMED_WAITING: 2, TERMINATED: 0, Internal threads: 7
ID NAME GROUP PRIORITY STATE %CPU DELTA_TIME TIME INTERRUPTED DAEMON
46 arthas-command-execute system 5 RUNNABLE 0.18 0.000 0:0.002 false true
-1 VM Periodic Task Thread - -1 - 0.12 0.000 0:0.230 false true
-1 C1 CompilerThread1 - -1 - 0.05 0.000 0:0.406 false true
-1 C2 CompilerThread0 - -1 - 0.0 0.000 0:0.442 false true
2 Reference Handler system 10 WAITING 0.0 0.000 0:0.001 false
#-------------------------------thread ---------------------------------
#-------------------------------生成dump文件
[arthas2299]$ heapdump /tmp/OOMTest.hprof
Dumping heap to /tmp/OOMTest.hprof ...
Heap dump file created
class/classloader相关
classloader - 查看 classloader 的继承树urls类加载信息使用 classloader 去 getResourcedump - dump 已加载类的 byte code 到特定目录jad - 反编译指定已加载类的源码mc - 内存编译器内存编译.java文件为.class文件redefine - 加载外部的.class文件redefine 到 JVM 里retransform - 加载外部的.class文件retransform 到 JVM 里sc - 查看 JVM 已加载的类信息 class-pattern 类名表达式匹配method-pattern 方法名表达式匹配[d] 输出当前类的详细信息包括这个类所加载的原始文件来源、类的声明、加载的 ClassLoader 等详细信息。 如果一个类被多个 ClassLoader 所加载则会出现多次[E] 开启正则表达式匹配默认为通配符匹配[f] 输出当前类的成员变量信息需要配合参数-d 一起使用[x:] 指定输出静态变量时属性的遍历深度默认为 0即直接使用 toString 输出[c:] 指定 class 的 ClassLoader 的 hashcode[classLoaderClass:] 指定执行表达式的 ClassLoader 的 class name[n:] 具有详细信息的匹配类的最大数量默认为 100[cs ] 指定 class 的 ClassLoader#toString() 返回值。长格式[classLoaderStr ] sm - 查看已加载类的方法信息 class-pattern 类名表达式匹配method-pattern 方法名表达式匹配[d] 展示每个方法的详细信息[E] 开启正则表达式匹配默认为通配符匹配[c:] 指定 class 的 ClassLoader 的 hashcode[classLoaderClass:] 指定执行表达式的 ClassLoader 的 class name[n:] 具有详细信息的匹配类的最大数量默认为 100
monitor/watch/trace相关
monitor - 方法执行监控stack - 输出当前方法被调用的调用路径trace - 方法内部调用路径并输出方法路径上的每个节点上耗时tt - 方法执行数据的时空隧道记录下指定方法每次调用的入参和返回信息并能对这些不同的时间下调用进行观测watch - 方法执行数据观测
其它
profiler - 使用async-profiler对应用采样生成火焰图
官方文档