阿里重磅開源線上分析診斷工具Arthas(阿爾薩斯)
github地址:
Arthas
English version goes here.
Arthas
是Alibaba開源的Java診斷工具,深受開發者喜愛。
當你遇到以下類似問題而束手無策時,Arthas
可以幫助你解決:
- 這個類從哪個 jar 包載入的?為什麼會報各種類相關的 Exception?
- 我改的程式碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?
- 遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?
- 線上遇到某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重現!
- 是否有一個全域性視角來檢視系統的執行狀況?
- 有什麼辦法可以監控到JVM的實時執行狀態?
Arthas
採用命令列互動模式,同時提供豐富的 Tab
自動補全功能,進一步方便進行問題的定位和診斷。
快速開始
Linux/Unix/Mac
安裝Arthas:
curl -L https://alibaba.github.io/arthas/install.sh | sh
啟動Arthas:
./as.sh
Windows
- 點選 這裡 下載最新的Arthas zip包
- 解壓縮zip包.
- 進入bin目錄
- 執行以下命令
as.bat $PID
文件
社群正在進行英文版本的翻譯工作,如果您有興趣請在 這裡留言。
案例展示
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
觀察方法執行的時候那個子呼叫比較慢:
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
相關推薦
阿里重磅開源線上分析診斷工具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也足夠可以檢查所