Arthas使用

下载arthas-boot.jar:

wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

然后用java -jar的方式启动:

[admin@iZuf6gnkapo0o1vc1cenqdZ arthas]$ java -jar arthas-boot.jar 
[INFO] arthas-boot version: 3.1.0
[INFO] Found existing java process, please choose one and hit RETURN.
* [1]: 20148 org.apache.catalina.startup.Bootstrap
  [2]: 4229 org.apache.catalina.startup.Bootstrap
  [3]: 1801 org.apache.catalina.startup.Bootstrap
  [4]: 19787 org.apache.catalina.startup.Bootstrap

选择一个pid进入(如1):

[4]: 19787 org.apache.catalina.startup.Bootstrap
1
[INFO] arthas home: /home/admin/.arthas/lib/3.1.1/arthas
[INFO] Try to attach process 20148
[INFO] Attach process 20148 success.
[INFO] arthas-client connect 127.0.0.1 3658
  ,---.  ,------. ,--------.,--.  ,--.  ,---.   ,---.                           
 /  O  \ |  .--. ''--.  .--'|  '--'  | /  O  \ '   .-'                          
|  .-.  ||  '--'.'   |  |   |  .--.  ||  .-.  |`.  `-.                          
|  | |  ||  |\  \    |  |   |  |  |  ||  | |  |.-'    |                         
`--' `--'`--' '--'   `--'   `--'  `--'`--' `--'`-----'                          
                                                                                

wiki      https://alibaba.github.io/arthas                                      
tutorials https://alibaba.github.io/arthas/arthas-tutorials                     
version   3.1.1                                                                 
pid       20148                                                                 
time      2019-08-14 09:14:38 

通过thread可以查看是否有线程出错:

253        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
254        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
255        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
256        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
258        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
260        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
262        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
263        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
264        DubboServerHandler-10.25.23.152: main                  5          WAITING    0          0:0        false      true       
3          Finalizer                        system                8          WAITING    0          0:0        false      true       
11         GC Daemon                        system                2          TIMED_WAIT 0          0:0        false      true       
55         Hashed wheel timer #1            main                  5          TIMED_WAIT 0          0:32       false      false      
1238       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1682       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1688       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1689       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1692       MySQL Statement Cancellation Tim main                  5          TIMED_WAIT 0          0:0        false      true       
1693       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1694       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1695       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1696       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1697       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1698       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1699       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1701       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1703       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1705       MySQL Statement Cancellation Tim main                  5          TIMED_WAIT 0          0:0        false      true       
1708       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true       
1711       MySQL Statement Cancellation Tim main                  5          WAITING    0          0:0        false      true 

输入其他线程id

$ thread 50
"localhost-startStop-1-EventThread" Id=50 WAITING on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7ec958cb
    at sun.misc.Unsafe.park(Native Method)
    -  waiting on java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@7ec958cb
    at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
    at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
    at org.apache.zookeeper.ClientCnxn$EventThread.run(ClientCnxn.java:494)

Affect(row-cnt:0) cost in 232 ms.
$ thread 26588
"nioEventLoopGroup-2-1" Id=26588 RUNNABLE (in native)
    at sun.nio.ch.EPollArrayWrapper.epollWait(Native Method)
    at sun.nio.ch.EPollArrayWrapper.poll(EPollArrayWrapper.java:269)
    at sun.nio.ch.EPollSelectorImpl.doSelect(EPollSelectorImpl.java:93)
    at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
    -  locked io.netty.channel.nio.SelectedSelectionKeySet@57582703
    -  locked java.util.Collections$UnmodifiableSet@542d67b6
    -  locked sun.nio.ch.EPollSelectorImpl@90e0d74
    at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
    at io.netty.channel.nio.SelectedSelectionKeySetSelector.select(SelectedSelectionKeySetSelector.java:62)
    at io.netty.channel.nio.NioEventLoop.select(NioEventLoop.java:791)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:439)
    at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:906)
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
    at java.lang.Thread.run(Thread.java:745)

