arthas/README.md

535 lines
23 KiB
Markdown
Raw Normal View History

2018-09-13 02:25:00 +08:00
## Arthas
2018-09-13 16:23:06 +08:00
![arthas](site/src/site/sphinx/arthas.png)
2018-09-30 19:58:57 +08:00
[![Build Status](https://travis-ci.org/alibaba/arthas.svg?branch=master)](https://travis-ci.org/alibaba/arthas)
[![codecov](https://codecov.io/gh/alibaba/arthas/branch/master/graph/badge.svg)](https://codecov.io/gh/alibaba/arthas)
2019-07-15 16:57:12 +08:00
[![maven](https://img.shields.io/maven-central/v/com.taobao.arthas/arthas-packaging.svg)](https://search.maven.org/search?q=g:com.taobao.arthas)
2018-09-30 19:58:57 +08:00
![license](https://img.shields.io/github/license/alibaba/arthas.svg)
[![Average time to resolve an issue](http://isitmaintained.com/badge/resolution/alibaba/arthas.svg)](http://isitmaintained.com/project/alibaba/arthas "Average time to resolve an issue")
[![Percentage of issues still open](http://isitmaintained.com/badge/open/alibaba/arthas.svg)](http://isitmaintained.com/project/alibaba/arthas "Percentage of issues still open")
2018-09-24 14:18:38 +08:00
`Arthas` is a Java Diagnostic tool open sourced by Alibaba.
2018-09-19 21:17:37 +08:00
Arthas allows developers to troubleshoot production issues for Java applications without modifying code or restarting servers.
2018-09-17 22:21:49 +08:00
2018-11-29 16:33:17 +08:00
[中文说明/Chinese Documentation](README_CN.md)
2018-09-13 02:25:00 +08:00
2018-09-19 21:17:37 +08:00
### Background
2018-09-13 02:25:00 +08:00
Often times, the production system network is inaccessible from the local development environment. If issues are encountered in production systems, it is impossible to use IDEs to debug the application remotely. More importantly, debugging in production environment is unacceptable, as it will suspend all the threads, resulting in the suspension of business services.
2018-09-13 02:25:00 +08:00
2019-09-29 16:21:01 +08:00
Developers could always try to reproduce the same issue on the test/staging environment. However, this is tricky as some issues cannot be reproduced easily on a different environment, or even disappear once restarted.
2018-09-13 02:25:00 +08:00
And if you're thinking of adding some logs to your code to help troubleshoot the issue, you will have to go through the following lifecycle; test, staging, and then to production. Time is money! This approach is inefficient! Besides, the issue may not be reproducible once the JVM is restarted, as described above.
2018-09-18 11:06:33 +08:00
Arthas was built to solve these issues. A developer can troubleshoot your production issues on-the-fly. No JVM restart, no additional code changes. Arthas works as an observer, which will never suspend your existing threads.
2018-09-18 11:06:33 +08:00
2018-09-19 21:17:37 +08:00
### Key features
2018-09-18 11:06:33 +08:00
* Check whether a class is loaded, or where the class is being loaded. (Useful for troubleshooting jar file conflicts)
2018-09-19 21:17:37 +08:00
* Decompile a class to ensure the code is running as expected.
2018-09-27 11:33:06 +08:00
* View classloader statistics, e.g. the number of classloaders, the number of classes loaded per classloader, the classloader hierarchy, possible classloader leaks, etc.
2018-09-19 21:17:37 +08:00
* View the method invocation details, e.g. method parameter, return object, thrown exception, and etc.
2018-09-27 11:33:06 +08:00
* Check the stack trace of specified method invocation. This is useful when a developers wants to know the caller of the said method.
2018-09-19 21:17:37 +08:00
* Trace the method invocation to find slow sub-invocations.
2018-09-27 11:33:06 +08:00
* Monitor method invocation statistics, e.g. qps, rt, success rate and etc.
* Monitor system metrics, thread states and cpu usage, gc statistics, and etc.
* Supports command line interactive mode, with auto-complete feature enabled.
* Supports telnet and websocket, which enables both local and remote diagnostics with command line and browsers.
2019-11-28 10:48:28 +08:00
* Supports profiler/Flame Graph
* Supports JDK 6+.
* Supports Linux/Mac/Windows.
2018-09-19 21:17:37 +08:00
2019-02-18 00:45:03 +08:00
### Online Tutorials(Recommend)
* [Arthas Basics](https://alibaba.github.io/arthas/arthas-tutorials?language=en&id=arthas-basics)
* [Arthas Advanced](https://alibaba.github.io/arthas/arthas-tutorials?language=en&id=arthas-advanced)
2018-09-19 21:17:37 +08:00
### Quick start
2018-09-18 11:06:33 +08:00
2018-11-29 16:33:17 +08:00
#### Use `arthas-boot`(Recommend)
2018-09-18 11:06:33 +08:00
2018-11-29 16:33:17 +08:00
Download`arthas-boot.jar`Start with `java` command:
2018-09-18 11:06:33 +08:00
2018-11-29 16:33:17 +08:00
```bash
2019-10-11 15:46:58 +08:00
curl -O https://alibaba.github.io/arthas/arthas-boot.jar
2018-11-29 16:33:17 +08:00
java -jar arthas-boot.jar
2018-09-18 11:06:33 +08:00
```
2018-11-29 16:33:17 +08:00
Print usage:
2018-09-18 11:06:33 +08:00
2018-11-29 16:33:17 +08:00
```bash
java -jar arthas-boot.jar -h
2018-09-18 11:06:33 +08:00
```
2018-11-29 16:33:17 +08:00
#### Use `as.sh`
You can install Arthas with one single line command on Linux, Unix, and Mac. Copy the following command and paste it into the command line, then press *Enter* to run:
2018-11-29 16:33:17 +08:00
```bash
curl -L https://alibaba.github.io/arthas/install.sh | sh
2018-09-18 11:06:33 +08:00
```
2018-11-29 16:33:17 +08:00
The command above will download the bootstrap script `as.sh` to the current directory. You can move it the any other place you want, or put its location in `$PATH`.
2018-09-18 11:06:33 +08:00
2018-11-29 16:33:17 +08:00
You can enter its interactive interface by executing `as.sh`, or execute `as.sh -h` for more help information.
2018-09-18 11:06:33 +08:00
2018-09-19 21:17:37 +08:00
### Documentation
2018-09-18 11:06:33 +08:00
2019-02-18 00:45:03 +08:00
* [Online Tutorials(Recommend)](https://alibaba.github.io/arthas/arthas-tutorials?language=en)
2018-09-20 15:49:17 +08:00
* [User manual](https://alibaba.github.io/arthas/en)
* [Installation](https://alibaba.github.io/arthas/en/install-detail.html)
2019-09-09 15:50:46 +08:00
* [Download](https://alibaba.github.io/arthas/en/download.html)
2018-09-20 15:49:17 +08:00
* [Quick start](https://alibaba.github.io/arthas/en/quick-start.html)
* [Advanced usage](https://alibaba.github.io/arthas/en/advanced-use.html)
2018-10-25 15:32:30 +08:00
* [Commands](https://alibaba.github.io/arthas/en/commands.html)
2019-09-09 15:50:46 +08:00
* [WebConsole](https://alibaba.github.io/arthas/en/web-console.html)
2018-12-19 14:18:21 +08:00
* [Docker](https://alibaba.github.io/arthas/en/docker.html)
2018-10-25 15:32:30 +08:00
* [User cases](https://github.com/alibaba/arthas/issues?q=label%3Auser-case)
2018-09-20 15:49:17 +08:00
* [Questions and answers](https://github.com/alibaba/arthas/issues?utf8=%E2%9C%93&q=label%3Aquestion-answered+)
2019-08-22 11:19:12 +08:00
* [Compile and debug/How to contribute](https://github.com/alibaba/arthas/blob/master/CONTRIBUTING.md)
2019-09-09 11:27:05 +08:00
* [Release Notes](https://github.com/alibaba/arthas/releases)
2018-08-31 11:49:48 +08:00
2018-09-13 17:15:52 +08:00
2018-09-19 21:17:37 +08:00
### Feature Showcase
2018-09-13 17:15:52 +08:00
2018-09-18 11:06:33 +08:00
#### Dashboard
2018-09-13 17:15:52 +08:00
2018-09-29 14:25:14 +08:00
* https://alibaba.github.io/arthas/en/dashboard
2018-09-14 16:11:59 +08:00
![dashboard](site/src/site/sphinx/_static/dashboard.png)
2018-09-18 11:06:33 +08:00
#### Thread
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/thread
2018-09-24 14:18:38 +08:00
See what is eating your cpu (ranked by top cpu usage) and what is going on there in one glance:
2018-09-18 11:06:33 +08:00
2019-02-18 00:45:03 +08:00
```bash
2018-09-18 11:06:33 +08:00
$ 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
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/jad
2018-09-19 21:17:37 +08:00
Decompile your class with one shot:
2018-09-18 11:06:33 +08:00
```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();
}
```
2019-02-18 00:45:03 +08:00
#### mc
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/mc
2019-02-18 00:45:03 +08:00
Memory compiler, compiles `.java` files into `.class` files in memory.
```bash
mc /tmp/Test.java
```
#### redefine
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/redefine
2019-02-18 00:45:03 +08:00
Load the external `*.class` files to re-define the loaded classes in JVM.
```bash
redefine /tmp/Test.class
redefine -c 327a647b /tmp/Test.class /tmp/Test\$Inner.class
```
2018-09-18 11:06:33 +08:00
#### sc
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/sc
2018-10-08 01:07:56 +08:00
Search any loaded class with detailed information.
2018-09-18 11:06:33 +08:00
2019-02-18 00:45:03 +08:00
```bash
2018-09-18 11:06:33 +08:00
$ 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
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/stack
2018-09-19 21:17:37 +08:00
View the call stack of `test.arthas.TestStack#doGet`:
2018-09-18 11:06:33 +08:00
2019-02-18 00:45:03 +08:00
```bash
2018-09-18 11:06:33 +08:00
$ 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
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/trace
2018-09-24 14:18:38 +08:00
See what is slowing down your method invocation with trace command:
2018-09-18 11:06:33 +08:00
![trace](site/src/site/sphinx/_static/trace.png)
#### Watch
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/watch
2018-09-19 21:17:37 +08:00
Watch the first parameter and thrown exception of `test.arthas.TestWatch#doGet` only if it throws exception.
2018-09-18 11:06:33 +08:00
2019-02-18 00:45:03 +08:00
```bash
2018-09-18 11:06:33 +08:00
$ 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],
]
```
#### Monitor
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/monitor
Monitor a specific method invocation statistics, including total number of invocations, average response time, success rate, and every 5 seconds:
2019-02-18 00:45:03 +08:00
```bash
$ monitor -c 5 org.apache.dubbo.demo.provider.DemoServiceImpl sayHello
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 109 ms.
timestamp class method total success fail avg-rt(ms) fail-rate
----------------------------------------------------------------------------------------------------------------------------
2018-09-20 09:45:32 org.apache.dubbo.demo.provider.DemoServiceImpl sayHello 5 5 0 0.67 0.00%
timestamp class method total success fail avg-rt(ms) fail-rate
----------------------------------------------------------------------------------------------------------------------------
2018-09-20 09:45:37 org.apache.dubbo.demo.provider.DemoServiceImpl sayHello 5 5 0 1.00 0.00%
timestamp class method total success fail avg-rt(ms) fail-rate
----------------------------------------------------------------------------------------------------------------------------
2018-09-20 09:45:42 org.apache.dubbo.demo.provider.DemoServiceImpl sayHello 5 5 0 0.43 0.00%
```
#### Time Tunnel(tt)
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/tt
Record method invocation data, so that you can check the method invocation parameters, returned value, and thrown exceptions later. It works as if you could come back and replay the past method invocation via time tunnel.
2019-02-18 00:45:03 +08:00
```bash
$ tt -t org.apache.dubbo.demo.provider.DemoServiceImpl sayHello
Press Ctrl+C to abort.
Affect(class-cnt:1 , method-cnt:1) cost in 75 ms.
INDEX TIMESTAMP COST(ms) IS-RET IS-EXP OBJECT CLASS METHOD
-------------------------------------------------------------------------------------------------------------------------------------
1000 2018-09-20 09:54:10 1.971195 true false 0x55965cca DemoServiceImpl sayHello
1001 2018-09-20 09:54:11 0.215685 true false 0x55965cca DemoServiceImpl sayHello
1002 2018-09-20 09:54:12 0.236303 true false 0x55965cca DemoServiceImpl sayHello
1003 2018-09-20 09:54:13 0.159598 true false 0x55965cca DemoServiceImpl sayHello
1004 2018-09-20 09:54:14 0.201982 true false 0x55965cca DemoServiceImpl sayHello
1005 2018-09-20 09:54:15 0.214205 true false 0x55965cca DemoServiceImpl sayHello
1006 2018-09-20 09:54:16 0.241863 true false 0x55965cca DemoServiceImpl sayHello
1007 2018-09-20 09:54:17 0.305747 true false 0x55965cca DemoServiceImpl sayHello
1008 2018-09-20 09:54:18 0.18468 true false 0x55965cca DemoServiceImpl sayHello
```
2018-09-18 11:06:33 +08:00
#### Classloader
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/classloader
2019-02-18 00:45:03 +08:00
```bash
2018-09-18 11:06:33 +08:00
$ 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
2018-09-14 16:11:59 +08:00
2018-09-29 14:25:14 +08:00
* https://alibaba.github.io/arthas/en/web-console
2018-09-14 16:11:59 +08:00
2018-09-17 22:21:49 +08:00
![web console](site/src/site/sphinx/_static/web-console-local.png)
2018-09-20 15:15:08 +08:00
2019-11-28 10:48:28 +08:00
#### Profiler/FlameGraph
2019-11-26 11:17:17 +08:00
* https://alibaba.github.io/arthas/en/profiler
```bash
$ profiler start
Started [cpu] profiling
```
```
$ profiler stop
profiler output file: /tmp/demo/arthas-output/20191125-135546.svg
OK
```
View profiler results under arthas-output via browser:
![](site/src/site/sphinx/_static/arthas-output-svg.jpg)
2018-12-17 15:11:45 +08:00
### Known Users
Welcome to register the company name in this issue: https://github.com/alibaba/arthas/issues/111 (in order of registration)
![Alibaba](static/alibaba.png)
![Alipay](static/alipay.png)
![Aliyun](static/aliyun.png)
![Taobao](static/taobao.png)
![Tmall](static/tmall.png)
2018-12-17 17:03:28 +08:00
![微医](static/weiyi.png)
2018-12-18 17:37:09 +08:00
![卓越教育](static/zhuoyuejiaoyu.png)
2018-12-19 14:04:58 +08:00
![狐狸金服](static/hulijingfu.png)
2018-12-20 17:05:55 +08:00
![三体云](static/santiyun.png)
2018-12-21 16:33:57 +08:00
![证大文化](static/zhengdawenhua.png)
2019-06-26 23:55:49 +08:00
![连连支付](static/lianlianpay.png)
2018-12-21 17:12:32 +08:00
![Acmedcare+](static/acmedcare.png)
2018-12-21 17:31:56 +08:00
![好慷](static/homeking365_log.png)
2018-12-21 17:28:43 +08:00
![来电科技](static/laidian.png)
2018-12-23 01:33:06 +08:00
![四格互联](static/sigehulian.png)
2018-12-24 11:22:37 +08:00
![ICBC](static/icbc.png)
2018-12-25 14:38:47 +08:00
![陆鹰](static/luying.png)
2018-12-28 14:09:53 +08:00
![玩友时代](static/wangyoushidai.png)
2019-01-03 17:52:59 +08:00
![她社区](static/tashequ.png)
2019-01-07 16:33:18 +08:00
![龙腾出行](static/longtengchuxing.png)
2019-01-09 11:01:37 +08:00
![foscam](static/foscam.png)
2019-01-10 12:45:40 +08:00
![二维火](static/2dfire.png)
2019-01-16 23:08:58 +08:00
![lanxum](static/lanxum_com.png)
2019-01-17 18:37:51 +08:00
![纳里健康](static/ngarihealth.png)
2019-01-18 01:20:09 +08:00
![掌门1对1](static/zhangmen.png)
![offcn](static/offcn.png)
2019-01-21 14:31:51 +08:00
![sia](static/sia.png)
2019-01-25 11:53:46 +08:00
![振安资产](static/zhenganzichang.png)
2019-02-13 19:05:15 +08:00
![菠萝](static/bolo.png)
2019-02-14 14:53:18 +08:00
![中通快递](static/zto.png)
2019-02-15 16:02:49 +08:00
![光点科技](static/guangdian.png)
2019-02-19 10:20:19 +08:00
![广州工程技术职业学院](static/gzvtc.jpg)
2019-02-25 14:12:28 +08:00
![mstar](static/mstar.png)
2019-02-27 16:03:08 +08:00
![xwbank](static/xwbank.png)
2019-02-28 16:18:11 +08:00
![imexue](static/imexue.png)
2019-03-04 11:34:27 +08:00
![keking](static/keking.png)
![secoo](static/secoo.jpg)
![viax](static/viax.png)
![yanedu](static/yanedu.png)
2019-03-13 00:32:13 +08:00
![duia](static/duia.png)
2019-03-18 22:51:17 +08:00
![哈啰出行](static/hellobike.png)
2019-03-26 20:01:08 +08:00
![hollycrm](static/hollycrm.png)
![citycloud](static/citycloud.jpg)
2019-04-02 11:30:14 +08:00
![yidianzixun](static/yidianzixun.png)
2019-04-09 14:35:25 +08:00
![神州租车](static/zuche.png)
2019-04-10 14:20:31 +08:00
![天眼查](static/tianyancha.png)
![商脉云](static/anjianyun.png)
![三新文化](static/sanxinbook.png)
2019-04-19 11:46:40 +08:00
![雪球财经](static/xueqiu.png)
![百安居](static/bthome.png)
2019-04-25 11:00:18 +08:00
![安心保险](static/95303.png)
2019-04-30 17:50:46 +08:00
![杭州源诚科技](static/hzyc.png)
2019-05-05 14:45:07 +08:00
![91moxie](static/91moxie.png)
2019-05-17 10:58:06 +08:00
![智慧开源](static/wisdom.png)
2019-05-20 11:17:08 +08:00
![富佳科技](static/fujias.png)
2019-05-20 14:42:41 +08:00
![鼎尖软件](static/dingjiansoft.png)
2019-05-23 15:27:08 +08:00
![广通软件](static/broada.png)
2019-06-03 10:51:06 +08:00
![九鼎瑞信](static/evercreative.jpg)
![小米有品](static/xiaomiyoupin.png)
2019-06-10 15:38:02 +08:00
![欧冶云商](static/ouyeel.png)
2019-06-27 00:11:27 +08:00
![投投科技](static/toutou.png)
![饿了么](static/ele.png)
![58同城](static/58.png)
2019-06-27 16:22:46 +08:00
![上海浪沙](static/runsa.png)
2019-07-15 17:12:40 +08:00
![符律科技](static/fhldtech.png)
![顺丰科技](static/sf.png)
![新致软件](static/newtouch.png)
2019-07-22 11:07:31 +08:00
![北京华宇信息](static/thunisoft.png)
2019-08-05 14:34:05 +08:00
![太平洋保险](static/cpic.png)
![旅享网络](static/risingch.png)
![水滴互联](static/shuidihuzhu.png)
2019-08-07 15:25:14 +08:00
![贝壳找房](static/ke.png)
2019-08-12 17:48:28 +08:00
![嘟嘟牛](static/dodonew.png)
2019-08-14 10:13:19 +08:00
![云幂信息](static/yunmixinxi.png)
2019-08-19 11:44:11 +08:00
![随手科技](static/sui.png)
![妈妈去哪儿](static/mamaqunaer.jpg)
![云实信息](static/realscloud.png)
![BBD数联铭品](static/bbdservice.png)
![伙伴集团](static/zhaoshang800.png)
![数梦工场](static/dtdream.png)
2019-09-04 15:04:17 +08:00
![安恒信息](static/dbappsecurity.png)
2019-09-23 16:21:31 +08:00
![亚信科技](static/asiainfo.png)
![云舒写](static/yunshuxie.png)
![微住](static/iweizhu.png)
![月亮小屋](static/bluemoon.png)
2019-10-17 16:35:02 +08:00
![大搜车](static/souche.png)
![今日图书](static/jinritushu.png)
![竹间智能](static/emotibot.png)
![数字认证](static/bjca.png)
2019-10-18 13:59:17 +08:00
![360金融](static/360jinrong.png)
2019-11-11 10:49:10 +08:00
![安居客](static/anjuke.jpg)
2019-11-08 14:40:25 +08:00
![qunar](static/qunar.png)
2019-11-14 14:28:58 +08:00
![ctrip](static/ctrip.png)
2019-11-27 13:50:06 +08:00
![Tuniu](static/tuniu.png)
2019-12-19 16:01:01 +08:00
![多点](static/dmall.jpg)
![转转](static/zhuanzhuan.jpg)
![金蝶](static/kingdee.jpg)
![华清飞扬](static/sincetimes.jpg)
![神奇视角](static/fasterar.jpg)
![南京昂克软件](static/angke.jpg)
![网盛生意宝](static/netsun.jpg)
![北京登云美业网络](static/idengyun.jpg)
![Holder](static/holder.png)
2020-03-02 16:36:13 +08:00
![立林科技](static/leelen.png)
2020-03-26 20:40:42 +08:00
![爱成长](static/aichengzhang.png)
2020-03-26 23:43:21 +08:00
![嘉云数据](static/clubfactory.png)
2020-03-27 15:09:49 +08:00
![百草味](static/bcw.png)
2020-03-27 16:59:01 +08:00
![青岛优米](static/youmi.png)
![紫光软件](static/unis.png)
![拓保软件](static/tobosoft.png)
![海信集团](static/hisense.png)
![小红唇](static/xiaohongchun.png)
2020-03-27 17:07:59 +08:00
![上海恺英](static/kaiying.png)
![上海慧力](static/xiaohuasheng.png)
![上海喔噻](static/shouqingba.png)
![vipkid](static/vipkid.png)
2020-03-27 17:38:04 +08:00
![宇中科技](static/yuzhong.png)
2019-11-27 13:50:06 +08:00
2019-08-22 11:11:49 +08:00
### Derivative Projects
* [Bistoury: A project that integrates Arthas](https://github.com/qunarcorp/bistoury)
* [A fork of arthas using MVEL](https://github.com/XhinLiang/arthas)
2018-09-20 15:15:08 +08:00
### Credit
2019-01-11 15:22:23 +08:00
#### Contributors
This project exists thanks to all the people who contribute.
<a href="https://github.com/alibaba/arthas/graphs/contributors"><img src="https://opencollective.com/arthas/contributors.svg?width=890&button=false" /></a>
#### Projects
2018-09-20 15:15:08 +08:00
* [greys-anatomy](https://github.com/oldmanpushcart/greys-anatomy): The Arthas code base has derived from Greys, we thank for the excellent work done by Greys.
2020-04-22 10:26:59 +08:00
* [termd](https://github.com/alibaba/termd): Arthas's terminal implementation is based on termd, an open source library for writing terminal applications in Java.
2018-09-20 15:15:08 +08:00
* [crash](https://github.com/crashub/crash): Arthas's text based user interface rendering is based on codes extracted from [here](https://github.com/crashub/crash/tree/1.3.2/shell)
2020-04-22 10:26:59 +08:00
* [cli](https://github.com/alibaba/cli): Arthas's command line interface implementation is based on cli, open sourced by vert.x
2019-02-18 00:25:34 +08:00
* [compiler](https://github.com/skalogs/SkaETL/tree/master/compiler) Arthas's memory compiler.
* [Apache Commons Net](https://commons.apache.org/proper/commons-net/) Arthas's telnet client.
2020-04-10 11:15:40 +08:00
* [async-profiler](https://github.com/jvm-profiling-tools/async-profiler) Arthas's profiler command.