# FAQ
TIP
For questions that are not in this list, please search in issues. https://github.com/alibaba/arthas/issuesopen in new window
# Where is the log file?
Log file path: ~/logs/arthas/arthas.log
# telnet: connect to address 127.0.0.1: Connection refused
- Check the log
~/logs/arthas/arthas.log
- Check the startup parameters of
as.sh
/arthas-boot.jar
, whether a specificport
is specified - Use
netstat
to check the process ofLISTEN 3658
port, confirm it is ajava
process, and it is the process you want to diagnose - If the process of
LISTEN 3658
port is not ajava
process, then the3658
port is already occupied. You need to specify other ports in the startup parameters ofas.sh
/arthas-boot.jar
. - After confirming the process and port, try to connect with
telnet 127.0.0.1 3658
Essentially, arthas
will start a tcp server
within the application java process, and then use telnet
to connect to it.
- The port may not match
- The process itself may have been suspended and cannot accept new connections
If there is Arthas server already bind.
in the Arthas log
- It means that the
Arthas server
has been started before, check the file descriptors opened by the target process. If it is alinux
environment, you can go to/proc/$pid/fd
, usels -alh | grep arthas
to check whether the process has loaded thearthas
related jar package. - If not, it may be that other processes have started
arthas
, or the application has been restarted.
# How much impact does Arthas attach have on the performance of the original process?
https://github.com/alibaba/arthas/issues/44open in new window
# target process not responding or HotSpot VM not loaded
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
- Check whether the current user and the target java process are consistent. If they are inconsistent, switch to the same user. JVM can only attach java processes under the same user.
- Try to use
jstack -l $pid
. If the process does not respond, it means that the process may freeze and fail to respond to the JVM attach signal. So Arthas based on the attach mechanism cannot work. Try to usejmap
heapdump to analyze. - Try to attach math-game in quick-start.
- For more information: https://github.com/alibaba/arthas/issues/347open in new window
# Can commands such as trace/watch enhance the classes in jdk?
By default, classes beginning with java.
or the classes loaded by the Bootstrap ClassLoader
are filtered out, but they can be turned on:
options unsafe true
See more at options
TIP
To support the jars appended by java.lang.instrument.Instrumentation#appendToBootstrapClassLoaderSearch need to enable unsafe.
# How to view the result in json
format
options json-format true
See more at options
# Can arthas trace native methods
No.
# Can arthas view the value of a variable in memory?
- You can use
vmtool
command. - You can use some tricks to intercept the object with the
tt
command, or fetch it from a static method.
# How to filter method with the same name?
You can used all variables in fundamental fields in expressions for the condition express to filter method with the same name, you can use the number of parameters params.length ==1
,parameter type params[0] instanceof java.lang.Integer
,return value type returnObj instanceof java.util.List
and so on in one or more combinations as condition express.
You can use -v
to view the condition express result https://github.com/alibaba/arthas/issues/1348open in new window
example math-game
watch demo.MathGame primeFactors '{params,returnObj,throwExp}' 'params.length >0 && returnObj instanceof java.util.List' -v
# How to watch or trace constructor?
watch demo.MathGame <init> '{params,returnObj,throwExp}' -v
# How to watch or trace inner classes?
In the JVM specification the name of inner classes is OuterClass$InnerClass
.
watch OuterClass$InnerClass
# Does it support watch and trace lambda classes?
For classes generated by lambda, will be skipped because the JVM itself does not allow enhancements to classes generated by lambda.
# Enter Unicode characters
Convert Unicode characters to \u
representation:
ognl '@[email protected]("Hello \u4e2d\u6587")'
# java.lang.ClassFormatError: null, skywalking arthas compatible use
When error log appear java.lang.ClassFormatError: null
, it is usually modified by other bytecode tools that are not compatible with arthas modified bytecode.
For example: use skywalking V8.1.0 below cannot trace, watch classes enhanced by skywalking agentopen in new window, V8.1.0 or above is compatible, refer to skywalking configuration for more details. skywalking compatible with other javaagent bytecode processingopen in new window.
# class redefinition failed: attempted to change the schema (add/remove fields)
Reference: https://github.com/alibaba/arthas/issues/2165open in new window
# Can I use arthas offline?
Yes. Just download the full size package and unzip it, refer to: Download.
# How to use the specified version of Arthas without using the automatic upgrade version?
- When starting
as.sh
/arthas-boot.jar
, you can specify it with the--use-version
parameter. - Download the full package, unzip it, and cd to the arthas directory to start. In this case, the version in the current directory will be used.
# Attach the process with pid 1 in docker/k8s failed
Reference: https://github.com/alibaba/arthas/issues/362#issuecomment-448185416open in new window
# Why is the new version of Arthas downloaded, but the old version is connected?
For example, the started version of as.sh/arthas-boot.jar
is 3.5., but after connecting, the printed arthas version is 3.4..
It may be that the target process has been diagnosed with the old version of arthas before. You can execute stop
to stop the old version of arthas, and then reuse the new version to attach.
# The spring bean cglib object is obtained in the ognl expression, but the field is null
Reference: