1. 程式人生 > >阿里重磅開源線上分析診斷工具Arthas(阿爾薩斯)

阿里重磅開源線上分析診斷工具Arthas(阿爾薩斯)

github地址:

Arthas

arthas

English version goes here.

Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛。

當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:

  1. 這個類從哪個 jar 包載入的?為什麼會報各種類相關的 Exception?
  2. 我改的程式碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?
  3. 遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?
  4. 線上遇到某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重現!
  5. 是否有一個全域性視角來檢視系統的執行狀況?
  6. 有什麼辦法可以監控到JVM的實時執行狀態?

Arthas採用命令列互動模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。

快速開始

Linux/Unix/Mac

安裝Arthas:

curl -L https://alibaba.github.io/arthas/install.sh | sh

啟動Arthas:

./as.sh

Windows

  1. 點選 這裡 下載最新的Arthas zip包
  2. 解壓縮zip包.
  3. 進入bin目錄
  4. 執行以下命令 as.bat $PID

文件

社群正在進行英文版本的翻譯工作,如果您有興趣請在 這裡留言。

案例展示

Dashboard

dashboard

Thread

一目瞭然的瞭解系統的狀態,哪些執行緒比較佔cpu?他們到底在做什麼?

$ 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
    - 
[email protected]
"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 [email protected] at java.lang.Object.wait(Native Method) - waiting on [email protected] at java.lang.Object.wait(Object.java:503) at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:133)

jad

對類進行反編譯:

$ jad javax.servlet.Servlet

ClassLoader:
[email protected]
  [email protected]
    [email protected]

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

查詢JVM中已經載入的類

$ 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
                     [email protected]
                       [email protected]
                         [email protected]
 classLoaderHash   25131501

stack

檢視方法 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;[email protected]01
    @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

觀察方法執行的時候那個子呼叫比較慢:

trace

Watch

觀察方法 test.arthas.TestWatch#doGet 執行的入參,僅當方法丟擲異常時才輸出。