Affect(row-cnt:0) cost in 184 ms

jvm 查看当前jvm信息,直接输入jvm即可(如下所示):

jvm
 RUNTIME                                                                                                                            
------------------------------------------------------------------------------------------------------------------------------------
 MACHINE-NAME                          20148@iZuf6gnkapo0o1vc1cenqdZ                                                                
 JVM-START-TIME                        2019-08-12 14:45:57                                                                          
 MANAGEMENT-SPEC-VERSION               1.2                                                                                          
 SPEC-NAME                             Java Virtual Machine Specification                                                           
 SPEC-VENDOR                           Oracle Corporation                                                                           
 SPEC-VERSION                          1.8                                                                                          
 VM-NAME                               OpenJDK 64-Bit Server VM                                                                     
 VM-VENDOR                             Oracle Corporation                                                                           
 VM-VERSION                            25.91-b14                                                                                    
 INPUT-ARGUMENTS                       -Djava.util.logging.config.file=/app/tomcat-8080/conf/logging.properties                     
                                       -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager                            
                                       -Xms1024m                                                                                    
                                       -Xmx1024m                                                                                    
                                       -Xmn256m                                                                                     
                                       -XX:PermSize=256m                                                                            
                                       -Xss256k                                                                                     
                                       -XX:+UseConcMarkSweepGC                                                                      
                                       -XX:+CMSParallelRemarkEnabled                                                                
                                       -XX:+UseCMSCompactAtFullCollection                                                           
                                       -XX:LargePageSizeInBytes=128m                                                                
                                       -XX:+UseFastAccessorMethods                                                                  
                                       -XX:+UseCMSInitiatingOccupancyOnly                                                           
                                       -XX:CMSInitiatingOccupancyFraction=70                                                        
                                       -Djava.endorsed.dirs=/app/tomcat-8080/endorsed                                               
                                       -Dcatalina.base=/app/tomcat-8080                                                             
                                       -Dcatalina.home=/app/tomcat-8080                                                             
                                       -Djava.io.tmpdir=/app/tomcat-8080/temp                                                       
                                                                                                                                    
 CLASS-PATH                            /app/tomcat-8080/bin/bootstrap.jar:/app/tomcat-8080/bin/tomcat-juli.jar                      
 BOOT-CLASS-PATH                       /alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/resources.jar:/alidata1/java- 
                                       1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/rt.jar:/alidata1/java-1.8.0-openjdk-1.8.0.91 
                                       -1.b14.el6.x86_64/jre/lib/sunrsasign.jar:/alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86 
                                       _64/jre/lib/jsse.jar:/alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/jce.jar: 
                                       /alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/charsets.jar:/alidata1/java-1 
                                       .8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/jfr.jar:/alidata1/java-1.8.0-openjdk-1.8.0.91 
                                       -1.b14.el6.x86_64/jre/classes                                                                
 LIBRARY-PATH                          :/app/tomcat-8080/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib           
                                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 CLASS-LOADING                                                                                                                      
------------------------------------------------------------------------------------------------------------------------------------
 LOADED-CLASS-COUNT                    23069                                                                                        
 TOTAL-LOADED-CLASS-COUNT              23087                                                                                        
 UNLOADED-CLASS-COUNT                  18                                                                                           
 IS-VERBOSE                            false                                                                                        
                                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 COMPILATION                                                                                                                        
------------------------------------------------------------------------------------------------------------------------------------
 NAME                                  HotSpot 64-Bit Tiered Compilers                                                              
 TOTAL-COMPILE-TIME                    451554(ms)                                                                                   
                                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 GARBAGE-COLLECTORS                                                                                                                 
