arthas的监控java性能
目录
- 1 arthas简介
- 2 arthas下载
- 3 arthas的使用
- 3.1 arthas启动
- 3.2 常用命令
- 3.2.1 dashboard
- 3.2.2 thread
- 3.2.3 jad
- 3.2.4 watch
- 3.2.5 getstatic
- 3.2.6 heapdump
- 3.2.6.1 dump到指定的文件
- 3.2.6.2 dump live 对象
- 3.2.6.3 dump 到临时文件
- 3.2.7 jvm
- 3.2.8 logger
- 3.2.9 mbean
- 3.2.9.1 列出所有 Mbean 的名称
- 3.2.9.2 查看 Mbean 的元信息
- 3.2.9.3 查看 mbean 属性信息
- 3.2.9.4 mbean 的 name 支持通配符匹配
- 3.2.9.5 通配符匹配特定的属性字段:
- 3.2.9.6 使用-E命令切换为正则匹配:
- 3.2.9.7 使用-i命令实时监控
- 3.2.10 memory
- 3.2.11 ognl
- 3.2.11.1 通过 hashcode 指定 ClassLoader
- 3.2.11.2 执行多行表达式
- 3.2.12 perfcounter
- 3.2.13 sysenv
- 3.2.14 vmoption
- 3.2.15 vmtool
- 3.2.16 classloader
- 3.2.17 dump
- 3.2.18 mc
- 3.2.19 redefine
- 3.2.20 retransform
- 3.2.21 sc
- 3.2.22 sm
- 3.2.23 monitor
- 3.2.24 stack
- 3.2.25 trace
- 3.2.26 tt
- 3.2.27 auth
- 3.2.28 options
- 3.2.29 base64
- 3.2.30 cat
- 3.2.31 cls
- 3.2.32 echo
- 3.2.33 grep
- 3.2.34 help
- 3.2.35 history
- 3.2.35.1 查看最近执行的3条指令
- 3.2.35.2 清空指令
- 3.2.36 keymap
- 3.2.37 pwd
- 3.2.38 tee
- 3.2.39 profile
- 3.2.40 session
- 3.2.41 version
- 3.2.42 quit
- 3.2.43 reset
- 3.2.43.1 还原指定类
- 3.2.43.2 还原所有类
- 3.2.44 stop
1 arthas简介
Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。
参考地址:
https://arthas.aliyun.com/
2 arthas下载
curl -O https://arthas.aliyun.com/arthas-boot.jar
3 arthas的使用
3.1 arthas启动
$ $ java -jar arthas-boot.jar
* [1]: 71560 math-game.jar[2]: 35542
进程是第 1 个,则输入 1,再输入回车/enter。Arthas 会 attach 到目标进程上,并输出日志:
[INFO] Try to attach process 71560
[INFO] Attach process 71560 success.
[INFO] arthas-client connect 127.0.0.1 3658,---. ,------. ,--------.,--. ,--. ,---. ,---./ O \ | .--. ''--. .--'| '--' | / O \ ' .-'
| .-. || '--'.' | | | .--. || .-. |`. `-.
| | | || |\ \ | | | | | || | | |.-' |
`--' `--'`--' '--' `--' `--' `--'`--' `--'`-----'wiki: https://arthas.aliyun.com/doc
version: 3.0.5.20181127201536
pid: 71560
time: 2018-11-28 19:16:24$
3.2 常用命令
3.2.1 dashboard
$ dashboard
ID NAME GROUP PRIORI STATE %CPU TIME INTERRU DAEMON
17 pool-2-thread-1 system 5 WAITIN 67 0:0 false false
27 Timer-for-arthas-dashb system 10 RUNNAB 32 0:0 false true
11 AsyncAppender-Worker-a system 9 WAITIN 0 0:0 false true
9 Attach Listener system 9 RUNNAB 0 0:0 false true
3 Finalizer system 8 WAITIN 0 0:0 false true
2 Reference Handler system 10 WAITIN 0 0:0 false true
4 Signal Dispatcher system 9 RUNNAB 0 0:0 false true
26 as-command-execute-dae system 10 TIMED_ 0 0:0 false true
13 job-timeout system 9 TIMED_ 0 0:0 false true
1 main main 5 TIMED_ 0 0:0 false false
14 nioEventLoopGroup-2-1 system 10 RUNNAB 0 0:0 false false
18 nioEventLoopGroup-2-2 system 10 RUNNAB 0 0:0 false false
23 nioEventLoopGroup-2-3 system 10 RUNNAB 0 0:0 false false
15 nioEventLoopGroup-3-1 system 10 RUNNAB 0 0:0 false false
Memory used total max usage GC
heap 32M 155M 1820M 1.77% gc.ps_scavenge.count 4
ps_eden_space 14M 65M 672M 2.21% gc.ps_scavenge.time(m 166
ps_survivor_space 4M 5M 5M s)
ps_old_gen 12M 85M 1365M 0.91% gc.ps_marksweep.count 0
nonheap 20M 23M -1 gc.ps_marksweep.time( 0
code_cache 3M 5M 240M 1.32% ms)
Runtime
os.name Mac OS X
os.version 10.13.4
java.version 1.8.0_162
java.home /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/jre
3.2.2 thread
thread 1会打印线程 ID 1 的栈,通常是 main 函数的线程
$ thread 1 | grep 'main('at demo.MathGame.main(MathGame.java:17)
3.2.3 jad
反编译 Main Class
$ jad demo.MathGameClassLoader:
+-sun.misc.Launcher$AppClassLoader@3d4eac69+-sun.misc.Launcher$ExtClassLoader@66350f69Location:
/tmp/math-game.jar/** Decompiled with CFR 0_132.*/
package demo;import java.io.PrintStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.concurrent.TimeUnit;public class MathGame {private static Random random = new Random();private int illegalArgumentCount = 0;public static void main(String[] args) throws InterruptedException {MathGame game = new MathGame();do {game.run();TimeUnit.SECONDS.sleep(1L);} while (true);}public void run() throws InterruptedException {try {int number = random.nextInt();List<Integer> primeFactors = this.primeFactors(number);MathGame.print(number, primeFactors);}catch (Exception e) {System.out.println(String.format("illegalArgumentCount:%3d, ", this.illegalArgumentCount) + e.getMessage());}}public static void print(int number, List<Integer> primeFactors) {StringBuffer sb = new StringBuffer("" + number + "=");Iterator<Integer> iterator = primeFactors.iterator();while (iterator.hasNext()) {int factor = iterator.next();sb.append(factor).append('*');}if (sb.charAt(sb.length() - 1) == '*') {sb.deleteCharAt(sb.length() - 1);}System.out.println(sb);}public List<Integer> primeFactors(int number) {if (number < 2) {++this.illegalArgumentCount;throw new IllegalArgumentException("number is: " + number + ", need >= 2");}ArrayList<Integer> result = new ArrayList<Integer>();int i = 2;while (i <= number) {if (number % i == 0) {result.add(i);number /= i;i = 2;continue;}++i;}return result;}
}Affect(row-cnt:1) cost in 970 ms.
3.2.4 watch
查看demo.MathGame#primeFactors函数的返回值
$ watch demo.MathGame primeFactors returnObj
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 107 ms.
ts=2018-11-28 19:22:30; [cost=1.715367ms] result=null
ts=2018-11-28 19:22:31; [cost=0.185203ms] result=null
ts=2018-11-28 19:22:32; [cost=19.012416ms] result=@ArrayList[@Integer[5],@Integer[47],@Integer[2675531],
]
ts=2018-11-28 19:22:33; [cost=0.311395ms] result=@ArrayList[@Integer[2],@Integer[5],@Integer[317],@Integer[503],@Integer[887],
]
ts=2018-11-28 19:22:34; [cost=10.136007ms] result=@ArrayList[@Integer[2],@Integer[2],@Integer[3],@Integer[3],@Integer[31],@Integer[717593],
]
ts=2018-11-28 19:22:35; [cost=29.969732ms] result=@ArrayList[@Integer[5],@Integer[29],@Integer[7651739],
]
3.2.5 getstatic
通过 getstatic 命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name
$ getstatic demo.MathGame random
field: random
@Random[serialVersionUID=@Long[3905348978240129619],seed=@AtomicLong[120955813885284],multiplier=@Long[25214903917],addend=@Long[11],mask=@Long[281474976710655],DOUBLE_UNIT=@Double[1.1102230246251565E-16],BadBound=@String[bound must be positive],BadRange=@String[bound must be greater than origin],BadSize=@String[size must be non-negative],seedUniquifier=@AtomicLong[-3282039941672302964],nextNextGaussian=@Double[0.0],haveNextNextGaussian=@Boolean[false],serialPersistentFields=@ObjectStreamField[][isEmpty=false;size=3],unsafe=@Unsafe[sun.misc.Unsafe@2eaa1027],seedOffset=@Long[24],
]
3.2.6 heapdump
3.2.6.1 dump到指定的文件
[arthas@58205]$ heapdump /tmp/dump.hprof
Dumping heap to /tmp/dump.hprof...
Heap dump file created
3.2.6.2 dump live 对象
[arthas@58205]$ heapdump --live /tmp/dump-live.hprof
Dumping heap to /tmp/dump.hprof...
Heap dump file created
3.2.6.3 dump 到临时文件
[arthas@58205]$ heapdump
Dumping heap to /var/folders/my/wy7c9w9j5732xbkcyt1mb4g40000gp/T/heapdump2019-09-03-16-385121018449645518991.hprof...
Heap dump file created
3.2.7 jvm
$ jvm
RUNTIME
--------------------------------------------------------------------------------------------------------------MACHINE-NAME 37@ff267334bb65JVM-START-TIME 2020-07-23 07:50:36MANAGEMENT-SPEC-VERSION 1.2SPEC-NAME Java Virtual Machine SpecificationSPEC-VENDOR Oracle CorporationSPEC-VERSION 1.8VM-NAME Java HotSpot(TM) 64-Bit Server VMVM-VENDOR Oracle CorporationVM-VERSION 25.201-b09INPUT-ARGUMENTS []CLASS-PATH demo-arthas-spring-boot.jarBOOT-CLASS-PATH /usr/lib/jvm/java-8-oracle/jre/lib/resources.jar:/usr/lib/jvm/java-8-oracle/jre/lib/rt.jar:/usr/lib/jvm/java-8-oracle/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jsse.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jce.jar:/usr/lib/jvm/java-8-oracle/jre/lib/charsets.jar:/usr/lib/jvm/java-8-oracle/jre/lib/jfr.jar:/usr/lib/jvm/java-8-oracle/jre/classesLIBRARY-PATH /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib--------------------------------------------------------------------------------------------------------------CLASS-LOADING
--------------------------------------------------------------------------------------------------------------LOADED-CLASS-COUNT 7529TOTAL-LOADED-CLASS-COUNT 7529UNLOADED-CLASS-COUNT 0IS-VERBOSE false--------------------------------------------------------------------------------------------------------------COMPILATION
--------------------------------------------------------------------------------------------------------------NAME HotSpot 64-Bit Tiered CompilersTOTAL-COMPILE-TIME 14921(ms)--------------------------------------------------------------------------------------------------------------GARBAGE-COLLECTORS
--------------------------------------------------------------------------------------------------------------PS Scavenge name : PS Scavenge[count/time (ms)] collectionCount : 7collectionTime : 68PS MarkSweep name : PS MarkSweep[count/time (ms)] collectionCount : 1collectionTime : 47--------------------------------------------------------------------------------------------------------------MEMORY-MANAGERS
--------------------------------------------------------------------------------------------------------------CodeCacheManager Code CacheMetaspace Manager MetaspaceCompressed Class SpaceCopy Eden SpaceSurvivor SpaceMarkSweepCompact Eden SpaceSurvivor SpaceTenured Gen--------------------------------------------------------------------------------------------------------------MEMORY
--------------------------------------------------------------------------------------------------------------HEAP-MEMORY-USAGE init : 268435456(256.0 MiB)[memory in bytes] used : 18039504(17.2 MiB)committed : 181403648(173.0 MiB)max : 3817865216(3.6 GiB)NO-HEAP-MEMORY-USAGE init : 2555904(2.4 MiB)[memory in bytes] used : 33926216(32.4 MiB)committed : 35176448(33.5 MiB)max : -1(-1 B)--------------------------------------------------------------------------------------------------------------OPERATING-SYSTEM
--------------------------------------------------------------------------------------------------------------OS LinuxARCH amd64PROCESSORS-COUNT 3LOAD-AVERAGE 29.53VERSION 4.15.0-52-generic--------------------------------------------------------------------------------------------------------------THREAD
--------------------------------------------------------------------------------------------------------------COUNT 30DAEMON-COUNT 24PEAK-COUNT 31STARTED-COUNT 36DEADLOCK-COUNT 0--------------------------------------------------------------------------------------------------------------FILE-DESCRIPTOR
--------------------------------------------------------------------------------------------------------------MAX-FILE-DESCRIPTOR-COUNT 1048576OPEN-FILE-DESCRIPTOR-COUNT 100
Affect(row-cnt:0) cost in 88 ms.
3.2.8 logger
[arthas@2062]$ loggername ROOTclass ch.qos.logback.classic.LoggerclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55level INFOeffectiveLevel INFOadditivity truecodeSource file:/Users/hengyunabc/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jarappenders name CONSOLEclass ch.qos.logback.core.ConsoleAppenderclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55target System.outname APPLICATIONclass ch.qos.logback.core.rolling.RollingFileAppenderclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55file app.logname ASYNCclass ch.qos.logback.classic.AsyncAppenderclassLoader sun.misc.Launcher$AppClassLoader@2a139a55classLoaderHash 2a139a55appenderRef [APPLICATION]
3.2.9 mbean
查看或监控 Mbean 的属性信息。
参数名称 | 参数说明 |
---|---|
name-pattern | 名称表达式匹配 |
attribute-pattern | 属性名表达式匹配 |
[m] | 查看元信息 |
[i:] | 刷新属性值的时间间隔 (ms) |
[n:] | 刷新属性值的次数 |
[E] | 开启正则表达式匹配,默认为通配符匹配。仅对属性名有效 |
3.2.9.1 列出所有 Mbean 的名称
mbean
3.2.9.2 查看 Mbean 的元信息
mbean -m java.lang:type=Threading
3.2.9.3 查看 mbean 属性信息
mbean java.lang:type=Threading
3.2.9.4 mbean 的 name 支持通配符匹配
mbean java.lang:type=Th*
3.2.9.5 通配符匹配特定的属性字段:
mbean java.lang:type=Threading *Count
3.2.9.6 使用-E命令切换为正则匹配:
mbean -E java.lang:type=Threading PeakThreadCount|ThreadCount|DaemonThreadCount
3.2.9.7 使用-i命令实时监控
mbean -i 1000 java.lang:type=Threading *Count
3.2.10 memory
$ memory
Memory used total max usage
heap 32M 256M 4096M 0.79%
g1_eden_space 11M 68M -1 16.18%
g1_old_gen 17M 184M 4096M 0.43%
g1_survivor_space 4M 4M -1 100.00%
nonheap 35M 39M -1 89.55%
codeheap_'non-nmethods' 1M 2M 5M 20.53%
metaspace 26M 27M -1 96.88%
codeheap_'profiled_nmethods' 4M 4M 117M 3.57%
compressed_class_space 2M 3M 1024M 0.29%
codeheap_'non-profiled_nmethods' 685K 2496K 120032K 0.57%
mapped 0K 0K - 0.00%
direct 48M 48M - 100.00%
3.2.11 ognl
参数名称 | 参数说明 |
---|---|
express | 执行的表达式 |
[c:] | 执行表达式的 ClassLoader 的 hashcode,默认值是 SystemClassLoader |
[classLoaderClass:] | 指定执行表达式的 ClassLoader 的 class name |
[x] | 结果对象的展开层次,默认值 1 |
3.2.11.1 通过 hashcode 指定 ClassLoader
$ classloader -t
+-BootstrapClassLoader
+-jdk.internal.loader.ClassLoaders$PlatformClassLoader@301ec38b+-com.taobao.arthas.agent.ArthasClassloader@472067c7+-jdk.internal.loader.ClassLoaders$AppClassLoader@4b85612c+-org.springframework.boot.loader.LaunchedURLClassLoader@7f9a81e8$ ognl -c 7f9a81e8 @org.springframework.boot.SpringApplication@logger
@Slf4jLocationAwareLog[FQCN=@String[org.apache.commons.logging.LogAdapter$Slf4jLocationAwareLog],name=@String[org.springframework.boot.SpringApplication],logger=@Logger[Logger[org.springframework.boot.SpringApplication]],
]
$
注意 hashcode 是变化的,需要先查看当前的 ClassLoader 信息,提取对应 ClassLoader 的 hashcode。
对于只有唯一实例的 ClassLoader 可以通过 class name 指定,使用起来更加方便:
$ ognl --classLoaderClass org.springframework.boot.loader.LaunchedURLClassLoader @org.springframework.boot.SpringApplication@logger
@Slf4jLocationAwareLog[FQCN=@String[org.apache.commons.logging.LogAdapter$Slf4jLocationAwareLog],name=@String[org.springframework.boot.SpringApplication],logger=@Logger[Logger[org.springframework.boot.SpringApplication]],
]
3.2.11.2 执行多行表达式
赋值给临时变量,返回一个 List:
$ ognl '#value1=@System@getProperty("java.home"), #value2=@System@getProperty("java.runtime.name"), {#value1, #value2}'
@ArrayList[@String[/opt/java/8.0.181-zulu/jre],@String[OpenJDK Runtime Environment],
]
3.2.12 perfcounter
$ perfcounterjava.ci.totalTime 2325637411java.cls.loadedClasses 3403java.cls.sharedLoadedClasses 0java.cls.sharedUnloadedClasses 0java.cls.unloadedClasses 0java.property.java.version 11.0.4java.property.java.vm.info mixed modejava.property.java.vm.name OpenJDK 64-Bit Server VM
...
3.2.13 sysenv
$ sysenvKEY VALUE
----------------------------------------------------------------------------------------------------------------------------PATH /Users/admin/.sdkman/candidates/visualvm/current/bin:/Users/admin/.sdkman/candidates/java/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOSSDKMAN_VERSION 5.7.3+337JAVA_HOME /Users/admin/.sdkman/candidates/java/currentJAVA_MAIN_CLASS_65244 demo.MathGameTERM xterm-256colorLANG zh_CN.UTF-8AUTOJUMP_SOURCED 1COLORTERM truecolorLOGNAME adminXPC_SERVICE_NAME 0PWD /Users/admin/code/ali/arthas/demoTERM_PROGRAM_VERSION 3.2.5_ /Users/admin/.sdkman/candidates/java/current/bin/javaSHELL /bin/bashTERM_PROGRAM iTerm.appSDKMAN_PLATFORM DarwinUSER adminITERM_PROFILE DefaultTMPDIR /var/folders/0r/k561bkk917gg972stqclbz9h0000gn/T/XPC_FLAGS 0x0TERM_SESSION_ID w0t4p0:60BC264D-9649-42AC-A7E4-AF85B69F93F8__CF_USER_TEXT_ENCODING 0x1F5:0x19:0x34Apple_PubSub_Socket_Ren /private/tmp/com.apple.launchd.DwmmjSQsll/RenderderCOLORFGBG 7;0HOME /Users/adminSHLVL 1AUTOJUMP_ERROR_PATH /Users/admin/Library/autojump/errors.log
3.2.14 vmoption
[arthas@56963]$ vmoptionKEY VALUE ORIGIN WRITEABLE
---------------------------------------------------------------------------------------------HeapDumpBeforeFullGC false DEFAULT trueHeapDumpAfterFullGC false DEFAULT trueHeapDumpOnOutOfMemory false DEFAULT trueErrorHeapDumpPath DEFAULT trueCMSAbortablePrecleanW 100 DEFAULT trueaitMillisCMSWaitDuration 2000 DEFAULT trueCMSTriggerInterval -1 DEFAULT truePrintGC false DEFAULT truePrintGCDetails true MANAGEMENT truePrintGCDateStamps false DEFAULT truePrintGCTimeStamps false DEFAULT truePrintGCID false DEFAULT truePrintClassHistogramBe false DEFAULT trueforeFullGCPrintClassHistogramAf false DEFAULT trueterFullGCPrintClassHistogram false DEFAULT trueMinHeapFreeRatio 0 DEFAULT trueMaxHeapFreeRatio 100 DEFAULT truePrintConcurrentLocks false DEFAULT true
3.2.15 vmtool
$ vmtool --action getInstances --className java.lang.String --limit 10
@String[][@String[com/taobao/arthas/core/shell/session/Session],@String[com.taobao.arthas.core.shell.session.Session],@String[com/taobao/arthas/core/shell/session/Session],@String[com/taobao/arthas/core/shell/session/Session],@String[com/taobao/arthas/core/shell/session/Session.class],@String[com/taobao/arthas/core/shell/session/Session.class],@String[com/taobao/arthas/core/shell/session/Session.class],@String[com/],@String[java/util/concurrent/ConcurrentHashMap$ValueIterator],@String[java/util/concurrent/locks/LockSupport],
]
3.2.16 classloader
参数名称 | Value |
---|---|
[l] | 按类加载实例进行统计 |
[t] | 打印所有 ClassLoader 的继承树 |
[a] | 列出所有 ClassLoader 加载的类,请谨慎使用 |
[c:] | ClassLoader 的 hashcode |
[classLoaderClass:] | 指定执行表达式的 ClassLoader 的 class name |
[c: r:] | 用 ClassLoader 去查找 resource |
[c: load:] | 用 ClassLoader 去加载指定的类 |
3.2.17 dump
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
[c:] | 类所属 ClassLoader 的 hashcode |
[classLoaderClass:] | 指定执行表达式的 ClassLoader 的 class name |
[d:] | 设置类文件的目标目录 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
3.2.18 mc
Memory Compiler/内存编译器,编译.java文件生成.class。
mc /tmp/Test.java
3.2.19 redefine
参数名称 | 参数说明 |
---|---|
[c:] | ClassLoader 的 hashcode |
[classLoaderClass:] | 指定执行表达式的 ClassLoader 的 class name |
3.2.20 retransform
加载外部的.class文件,retransform jvm 已加载的类
retransform /tmp/Test.classretransform -lretransform -d 1 # delete retransform entryretransform --deleteAll # delete all retransform entriesretransform --classPattern demo.* # triger retransform classesretransform -c 327a647b /tmp/Test.class /tmp/Test\$Inner.classretransform --classLoaderClass 'sun.misc.Launcher$AppClassLoader' /tmp/Test.class
3.2.21 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) |
3.2.22 sm
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
method-pattern | 方法名表达式匹配 |
[d] | 展示每个方法的详细信息 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[c:] | 指定 class 的 ClassLoader 的 hashcode |
[classLoaderClass:] | 指定执行表达式的 ClassLoader 的 class name |
[n:] | 具有详细信息的匹配类的最大数量(默认为 100) |
3.2.23 monitor
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
method-pattern | 方法名表达式匹配 |
condition-express | 条件表达式 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[c:] | 统计周期,默认值为 120 秒 |
[b] | 在方法调用之前计算 condition-express |
3.2.24 stack
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
method-pattern | 方法名表达式匹配 |
condition-express | 条件表达式 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[n:] | 执行次数限制 |
3.2.25 trace
参数名称 | 参数说明 |
---|---|
class-pattern | 类名表达式匹配 |
method-pattern | 方法名表达式匹配 |
condition-express | 条件表达式 |
[E] | 开启正则表达式匹配,默认为通配符匹配 |
[n:] | 命令执行次数 |
#cost | 方法执行耗时 |
3.2.26 tt
$ tt -t demo.MathGame primeFactors
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 66 ms.INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD
-------------------------------------------------------------------------------------------------------------------------------------1000 2018-12-04 11:15:38 1.096236 false true 0x4b67cf4d MathGame primeFactors1001 2018-12-04 11:15:39 0.191848 false true 0x4b67cf4d MathGame primeFactors1002 2018-12-04 11:15:40 0.069523 false true 0x4b67cf4d MathGame primeFactors1003 2018-12-04 11:15:41 0.186073 false true 0x4b67cf4d MathGame primeFactors1004 2018-12-04 11:15:42 17.76437 true false 0x4b67cf4d MathGame
3.2.27 auth
[arthas@37430]$ auth ppp
Authentication result: true
3.2.28 options
$ optionsLEVEL TYPE NAME VALUE SUMMARY DESCRIPTION
-------------------------------------------------------------------------------------------------------0 boolea unsafe false Option to support sy This option enables to proxy functionalityn stem-level class of JVM classes. Due to serious security risk a JVM crash is possibly be introduced.Do not activate it unless you are able tomanage.1 boolea dump false Option to dump the e This option enables the enhanced classes tn nhanced classes o be dumped to external file for further de-compilation and analysis.1 boolea batch-re-tra true Option to support ba This options enables to reTransform classen nsform tch reTransform Clas s with batch mode.s2 boolea json-format false Option to support JS This option enables to format object outpun ON format of object t with JSON when -x option selected.output1 boolea disable-sub- false Option to control in This option disable to include sub class wn class clude sub class when hen matching class.class matching1 boolea support-defa true Option to control in This option disable to include default metn ult-method clude default method hod in interface when matching class.in interface when class matching1 boolea save-result false Option to print comm This option enables to save each command'sn and's result to log result to log file, which path is ${user.file home}/logs/arthas-cache/result.log.2 String job-timeout 1d Option to job timeou This option setting job timeout,The unit ct an be d, h, m, s for day, hour, minute, second. 1d is one day in default1 boolea print-parent true Option to print all This option enables print files in parentn -fields fileds in parent cla class, default value true.ss1 boolea verbose false Option to print verb This option enables print verbose informatn ose information ion, default value false.1 boolea strict true Option to strict mod By default, strict mode is true, not allown e ed to set object properties. Want to set object properties, execute `options strictfalse`
3.2.29 base64
[arthas@70070]$ echo 'abc' > /tmp/test.txt
[arthas@70070]$ cat /tmp/test.txt
abc[arthas@70070]$ base64 /tmp/test.txt
YWJjCg==
3.2.30 cat
$ cat /tmp/a.txt
3.2.31 cls
清空当前屏幕区域
3.2.32 echo
打印参数,和 linux 里的 echo 命令类似。
3.2.33 grep
类似传统的grep命令。
3.2.34 help
[help 指令]的等同于[指令 -help],都是查看具体指令的使用说明。
3.2.35 history
3.2.35.1 查看最近执行的3条指令
$ history 3269 thread270 cls271 history 3
3.2.35.2 清空指令
$ history -c$ history 31 history 3
3.2.36 keymap
keymap命令输出当前的快捷键映射表
3.2.37 pwd
返回当前的工作目录,和 linux 命令类似
3.2.38 tee
tee 指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
3.2.39 profile
[arthas@25575]$ profiler start
Profiling started
[arthas@25575]$ profiler getSamples
291
[arthas@25575]$ profiler status
Profiling is running for 39 seconds
[arthas@25575]$ profiler stop
OK
profiler output file: /data/src/flume/teflume-prod/apache-flume-1.9.0-bin/arthas-output/20220621-161810.html
3.2.40 session
如果配置了 tunnel server,会追加打印 代理 id、tunnel 服务器的 url 以及连接状态。使用了 staturl 做统计,会追加显示 statUrl 地址。
$ sessionName Value
--------------------------------------------------JAVA_PID 14584SESSION_ID c2073d3b-443a-4a9b-9249-0c5d24a5756c
3.2.41 version
输出当前目标 Java 进程所加载的 Arthas 版本号。
$ version3.5.1
3.2.42 quit
退出当前 Arthas 客户端,其他 Arthas 客户端不受影响。等同于exit、logout、q三个指令。
3.2.43 reset
重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端stop时会重置所有增强过的类。
3.2.43.1 还原指定类
$ trace Test test
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 57 ms.
`---ts=2017-10-26 17:10:33;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@14dad5dc`---[0.590102ms] Test:test()`---ts=2017-10-26 17:10:34;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@14dad5dc`---[0.068692ms] Test:test()$ reset Test
Affect(class-cnt:1 , method-cnt:0) cost in 11 ms.
3.2.43.2 还原所有类
$ trace Test test
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 15 ms.
`---ts=2017-10-26 17:12:06;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@14dad5dc`---[0.128518ms] Test:test()$ reset
Affect(class-cnt:1 , method-cnt:0) cost in 9 ms
3.2.44 stop
如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。如果想完全退出 arthas,可以执行stop命令。
arthas的监控java性能相关推荐
- 关于Java性能监控您不知道的5件事
责怪糟糕的代码(或不良代码对象)并不能帮助您发现瓶颈,提高 Java™ 应用程序速度,猜测也不能帮您解决.Ted Neward 引导您关注 Java 性能监控工具,从5 个技巧开始,使用Java 5 ...
- java监控数据库性能_Java:GraalVM数据库流性能
java监控数据库性能 GraalVM是JVM块的新成员. 它是一个开源虚拟机,能够同时运行多种编程语言,例如Java,Rust和JavaScript. GraalVM还具有一个新的内部代码优化器管道 ...
- 开源java性能分析工具_Java性能监控:您应该知道的5个开源工具
开源java性能分析工具 鲜为人知但有用:开源应用程序性能监视的状态 对于任何应用程序来说,最重要的事情之一就是性能. 我们要确保用户获得他们能获得的最佳体验,并想知道我们的应用已启动并正在运行. 这 ...
- java 无侵入监控_MyPerf4J 一个高性能、无侵入的Java性能监控和统计工具
MyPerf4J 一个针对高并发.低延迟应用设计的高性能且无侵入的实时Java性能监控和统计工具. 受 perf4j 和 TProfiler启发而来. MyPerf4J具有以下几个特性: 无侵入: 采 ...
- 接口 java性能_MyPerf4J 一个极快的Java接口性能监控和统计工具
MyPerf4J 一个针对高并发.低延迟应用设计的高性能 Java 性能监控和统计工具. 价值 快速定位性能瓶颈 快速定位故障原因 优势 高性能: 单线程支持每秒 1600 万次 响应时间的记录,每次 ...
- 关于 Java 性能监控您不知道的 5 件事,第 1 部分
责怪糟糕的代码(或不良代码对象)并不能帮助您发现瓶颈,提高 Java? 应用程序速度,猜测也不能帮您解决.Ted Neward 引导您关注 Java 性能监控工具,从5 个技巧开始,使用Java 5 ...
- [java]深入剖析Java性能监控调优视频教程
课程概述 基于JDK命令行工具的监控 基于JVisualVM的可视化监控 基于Btrace的监控调试 Tomcat性能监控与调优 Nginx性能监控与调优 JVM层GC调优 JVM字节码与Java代码 ...
- zabbix学习4: 监控Java原理-zabbix性能优化-低级自动发现-zabbix api
文章目录 20: zabbix监控java jvm原理 21: zabbix性能优化 22: zabbix低级自动发现 23: zabbix api 20: zabbix监控java jvm原理 to ...
- Java性能监控和故障诊断可视化工具之jmc
前面的文章中我们介绍了jvisualvm,本篇文章我们来介绍下目前为止功能最为强大的可视化工具jmc.jmc(Java Mission Control)是jdk1.7开始引入的JVM监控工具.jmc可 ...
最新文章
- 设置计算机在睡眠状态下能共享,使用wifi共享精灵的过程中电脑会自动休眠锁屏的解决方法...
- java 常见几种发送http请求案例
- 服务器换账号登陆不了怎么办,怎么切换账号 更换账号 注册新的账号小技巧分享给你...
- python2转python3代码_2to3 – 自动Python 2到3代码翻译 – 开发工具(Python教程)(参考资料)...
- linux下使用odbc连接mysql_Linux环境下通过ODBC访问MSSql Server
- *关于C++堆和栈的理解
- VBS 与 VBA 的区别
- CMMI认证需要什么条件?
- gg修改器偏移量修改_gg修改器偏移量什么意思 | 手游网游页游攻略大全
- 入职与离职手续、五险一金、档案
- javascript原生代码实现轮播图片
- 财务系统服务器计入什么科目,系统服务费入什么科目
- 微信订阅号改回列表显示
- “您未安装Flash控件”解决方法
- 简述 matlab 命令窗的主要作用,matlab复习
- 用.NET开发MSN聊天机器人 - MSN聊天机器人开发揭秘
- 利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化)
- [LOCAL] 画画图(结论 + DP + 常数分析) | 错题本
- 百度开源地图服务器搭建
- 一个人的精神结构和他的精神资源