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進(jìn)入(如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 查看當(dāng)前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” 的簡寫,這個命令能搜索出所有已經(jīng)加載了 Class 信息的方法信息康铭,sm 命令只能看到由當(dāng)前類所聲明 (declaring) 的方法,父類則無法看到,sm+類的全路徑名稱是查看該類的所有方法信息瘸右。

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

jad 反編譯指定已加載類的源碼蒸痹,jad 命令將 JVM 中實際運行的 class 的 byte code 反編譯成 java 代碼,便于你理解業(yè)務(wù)邏輯虫碉,jad+類的全路徑名稱是查看該類的源碼信息贾惦。

$ jad ****.***

cat打印文件內(nèi)容,和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命令可以方便的查看類的靜態(tài)屬性碰镜。使用方法為getstatic class_name field_name,getstatic + 類的全路徑名稱 + 被定義的靜態(tài)名稱 :

$ 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的環(huán)境變量信息

$ 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方法內(nèi)部調(diào)用路徑习瑰,并輸出方法路徑上的每個節(jié)點上耗時,trace 命令能主動搜索 class-pattern/method-pattern 對應(yīng)的方法調(diào)用路徑绪颖,渲染和統(tǒng)計整個調(diào)用鏈路上的所有性能開銷和追蹤調(diào)用鏈路。使用方式: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 能方便的觀察到指定方法的調(diào)用情況柠横。能觀察到的范圍為:返回值、拋出異常课兄、入?yún)㈦狗眨褂梅绞絯atch + 類的全路徑名 + 方法名 + -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方法執(zhí)行數(shù)據(jù)的時空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔⒀滩⒛軐@些不同的時間下調(diào)用進(jìn)行觀測watch 雖然很方便和靈活搬俊,但需要提前想清楚觀察表達(dá)式的拼寫,這對排查問題而言要求太高蜒茄,因為很多時候我們并不清楚問題出自于何方唉擂,只能靠蛛絲馬跡進(jìn)行猜測。這個時候如果能記錄下當(dāng)時方法調(diào)用的所有入?yún)⒑头祷刂堤锤稹伋龅漠惓φ麄€問題的思考與判斷非常有幫助玩祟。

$ 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 輸出當(dāng)前方法被調(diào)用的調(diào)用路徑
很多時候我們都知道一個方法被執(zhí)行,但這個方法被執(zhí)行的路徑非常多驻谆,或者你根本就不知道這個方法是從那里被執(zhí)行了卵凑,此時你需要的是 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)

基礎(chǔ)命令

  • help——查看命令幫助信息
  • [cat]——打印文件內(nèi)容胜臊,和linux里的cat命令類似
  • [pwd]——返回當(dāng)前的工作目錄勺卢,和linux命令類似
  • cls——清空當(dāng)前屏幕區(qū)域
  • session——查看當(dāng)前會話的信息
  • [reset]——重置增強(qiáng)類,將被 Arthas 增強(qiáng)過的類全部還原象对,Arthas 服務(wù)端關(guān)閉時會重置所有增強(qiáng)過的類
  • version——輸出當(dāng)前目標(biāo) Java 進(jìn)程所加載的 Arthas 版本號
  • history——打印命令歷史
  • quit——退出當(dāng)前 Arthas 客戶端黑忱,其他 Arthas 客戶端不受影響
  • shutdown——關(guān)閉 Arthas 服務(wù)端,所有 Arthas 客戶端全部退出
  • [keymap]——Arthas快捷鍵列表及自定義快捷鍵

jvm相關(guān)

  • [dashboard]——當(dāng)前系統(tǒng)的實時數(shù)據(jù)面板
  • [thread]——查看當(dāng)前 JVM 的線程堆棧信息
  • [jvm]——查看當(dāng)前 JVM 的信息
  • [sysprop]——查看和修改JVM的系統(tǒng)屬性
  • [sysenv]——查看JVM的環(huán)境變量
  • [getstatic]——查看類的靜態(tài)屬性
  • [ognl]——執(zhí)行ognl表達(dá)式
  • [mbean]——查看 Mbean 的信息