------------------------------------------------------------------------------------------------------------------------------------
 ParNew                                4524/113084(ms)                                                                              
 [count/time]                                                                                                                       
 ConcurrentMarkSweep                   3/966(ms)                                                                                    
 [count/time]                                                                                                                       
                                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 MEMORY-MANAGERS                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 CodeCacheManager                      Code Cache                                                                                   
                                                                                                                                    
 Metaspace Manager                     Metaspace                                                                                    
                                       Compressed Class Space                                                                       
                                                                                                                                    
 ParNew                                Par Eden Space                                                                               
                                       Par Survivor Space                                                                           
                                                                                                                                    
 ConcurrentMarkSweep                   Par Eden Space                                                                               
                                       Par Survivor Space                                                                           
                                       CMS Old Gen                                                                                  
                                                                                                                                    
                                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 MEMORY                                                                                                                             
------------------------------------------------------------------------------------------------------------------------------------
 HEAP-MEMORY-USAGE                     1046937600(998.44 MiB)/1073741824(1.00 GiB)/1046937600(998.44 MiB)/433419368(413.34 MiB)     
 [committed/init/max/used]                                                                                                          
 NO-HEAP-MEMORY-USAGE                  235347968(224.45 MiB)/2555904(2.44 MiB)/-1(-1 B)/227925824(217.37 MiB)                       
 [committed/init/max/used]                                                                                                          
 PENDING-FINALIZE-COUNT                0                                                                                            
                                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 OPERATING-SYSTEM                                                                                                                   
------------------------------------------------------------------------------------------------------------------------------------
 OS                                    Linux                                                                                        
 ARCH                                  amd64                                                                                        
 PROCESSORS-COUNT                      2                                                                                            
 LOAD-AVERAGE                          0.0                                                                                          
 VERSION                               2.6.32-696.6.3.el6.x86_64                                                                    
                                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 THREAD                                                                                                                             
------------------------------------------------------------------------------------------------------------------------------------
 COUNT                                 1214                                                                                         
 DAEMON-COUNT                          1099                                                                                         
 PEAK-COUNT                            1216                                                                                         
 STARTED-COUNT                         26113                                                                                        
 DEADLOCK-COUNT                        0                                                                                            
                                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 FILE-DESCRIPTOR                                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 MAX-FILE-DESCRIPTOR-COUNT             65535                                                                                        
 OPEN-FILE-DESCRIPTOR-COUNT            510                                                                                          
Affect(row-cnt:0) cost in 30 ms.

sm查看已加载类的方法信息,“Search-Method” 的简写,这个命令能搜索出所有已经加载了 Class 信息的方法信息,sm 命令只能看到由当前类所声明 (declaring) 的方法,父类则无法看到,sm+类的全路径名称是查看该类的所有方法信息。

$ sm  ****.*****

jad 反编译指定已加载类的源码,jad 命令将 JVM 中实际运行的 class 的 byte code 反编译成 java 代码,便于你理解业务逻辑,jad+类的全路径名称是查看该类的源码信息。

$ jad ****.***

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

$ cat ./logs/manager.2019-08-11.log 
Aug 11, 2019 7:17:36 PM org.apache.catalina.core.ApplicationContext log
INFO: Manager: init: Associated with Deployer 'Catalina:type=Deployer,host=localhost'
Aug 11, 2019 7:17:36 PM org.apache.catalina.core.ApplicationContext log
INFO: Manager: init: Global resources are available
Aug 11, 2019 7:17:36 PM org.apache.catalina.core.ApplicationContext log
INFO: Manager: list: Listing contexts for virtual host 'localhost'
Aug 11, 2019 7:17:36 PM org.apache.catalina.core.ApplicationContext log
INFO: Manager: list: Listing contexts for virtual host 'localhost'

classloader+类的全路径名称是查看

