File: https://alibaba.github.io/arthas/ githut: https://github.com/alibaba/arthas/blob/master/site/src/site/sphinx/index.md
install
express setup
wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar
Select the application java process:
$ $ java -jar arthas-boot.jar * [1]: 35542 [2]: 71560 arthas-demo.jar
Demo process is the second, enter 2, then enter Enter / enter. Arthas attach es to the target process and outputs the log:
2 [INFO] Start download arthas from remote server: https://maven.aliyun.com/repository/public/com/taobao/arthas/arthas-packaging/3.1.1/arthas-packaging-3.1.1-bin.zip [INFO] Download arthas success. [INFO] arthas home: /root/.arthas/lib/3.1.1/arthas [INFO] Try to attach process 74 [INFO] Attach process 74 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 74 time 2019-07-02 18:05:29
Diagnosing Java processes in Docker
docker exec -it ${containerId} /bin/bash -c "wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar"
demo
$ docker exec -it arthas-demo /bin/sh -c "java -jar /opt/arthas/arthas-boot.jar" * [1]: 9 jar [INFO] arthas home: /opt/arthas [INFO] Try to attach process 9 [INFO] Attach process 9 success. [INFO] arthas-client connect 127.0.0.1 3658 ,---. ,------. ,--------.,--. ,--. ,---. ,---. / O \ | .--. ''--. .--'| '--' | / O \ ' .-' | .-. || '--'.' | | | .--. || .-. |`. `-. | | | || |\ \ | | | | | || | | |.-' | `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' wiki: https://alibaba.github.io/arthas version: 3.0.5 pid: 9 time: 2018-12-18 11:30:36
Diagnose Java processes in containers in k8s
kubectl exec -it ${pod} --container ${containerId} -- /bin/bash -c "wget https://alibaba.github.io/arthas/arthas-boot.jar && java -jar arthas-boot.jar"
sc
View class information loaded by JVM
$ sc demo.* demo.MathGame Affect(row-cnt:1) cost in 55 ms.
trace
Method internal call path and output method path time-consuming on each node
$ trace demo.MathGame run Press Ctrl+C to abort. Affect(class-cnt:1 , method-cnt:1) cost in 42 ms. `---ts=2018-12-04 00:44:17;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[10.611029ms] demo.MathGame:run() +---[0.05638ms] java.util.Random:nextInt() +---[10.036885ms] demo.MathGame:primeFactors() `---[0.170316ms] demo.MathGame:print()
Functions that filter out jdk
$ trace -j demo.MathGame run Press Ctrl+C to abort. Affect(class-cnt:1 , method-cnt:1) cost in 31 ms. `---ts=2018-12-04 01:09:14;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[5.190646ms] demo.MathGame:run() +---[4.465779ms] demo.MathGame:primeFactors() `---[0.375324ms] demo.MathGame:print()
Time-consuming filtering by call
$ trace demo.MathGame run '#cost > 10' Press Ctrl+C to abort. Affect(class-cnt:1 , method-cnt:1) cost in 41 ms. `---ts=2018-12-04 01:12:02;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[12.033735ms] demo.MathGame:run() +---[0.006783ms] java.util.Random:nextInt() +---[11.852594ms] demo.MathGame:primeFactors() `---[0.05447ms] demo.MathGame:print()
trace Multiple Classes or Functions
The trace command will only be a subcall in the function to which trace matches, and will not go down the trace layer. Because traces are expensive, multi-tier traces can lead to a large number of classes and functions that ultimately need to be traced.
Regular tables can be used to match multiple classes and functions on the path to achieve the effect of multi-layer trace to a certain extent.
trace -E com.test.ClassA|org.test.ClassB method1|method2|method3
layering-cache
Laying-cache, a multi-level caching framework for monitoring This is an implementation of my open source multi-level caching framework. If you are interested, take a look at it.