mirror of
https://github.com/alibaba/arthas.git
synced 2024-04-21 10:21:39 +00:00
Enhance English version of README, add more showcases.
This commit is contained in:
+204
-1
@@ -28,8 +28,34 @@ Arthas is born to solve these issues. You can trouble-shoot your production issu
|
||||
* command line interactive mode, with auto completed feature enabled.
|
||||
* telnet and websocket support, which enables both local and remote diagnostics with command line and browsers.
|
||||
|
||||
### Quick start
|
||||
|
||||
#### Linux/Unix/Mac
|
||||
|
||||
Install Arthas:
|
||||
|
||||
```
|
||||
curl -L https://alibaba.github.io/arthas/install.sh | sh
|
||||
```
|
||||
|
||||
Start Arthas:
|
||||
|
||||
```
|
||||
./as.sh
|
||||
```
|
||||
|
||||
#### Windows
|
||||
|
||||
1. Click [here](http://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22com.taobao.arthas%22%20AND%20a%3A%22arthas-packaging%22) to Download the latest binary releases.
|
||||
2. Unzip the file.
|
||||
3. Go to the bin directory
|
||||
4. run the following command `as.bat $PID`
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
English version is on the way, if you would like to contribute, please leave a message [here](https://github.com/alibaba/arthas/issues/51)
|
||||
|
||||
* [User manual](https://alibaba.github.io/arthas/)
|
||||
* [Installation](https://alibaba.github.io/arthas/install-detail.html)
|
||||
* [Quick start](https://alibaba.github.io/arthas/quick-start.html)
|
||||
@@ -46,9 +72,186 @@ Arthas is born to solve these issues. You can trouble-shoot your production issu
|
||||
|
||||

|
||||
|
||||
#### Thread
|
||||
|
||||
See who is eating your cpu (ranked by top cpu usage) and what is going on there in one glance:
|
||||
|
||||
```
|
||||
$ thread -n 3
|
||||
"as-command-execute-daemon" Id=29 cpuUsage=75% RUNNABLE
|
||||
at sun.management.ThreadImpl.dumpThreads0(Native Method)
|
||||
at sun.management.ThreadImpl.getThreadInfo(ThreadImpl.java:440)
|
||||
at com.taobao.arthas.core.command.monitor200.ThreadCommand$1.action(ThreadCommand.java:58)
|
||||
at com.taobao.arthas.core.command.handler.AbstractCommandHandler.execute(AbstractCommandHandler.java:238)
|
||||
at com.taobao.arthas.core.command.handler.DefaultCommandHandler.handleCommand(DefaultCommandHandler.java:67)
|
||||
at com.taobao.arthas.core.server.ArthasServer$4.run(ArthasServer.java:276)
|
||||
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
|
||||
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
|
||||
at java.lang.Thread.run(Thread.java:745)
|
||||
|
||||
Number of locked synchronizers = 1
|
||||
- java.util.concurrent.ThreadPoolExecutor$Worker@6cd0b6f8
|
||||
|
||||
"as-session-expire-daemon" Id=25 cpuUsage=24% TIMED_WAITING
|
||||
at java.lang.Thread.sleep(Native Method)
|
||||
at com.taobao.arthas.core.server.DefaultSessionManager$2.run(DefaultSessionManager.java:85)
|
||||
|
||||
"Reference Handler" Id=2 cpuUsage=0% WAITING on java.lang.ref.Reference$Lock@69ba0f27
|
||||
at java.lang.Object.wait(Native Method)
|
||||
- waiting on java.lang.ref.Reference$Lock@69ba0f27
|
||||
at java.lang.Object.wait(Object.java:503)
|
||||
at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)
|
||||
```
|
||||
|
||||
#### jad
|
||||
|
||||
Decompile your class with one shot:
|
||||
|
||||
```java
|
||||
$ jad javax.servlet.Servlet
|
||||
|
||||
ClassLoader:
|
||||
+-java.net.URLClassLoader@6108b2d7
|
||||
+-sun.misc.Launcher$AppClassLoader@18b4aac2
|
||||
+-sun.misc.Launcher$ExtClassLoader@1ddf84b8
|
||||
|
||||
Location:
|
||||
/Users/xxx/work/test/lib/servlet-api.jar
|
||||
|
||||
/*
|
||||
* Decompiled with CFR 0_122.
|
||||
*/
|
||||
package javax.servlet;
|
||||
|
||||
import java.io.IOException;
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
|
||||
public interface Servlet {
|
||||
public void init(ServletConfig var1) throws ServletException;
|
||||
|
||||
public ServletConfig getServletConfig();
|
||||
|
||||
public void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
|
||||
|
||||
public String getServletInfo();
|
||||
|
||||
public void destroy();
|
||||
}
|
||||
```
|
||||
|
||||
#### sc
|
||||
|
||||
Search any loaded class with detailed infomation.
|
||||
|
||||
```
|
||||
$ sc -d org.springframework.web.context.support.XmlWebApplicationContext
|
||||
class-info org.springframework.web.context.support.XmlWebApplicationContext
|
||||
code-source /Users/xxx/work/test/WEB-INF/lib/spring-web-3.2.11.RELEASE.jar
|
||||
name org.springframework.web.context.support.XmlWebApplicationContext
|
||||
isInterface false
|
||||
isAnnotation false
|
||||
isEnum false
|
||||
isAnonymousClass false
|
||||
isArray false
|
||||
isLocalClass false
|
||||
isMemberClass false
|
||||
isPrimitive false
|
||||
isSynthetic false
|
||||
simple-name XmlWebApplicationContext
|
||||
modifier public
|
||||
annotation
|
||||
interfaces
|
||||
super-class +-org.springframework.web.context.support.AbstractRefreshableWebApplicationContext
|
||||
+-org.springframework.context.support.AbstractRefreshableConfigApplicationContext
|
||||
+-org.springframework.context.support.AbstractRefreshableApplicationContext
|
||||
+-org.springframework.context.support.AbstractApplicationContext
|
||||
+-org.springframework.core.io.DefaultResourceLoader
|
||||
+-java.lang.Object
|
||||
class-loader +-org.apache.catalina.loader.ParallelWebappClassLoader
|
||||
+-java.net.URLClassLoader@6108b2d7
|
||||
+-sun.misc.Launcher$AppClassLoader@18b4aac2
|
||||
+-sun.misc.Launcher$ExtClassLoader@1ddf84b8
|
||||
classLoaderHash 25131501
|
||||
|
||||
```
|
||||
|
||||
#### stack
|
||||
|
||||
View the call stack of `test.arthas.TestStack#doGet`:
|
||||
|
||||
```
|
||||
$ stack test.arthas.TestStack doGet
|
||||
Press Ctrl+C to abort.
|
||||
Affect(class-cnt:1 , method-cnt:1) cost in 286 ms.
|
||||
ts=2018-09-18 10:11:45;thread_name=http-bio-8080-exec-10;id=d9;is_daemon=true;priority=5;TCCL=org.apache.catalina.loader.ParallelWebappClassLoader@25131501
|
||||
@test.arthas.TestStack.doGet()
|
||||
at javax.servlet.http.HttpServlet.service(HttpServlet.java:624)
|
||||
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
|
||||
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
|
||||
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
|
||||
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
|
||||
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
|
||||
...
|
||||
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
|
||||
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
|
||||
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
|
||||
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:451)
|
||||
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1121)
|
||||
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
|
||||
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
|
||||
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
|
||||
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
|
||||
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
|
||||
at java.lang.Thread.run(Thread.java:745)
|
||||
```
|
||||
|
||||
#### Trace
|
||||
|
||||
See who is slowing down your method invocation with trace command:
|
||||
|
||||

|
||||
|
||||
#### Watch
|
||||
|
||||
Watch the first parameter and thrown exception of `test.arthas.TestWatch#doGet` only if it throws exception.
|
||||
|
||||
```
|
||||
$ watch test.arthas.TestWatch doGet {params[0], throwExp} -e
|
||||
Press Ctrl+C to abort.
|
||||
Affect(class-cnt:1 , method-cnt:1) cost in 65 ms.
|
||||
ts=2018-09-18 10:26:28;result=@ArrayList[
|
||||
@RequestFacade[org.apache.catalina.connector.RequestFacade@79f922b2],
|
||||
@NullPointerException[java.lang.NullPointerException],
|
||||
]
|
||||
```
|
||||
|
||||
#### Classloader
|
||||
|
||||
```
|
||||
$ classloader
|
||||
name numberOfInstances loadedCountTotal
|
||||
BootstrapClassLoader 1 3346
|
||||
com.taobao.arthas.agent.ArthasClassloader 1 1262
|
||||
java.net.URLClassLoader 2 1033
|
||||
org.apache.catalina.loader.ParallelWebappClassLoader 1 628
|
||||
sun.reflect.DelegatingClassLoader 166 166
|
||||
sun.misc.Launcher$AppClassLoader 1 31
|
||||
com.alibaba.fastjson.util.ASMClassLoader 6 15
|
||||
sun.misc.Launcher$ExtClassLoader 1 7
|
||||
org.jvnet.hk2.internal.DelegatingClassLoader 2 2
|
||||
sun.reflect.misc.MethodUtil 1 1
|
||||
```
|
||||
|
||||
#### Web Console
|
||||
|
||||
* https://alibaba.github.io/arthas/web-console
|
||||
|
||||

|
||||

|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 121 KiB |
Reference in New Issue
Block a user