$ classloader *****.****
 name                                            numberOfInstances  loadedCountTotal                                                
 org.apache.catalina.loader.WebappClassLoader    2                  12673                                                           
 com.taobao.arthas.agent.ArthasClassloader       5                  8265                                                            
 BootstrapClassLoader                            1                  3440                                                            
 sun.reflect.DelegatingClassLoader               1143               1143                                                            
 org.apache.catalina.loader.StandardClassLoader  1                  805                                                             
 sun.misc.Launcher$ExtClassLoader                1                  36                                                              
 sun.misc.Launcher$AppClassLoader                1                  26                                                              
 com.alibaba.fastjson.util.ASMClassLoader        1                  5                                                               
 org.apache.jasper.servlet.JasperLoader          1                  1                                                               

通过getstatic命令可以方便的查看类的静态属性。使用方法为getstatic class_name field_name,getstatic + 类的全路径名称 + 被定义的静态名称 :

$ getstatic ****.impl.**** logger
field: logger
@Logger[
    serialVersionUID=@Long[5454405123156820674],
    FQCN=@String[ch.qos.logback.classic.Logger],
    name=@String[****.impl.*****],
    level=null,
    effectiveLevelInt=@Integer[20000],
    parent=@Logger[Logger[***.impl]],
    childrenList=null,
    aai=null,
    additive=@Boolean[true],
    loggerContext=@LoggerContext[ch.qos.logback.classic.LoggerContext[default]],
]
Affect(row-cnt:1) cost in 43 ms

sysenv 查看JVM的环境变量信息

$ sysprop 
 KEY                       VALUE                                                                                                    