class/classloader相關(guān)

  • [sc]——查看JVM已加載的類信息
  • [sm]——查看已加載類的方法信息
  • [jad]——反編譯指定已加載類的源碼
  • [mc]——內(nèi)存編繹器勒魔,內(nèi)存編繹文件
  • [redefine]——加載外部的文件甫煞,redefine到JVM里
  • [dump]——dump 已加載類的 byte code 到特定目錄
  • [classloader]——查看classloader的繼承樹,urls冠绢,類加載信息抚吠,使用classloader去getResource

monitor/watch/trace相關(guān)

請注意,這些命令弟胀,都通過字節(jié)碼增強(qiáng)技術(shù)來實現(xiàn)的楷力,會在指定類的方法中插入一些切面來實現(xiàn)數(shù)據(jù)統(tǒng)計和觀測喊式,因此在線上、預(yù)發(fā)使用時萧朝,請盡量明確需要觀測的類岔留、方法以及條件,診斷結(jié)束要執(zhí)行 命令检柬。

  • [monitor]——方法執(zhí)行監(jiān)控
  • [watch]——方法執(zhí)行數(shù)據(jù)觀測
  • [trace]——方法內(nèi)部調(diào)用路徑献联,并輸出方法路徑上的每個節(jié)點上耗時
  • [stack]——輸出當(dāng)前方法被調(diào)用的調(diào)用路徑
  • [tt]——方法執(zhí)行數(shù)據(jù)的時空隧道,記錄下指定方法每次調(diào)用的入?yún)⒑头祷匦畔⒑沃罚⒛軐@些不同的時間下調(diào)用進(jìn)行觀測

options

  • [options]——查看或設(shè)置Arthas全局開關(guān)

管道

Arthas支持使用管道對上述命令的結(jié)果進(jìn)行進(jìn)一步的處理里逆,如

  • grep——搜索滿足條件的結(jié)果
  • plaintext——將命令的結(jié)果去除ANSI顏色
  • wc——按行統(tǒng)計輸出結(jié)果

后臺異步任務(wù)

當(dāng)線上出現(xiàn)偶發(fā)的問題,比如需要watch某個條件头朱,而這個條件一天可能才會出現(xiàn)一次時运悲,異步后臺任務(wù)就派上用場了,詳情請參考這里

  • 使用 > 將結(jié)果重寫向到日志文件项钮,使用 & 指定命令是后臺運行班眯,session斷開不影響任務(wù)執(zhí)行(生命周期默認(rèn)為1天)
  • jobs——列出所有job
  • kill——強(qiáng)制終止任務(wù)
  • fg——將暫停的任務(wù)拉到前臺執(zhí)行
  • bg——將暫停的任務(wù)放到后臺執(zhí)行

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市烁巫,隨后出現(xiàn)的幾起案子署隘,更是在濱河造成了極大的恐慌,老刑警劉巖亚隙,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磁餐,死亡現(xiàn)場離奇詭異,居然都是意外死亡阿弃,警方通過查閱死者的電腦和手機(jī)诊霹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渣淳,“玉大人脾还,你說我怎么就攤上這事∪肜ⅲ” “怎么了鄙漏?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長棺蛛。 經(jīng)常有香客問我怔蚌,道長,這世上最難降的妖魔是什么旁赊? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任桦踊,我火速辦了婚禮,結(jié)果婚禮上终畅,老公的妹妹穿的比我還像新娘钞钙。我一直安慰自己鳄橘,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布芒炼。 她就那樣靜靜地躺著,像睡著了一般术徊。 火紅的嫁衣襯著肌膚如雪本刽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天赠涮,我揣著相機(jī)與錄音子寓,去河邊找鬼。 笑死笋除,一個胖子當(dāng)著我的面吹牛斜友,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垃它,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鲜屏,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了国拇?” 一聲冷哼從身側(cè)響起洛史,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酱吝,沒想到半個月后也殖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡务热,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年忆嗜,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片崎岂。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡捆毫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出该镣,到底是詐尸還是另有隱情冻璃,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布损合,位于F島的核電站省艳,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏嫁审。R本人自食惡果不足惜跋炕,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望律适。 院中可真熱鬧辐烂,春花似錦遏插、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至扣草,卻和暖如春了牛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背辰妙。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工鹰祸, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人密浑。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓蛙婴,卻偏偏與公主長得像,于是被迫代替她去往敵國和親尔破。 傳聞我的和親對象是個殘疾皇子街图,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容