$ 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;[email protected][
    @RequestFacade[[email protected]],
    @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

web console

相關推薦

阿里重磅開源線上分析診斷工具Arthas(阿爾薩斯)

github地址: Arthas English version goes here. Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛。 當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決: 這個類從哪個 jar 包載入的?為什麼

阿里開源的 java 診斷工具—— Arthas

Arthas 是 阿里巴巴最近開源出來的一個針對 java 的工具,主要是針對 java 的問題進行診斷! 一、概述     這個工具可以協助你做下面這些事情: 這個類是從哪個 jar 包載入而來的? 為什麼會報各種類相關的 Exception?

Java開源診斷工具 Arthas 發布v3.1.0

abc lin pub 服務 def r.java html ria https ArthasArthas 自2018年9月份上線以來「傳送門」,已收獲近萬個star,感謝開發者們的認可。此次Arthas 3.1.0版本的發布,不僅帶來大家投票出來的新LOGO,還帶來強大的

推薦一款阿里開源的 Java 診斷工具,好用到爆!

Arthas是什麼鬼? Arthas是一款阿里巴巴開源的 Java 線上診斷工具,功能非常強大,可以解決很多線上不方便解決的問題。

Greys Java線上問題診斷工具

摘要: 線上系統為何經常出錯?資料庫為何屢遭黑手?業務呼叫為何頻頻失敗?連環異常堆疊案,究竟是那次呼叫所為? 數百臺伺服器意外雪崩背後又隱藏著什麼?是軟體的扭曲還是硬體的淪喪? 走進科學帶你瞭解Greys, Java線上問題診斷工具。   線上系統為何經

java 診斷工具——Arthas

該說不說!小編做的這些功能,最討厭的就是優化!某些前輩大佬寫的程式碼小輩我實在不敢恭維!那邏輯!那sql! 接下來!今天的主角就登場了,阿里巴巴最近開源出來的一個針對 java 的工具,主要是針對 java 的問題進行診斷---Arthas(阿爾薩斯) java 診斷工具——Arthas 這就是使用

Java診斷工具Arthas

Java診斷工具Arthas 1. Arthas簡介 Arthas是阿里開源的一個線上java診斷工具,發現阿里還是挺喜歡開源一些技術的,造福人類。昨天試用了一下,發現真是強大,解決了我工作兩年的很多困擾,有點相見恨晚的感覺。 根據官網的說明,它能解決下面的問題: 當你遇到以下類似問題而束手無策

阿里重磅開源Blink:為什麼我們等了這麼久?

12月20日,由阿里巴巴承辦的 Flink Forward China 峰會在北京國家會議中心召開,來自阿里、華為、騰訊、美團點評、滴滴、位元組跳動等公司的技術專家與參會者分享了各公司基於 Flink 的應用和實踐經驗。 感興趣的開發者可以看雲棲社群的對於大會的主會+5場分論壇的直播與視訊點播。 會議進行

阿里重磅開源 Blink:為什麼我們等了這麼久?

今年,實時流計算技術開始步入主流,各大廠都在不遺餘力地試用新的流計算框架,實時流計算引擎和 API 諸如 Spark Streaming、Kafka Streaming、Beam 和 Flink 持續火爆。阿里巴巴自 2015 年開始改進 Flink,並建立了內部分支 Blink,目前服務於阿里集團內部搜尋、

阿里重磅開源!4000臺伺服器真實資料集,揭祕世界級資料中心

阿里妹導讀:開啟一篇篇 IT 技術文章,你總能夠看到“大規模”、“海量請求”這些字眼。這些功能強大的網際網路應用,都執行在大規模資料中心上。資料中心每個機器的執行情況如何?執行著什麼樣的應用?應用有什麼特點?除了少數資深從業者之外,普通學生和企業的研究者很難了解其中細節。 今天,阿里巴巴再度開放一份計算機叢

分析診斷工具之二:Explain結果解讀與實踐

  MySQL的EXPLAIN命令用於SQL語句的查詢執行計劃(QEP)。這條命令的輸出結果能夠讓我們瞭解MySQL 優化器是如何執行SQL 語句的。這條命令並沒有提供任何調整建議,但它能夠提供重要的資訊幫助你做出調優決策。 語法 MySQL 的EXPLAIN 語法可以執行在SELECT 語句或者特定表上。

分析診斷工具之一:MYSQL效能檢視(多指標)

網上有很多的文章教怎麼配置MySQL伺服器,但考慮到伺服器硬體配置的不同,具體應用的差別,那些文章的做法只能作為初步設定參考,我們需要根據自己的情況進行配置優化,好的做法是MySQL伺服器穩定運行了一段時間後執行,根據伺服器的”狀態”進行優化。 開啟慢查詢方法:其實開啟mysql的慢查詢日誌很簡單,只需要在

java 診斷工具—— Arthas

程式設計師xx:我這個任務做完了,還有什麼任務麼?經理:咱們這個專案有些地方速度有些慢,你來優化

6到飛起的Java診斷工具Arthas,你用過嗎?

記得前段時間遇到了一個頁面載入過長的問題,當時就想排查下在哪一步消耗的時間比較長,由於是線上問題,第一反應就是有沒有什麼辦法可以無

阿里內部的那個牛逼帶閃電的Java診斷工具終於開源

原文地址 在阿里巴巴內部,有很多自研工具供開發者使用,其中有一款工具,是幾乎每個Java開發都使用過的工具,那就是Arthas,這是一款Java診斷工具,是一款牛逼帶閃電的工具。該工具已於2018年9月份開源。 GitHub地址:https://github.com/alibaba/ar

帶你上手阿里開源的 Java 診斷利器:Arthas

> 本文適合有 Java 基礎知識的人群。 ![](https://img2020.cnblogs.com/blog/759200/202007/759200-20200719221828489-817000380.png) 本文作者:HelloGitHub-秦人 HelloGitHub 推出

大資料線上分析處理和常用工具

大資料線上分析處理的特點 . 資料來源源不斷的到來; 資料需要儘快的得到處理,不能產生積壓; 處理之後的資料量依然巨大,仍然後TB級甚至PB級的資料量; 處理的結果能夠儘快的展現; 以上四個特點可以總結為資料的收集->資料的傳輸->資料的處理-&g

阿里雲RDS線上DDL工具gh-ost

最近公司進行了阿里雲遷移,將所有伺服器遷移到阿里雲後,在對rds進行ddl的時候,發現原來的pt工具無法正常使用,主要表現在連線資料庫的時候等待,將原始表資料拷貝到中間表時緩慢,變更過程中一直提示連不上RDS。雖然使用pt-osc可以對小表變更,但是對大表DDL的時候太過緩慢,而且一直連線中斷。所以只能尋

2018開源靜態分析工具-第一部分-python

翻譯自:https://medium.com/@prasincs/open-source-static-analysis-for-security-in-2018-part-1-python-348e9c1af1cd 翻譯:聶心明 我對靜態分析工具的態度是即愛也

2018開源靜態分析工具-第三部分-go

Gometalinter Go Metalinter( https://github.com/alecthomas/gometalinter )是本文的TLDR版本–如果你喜歡kitchensink帶給你的一切體驗,用go metalinter也足夠可以檢查所