------------------------------------------------------------------------------------------------------------------------------------
 java.vendor               Oracle Corporation                                                                                       
 sun.java.launcher         SUN_STANDARD                                                                                             
 catalina.base             /app/tomcat-8080                                                                                         
 sun.management.compiler   HotSpot 64-Bit Tiered Compilers                                                                          
 sun.nio.ch.bugLevel                                                                                                                
 catalina.useNaming        true                                                                                                     
 os.name                   Linux                                                                                                    
 dubbo.application.logger  slf4j                                                                                                    
 sun.boot.class.path       /alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/resources.jar:/alidata1/java-1.8.0-openjd 
                           k-1.8.0.91-1.b14.el6.x86_64/jre/lib/rt.jar:/alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/li 
                           b/sunrsasign.jar:/alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/jsse.jar:/alidata1/java- 
                           1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/jce.jar:/alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6. 
                           x86_64/jre/lib/charsets.jar:/alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/jfr.jar:/alid 
                           ata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/classes                                            
 java.util.logging.config  /app/tomcat-8080/conf/logging.properties                                                                 
 .file                                                                                                                              
 java.vm.specification.ve  Oracle Corporation                                                                                       
 ndor                                                                                                                               
 java.runtime.version      1.8.0_91-b14                                                                                             
 user.name                 admin                                                                                                    
 shared.loader                                                                                                                      
 tomcat.util.buf.StringCa  true                                                                                                     
 che.byte.enabled                                                                                                                   
 user.language             en                                                                                                       
 java.naming.factory.init  org.apache.naming.java.javaURLContextFactory                                                             
 ial                                                                                                                                
 sun.boot.library.path     /alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/amd64                                     
 java.version              1.8.0_91                                                                                                 
 java.util.logging.manage  org.apache.juli.ClassLoaderLogManager                                                                    
 r                                                                                                                                  
 user.timezone             Asia/Shanghai                                                                                            
 sun.arch.data.model       64                                                                                                       
 java.endorsed.dirs        /app/tomcat-8080/endorsed                                                                                
 sun.cpu.isalist                                                                                                                    
 sun.jnu.encoding          UTF-8                                                                                                    
 file.encoding.pkg         sun.io                                                                                                   
 package.access            sun.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.naming.resources.,org.apache. 
                           tomcat.                                                                                                  
 file.separator            /                                                                                                        
 java.specification.name   Java Platform API Specification                                                                          
 JM.LOG.PATH               /home/admin/logs                                                                                         
 java.class.version        52.0                                                                                                     
 user.country              US                                                                                                       
 java.home                 /alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre                                               
 java.vm.info              mixed mode                                                                                               
 os.version                2.6.32-696.6.3.el6.x86_64                                                                                
 path.separator            :                                                                                                        
 java.vm.version           25.91-b14                                                                                                
 jboss.i18n.generate-prox  true                                                                                                     
 ies                                                                                                                                
 java.awt.printerjob       sun.print.PSPrinterJob                                                                                   
 sun.io.unicode.encoding   UnicodeLittle                                                                                            
 tomcat.util.scan.Default  bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api. 
 JarScanner.jarsToSkip     jar,websocket-api.jar,catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,jasper.jar,jaspe 
                           r-el.jar,ecj-*.jar,tomcat-api.jar,tomcat-util.jar,tomcat-coyote.jar,tomcat-dbcp.jar,tomcat-jni.jar,tomca 
                           t-spdy.jar,tomcat-i18n-en.jar,tomcat-i18n-es.jar,tomcat-i18n-fr.jar,tomcat-i18n-ja.jar,tomcat-juli-adapt 
                           ers.jar,catalina-jmx-remote.jar,catalina-ws.jar,tomcat-jdbc.jar,tools.jar,commons-beanutils*.jar,commons 
                           -codec*.jar,commons-collections*.jar,commons-dbcp*.jar,commons-digester*.jar,commons-fileupload*.jar,com 
                           mons-httpclient*.jar,commons-io*.jar,commons-lang*.jar,commons-logging*.jar,commons-math*.jar,commons-po 
                           ol*.jar,jstl.jar,taglibs-standard-spec-*.jar,geronimo-spec-jaxrpc*.jar,wsdl4j*.jar,ant.jar,ant-junit*.ja 
                           r,aspectj*.jar,jmx.jar,h2*.jar,hibernate*.jar,httpclient*.jar,jmx-tools.jar,jta*.jar,log4j.jar,log4j-1*. 
                           jar,mail*.jar,slf4j*.jar,xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,junit.jar,junit-*.jar,hamcrest*.j 
                           ar,org.hamcrest*.jar,ant-launcher.jar,cobertura-*.jar,asm-*.jar,dom4j-*.jar,icu4j-*.jar,jaxen-*.jar,jdom 
                           -*.jar,jetty-*.jar,oro-*.jar,servlet-api-*.jar,tagsoup-*.jar,xmlParserAPIs-*.jar,xom-*.jar               
 awt.toolkit               sun.awt.X11.XToolkit                                                                                     
 package.definition        sun.,java.,org.apache.catalina.,org.apache.coyote.,org.apache.jasper.,org.apache.naming.,org.apache.tomc 
                           at.                                                                                                      
 java.naming.factory.url.  org.apache.naming                                                                                        
 pkgs                                                                                                                               
 user.home                 /home/admin                                                                                              
 sun.rmi.transport.tcp.re  5000                                                                                                     
 sponseTimeout                                                                                                                      
 org.apache.catalina.star                                                                                                           
 tup.ContextConfig.jarsTo                                                                                                           
 Skip                                                                                                                               
 java.specification.vendo  Oracle Corporation                                                                                       
 r                                                                                                                                  
 java.library.path         :/app/tomcat-8080/lib:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib                       
 java.vendor.url           http://java.oracle.com/                                                                                  
 org.apache.catalina.star  tomcat7-websocket.jar                                                                                    
 tup.TldConfig.jarsToSkip                                                                                                           
 java.vm.vendor            Oracle Corporation                                                                                       
 common.loader             ${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar          
 java.runtime.name         OpenJDK Runtime Environment                                                                              
 sun.java.command          org.apache.catalina.startup.Bootstrap start                                                              
 java.class.path           /app/tomcat-8080/bin/bootstrap.jar:/app/tomcat-8080/bin/tomcat-juli.jar                                  
 java.vm.specification.na  Java Virtual Machine Specification                                                                       
 me                                                                                                                                 
 java.vm.specification.ve  1.8                                                                                                      
 rsion                                                                                                                              
 catalina.home             /app/tomcat-8080                                                                                         
 sun.cpu.endian            little                                                                                                   
 sun.os.patch.level        unknown                                                                                                  
 java.io.tmpdir            /app/tomcat-8080/temp                                                                                    
 java.vendor.url.bug       http://bugreport.sun.com/bugreport/                                                                      
 server.loader                                                                                                                      
 os.arch                   amd64                                                                                                    
 java.awt.graphicsenv      sun.awt.X11GraphicsEnvironment                                                                           
 java.ext.dirs             /alidata1/java-1.8.0-openjdk-1.8.0.91-1.b14.el6.x86_64/jre/lib/ext:/usr/java/packages/lib/ext            
 user.dir                  /alidata1/app/tomcat-8080                                                                                
 line.separator                                                                                                                     
                                                                                                                                    
 java.vm.name              OpenJDK 64-Bit Server VM                                                                                 
 file.encoding             UTF-8                                                                                                    
 java.specification.versi  1.8                                             

trace方法内部调用路径,并输出方法路径上的每个节点上耗时,trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。使用方式:trace + 类的全路径+方法名。

$ trace ****.impl.****  ***
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 430 ms.
`---ts=2019-08-19 14:29:26;thread_name=DubboServerHandler-10.**.**.***:20916-thread-346;id=20b;is_daemon=true;priority=5;TCCL=org.apache.catalina.loader.WebappClassLoader@5024d98
    `---[10.560424ms] *****.impl.*****:****()
        +---[0.022867ms] java.lang.String:equals() #903
        +---[1.173551ms] ******.****:*****() #907
        +---[0.015623ms]  ******.****:*****() #911
        +---[0.011529ms]  ******.****:*****() #911
        +---[0.006332ms]  ******.****:*****() #912
        +---[0.003549ms] java.lang.Long:longValue() #912
        +---[0.003404ms] java.util.Date:<init>() #912
        +---[0.002756ms] java.util.Date:getTime() #912
        +---[0.002564ms] java.lang.Long:longValue() #914
        `---[8.906082ms]  ******.****:*****()#914

watch 能方便的观察到指定方法的调用情况。能观察到的范围为:返回值、抛出异常、入参,使用方式watch + 类的全路径名 + 方法名 + -e -x 2 "{params,returnObj}"

$ watch ***.api.impl.*** *** -e -x 2 "{params,returnObj}"
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 400 ms.
ts=2019-08-19 14:24:48; [cost=0.960088ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:48; [cost=0.918596ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:49; [cost=0.892789ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:49; [cost=0.969515ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:49; [cost=0.688592ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:49; [cost=0.665531ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:50; [cost=1.014832ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:50; [cost=1.021643ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:50; [cost=0.612249ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,
]
ts=2019-08-19 14:24:52; [cost=0.834942ms] result=@ArrayList[
    @Object[][
        @String[2aab56fe09bd280c29facca91efec9ca],
    ],
    null,

tt方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测watch 虽然很方便和灵活,但需要提前想清楚观察表达式的拼写,这对排查问题而言要求太高,因为很多时候我们并不清楚问题出自于何方,只能靠蛛丝马迹进行猜测。这个时候如果能记录下当时方法调用的所有入参和返回值、抛出的异常会对整个问题的思考与判断非常有帮助。

$ tt  -t  ***.impl.***  ****
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 397 ms.
 INDEX   TIMESTAMP            COST(ms)  IS-RET  IS-EXP  OBJECT          CLASS                         METHOD                        
------------------------------------------------------------------------------------------------------------------------------------
 1000    2019-08-19 14:37:27  4.86006   true    false   0x375768e0      ****                            *****
 1001    2019-08-19 14:37:28  0.167032  false   true    0x375768e0     ****                            *****
 1002    2019-08-19 14:37:38  9.571157  true    false   0x375768e0     ****                            *****
$ monitor  ****.impl.****  ****
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 453 ms.
 timestamp            class             method        total  success  fail  avg-rt(ms)   
----------------------------------------------------------------------------------------------------------------------------------  
 2019-08-19 14:45:09  *****         *****             17        6        11    3.76         

stack 输出当前方法被调用的调用路径
很多时候我们都知道一个方法被执行,但这个方法被执行的路径非常多,或者你根本就不知道这个方法是从那里被执行了,此时你需要的是 stack 命令。

$ stack  ****.impl.*** ***
Press Q or Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 400 ms.
ts=2019-08-19 14:48:55;thread_name=DubboServerHandler-10.25.23.152:20916-thread-160;id=14a;is_daemon=true;priority=5;TCCL=org.apache.catalina.loader.WebappClassLoader@5024d98
    @com.alibaba.dubbo.common.bytecode.Wrapper28.invokeMethod()
        at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
        at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
        at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
        at ***.***.***.***.***.***.api.filter.DubboApiFilter.invoke(DubboApiFilter.java:14)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:65)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.***.***.***.filter.tracking.TrackingProviderFilter.invoke(TrackingProviderFilter.java:47)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.***.***.***.filter.cat.CatProviderFilter.invoke(CatProviderFilter.java:81)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:70)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:132)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:113)
        at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)
        at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)
        at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)
        at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

基础命令

  • help——查看命令帮助信息
  • [cat]——打印文件内容,和linux里的cat命令类似
  • [pwd]——返回当前的工作目录,和linux命令类似
  • cls——清空当前屏幕区域
  • session——查看当前会话的信息
  • [reset]——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类
  • version——输出当前目标 Java 进程所加载的 Arthas 版本号
  • history——打印命令历史
  • quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响
  • shutdown——关闭 Arthas 服务端,所有 Arthas 客户端全部退出
  • [keymap]——Arthas快捷键列表及自定义快捷键

jvm相关

  • [dashboard]——当前系统的实时数据面板
  • [thread]——查看当前 JVM 的线程堆栈信息
  • [jvm]——查看当前 JVM 的信息
  • [sysprop]——查看和修改JVM的系统属性
  • [sysenv]——查看JVM的环境变量
  • [getstatic]——查看类的静态属性
  • [ognl]——执行ognl表达式
  • [mbean]——查看 Mbean 的信息

class/classloader相关

  • [sc]——查看JVM已加载的类信息
  • [sm]——查看已加载类的方法信息
  • [jad]——反编译指定已加载类的源码
  • [mc]——内存编绎器,内存编绎文件
  • [redefine]——加载外部的文件,redefine到JVM里
  • [dump]——dump 已加载类的 byte code 到特定目录
  • [classloader]——查看classloader的继承树,urls,类加载信息,使用classloader去getResource

monitor/watch/trace相关

请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 命令。

  • [monitor]——方法执行监控
  • [watch]——方法执行数据观测
  • [trace]——方法内部调用路径,并输出方法路径上的每个节点上耗时
  • [stack]——输出当前方法被调用的调用路径
  • [tt]——方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测

options

  • [options]——查看或设置Arthas全局开关

管道

Arthas支持使用管道对上述命令的结果进行进一步的处理,如

  • grep——搜索满足条件的结果
  • plaintext——将命令的结果去除ANSI颜色
  • wc——按行统计输出结果

后台异步任务

当线上出现偶发的问题,比如需要watch某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了,详情请参考这里

  • 使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session断开不影响任务执行(生命周期默认为1天)
  • jobs——列出所有job
  • kill——强制终止任务
  • fg——将暂停的任务拉到前台执行
  • bg——将暂停的任务放到后台执行

参考地址:https://alibaba.github.io/arthas/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容