1. 程式人生 > >線上問題排查神器 Arthas

線上問題排查神器 Arthas

線上問題排查神器 Arthas

之前介紹過 BTrace,線上問題排查神器 BTrace 的使用,也說它是線上問題排查神器。都是神器,但今天這個也很厲害,是不是更厲害不好說,但是使用起來非常簡單。如果你用 BTrace 的話,需要事先寫好探測指令碼,然後上傳到需要排查問題的伺服器,然後執行命令。比方說獲取某個方法的引數、返回值、異常等。而 Athas 方便在不用寫指令碼,直接用命令列方式就可以,使用它就好像在用安裝在伺服器上的各種工具一樣,比如 top、jps、jmap 等。

他們背後的邏輯都是位元組碼修改,如果你想了解,可以讀一讀這篇Java 除錯工具、熱部署、JVM 監控工具都用到了它

誇了半天,Arthas 到底有什麼神奇的呢,有什麼功效呢。以下是摘自官方的介紹。

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

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

這個類從哪個 jar 包載入的?

為什麼會報各種類相關的 Exception?

我改的程式碼為什麼沒有執行到?難道是我沒 commit?分支搞錯了?

遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?

線上遇到某個使用者的資料處理有問題,但線上同樣無法 debug,線下無法重現!

是否有一個全域性視角來檢視系統的執行狀況?

有什麼辦法可以監控到JVM的實時執行狀態?

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

看到上面的介紹是不是有種發現新大陸的感覺,恨不得拍拍大腿。心裡在想,要是早知道它,之前就不用為了一個詭異的線上 bug 重複發包打日誌了。

不管你現在用不用得上,都請記住它吧,相信我,遲早會用的上的。

安裝與啟動

先遠端到目標伺服器上,然後執行以下命令安裝並執行

wget https://alibaba.github.io/arthas/arthas-boot.jar
java -jar arthas-boot.jar

然後 Arthas 會列出當前伺服器上的所有 Java 程序。

Arthas fengzheng$ java -jar arthas-boot.jar 
[INFO] arthas-boot version: 3.1.1
[INFO] Found existing java process, please choose one and hit RETURN.
* [1]: 95301 org.kite.CmApplication
  [2]: 95300 org.jetbrains.jps.cmdline.Launcher
  [3]: 87737 org.kite.WdApplication

比如你想檢查 org.kite.WdApplication 這個應用的問題,那麼輸入數字 3 回車,會出現如下提示,並開始正式與目標應用互動。

正式互動開始,就到了大展拳腳的時候了,線上出現的問題基本上都可以找到合適的命令。

下面簡單的介紹幾個,就是為了演示一下使用方式。

monitor

## 監控 MonitorController 類下的 overview 方法
monitor -c 5 kite.springcloud.jxm.controller.MonitorController overview
## 監控 kite.springcloud.jxm.service package 下所有了類的所有方法 *是萬用字元 也可以是正則表示式
monitor -c 60 kite.springcloud.jxm.service.* *

-c 為執行週期,預設120 秒,例如 -c 5 表示 5 秒鐘輸出一次,-c 60 表示 60 秒輸出一次。

watch

## 方法執行前 列印引數 
watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{params}" -b -n 1
## 方法返回後 列印返回值
watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{returnObj}" -s -n 1
## 方法返回後 列印所在的 ClassLoader、所在的類、呼叫例項
watch kite.springcloud.jxm.service.MonitorDashboardService buildJvmInfo "{loader,clazz,target}" -s -n 1
## 列印耗時超過 200ms 方法的引數和返回值
watch kite.springcloud.jxm.service.MonitorDashboardService * '{params, returnObj}' '#cost>200'

trace

方法內部呼叫路徑,並輸出方法路徑上的每個節點上耗時

trace kite.springcloud.jxm.controller.MonitorController overview

# 多個類 模擬實現多穿鏈路 trace
trace -E kite.springcloud.jxm.controller.MonitorController|kite.springcloud.jxm.service.MonitorDashboardService overview

stack

輸出當前方法被呼叫的呼叫路徑

stack kite.springcloud.jxm.controller.MonitorController overview
stack kite.springcloud.jxm.service.MonitorDashboardService overview  -n 1

詳細的命令介紹直接看官方文件吧 。

另外,無論是 Arthas 還是 BTrace ,都是用來排查單機服務問題的,也就是應用內部的程式碼、效能問題,如果要排查不同服務之間的呼叫問題,那就是另一個維度上的事兒了。就需要 APM 的幫助了。

不要吝惜你的「推薦」呦

歡迎關注,不定期更新本系列和其他文章
古時的風箏 ,進入公眾號可以加入交流群

相關推薦

線上問題排查神器 Arthas

線上問題排查神器 Arthas 之前介紹過 BTrace,線上問題排查神器 BTrace 的使用,也說它是線上問題排查神器。都是神器,但今天這個也很厲害,是不是更厲害不好說,但是使用起來非常簡單。如果你用 BTrace 的話,需要事先寫好探測指令碼,然後上傳到需要排查問題的伺服器,然後執行命令。比方說獲取某個

Java線上問題排查神器Arthas快速上手與原理淺談

![](https://user-gold-cdn.xitu.io/2019/11/17/16e777302495aab9?w=1324&h=891&f=png&s=924323) # 前言 當你興沖沖地開始執行自己的Java專案時,你是否遇到過如下問題: - 程式在穩定運行了,

親測的一款線上作圖神器:ProcessOn

本人近日發現一款作圖神器:ProcessOn 它是一款線上的作圖工具,完全國產,前臺是用HTML5  Canvas加javascript做繪圖,後臺用java實現資料處理和圖片生成, 整站UI基本類似谷歌docs,整體給我的感覺很炫,也很舒服,我尋找到他的團隊瞭解了一下,

線上排查工具btrace和jvm-inspector使用說明

btrace=================================================================btrace官網:https://kenai.com/projects/btrace/pages/UserGuide下載1.2可執行

線上排查實戰】AOP切面執行順序你真的瞭解嗎

# 前言 > 忙,是我這個月的主旋律,也是我頻繁鴿文章的介面————蠻三刀把刀 公司這兩個月啟動了全新的專案,專案排期滿滿當當,不過該學習還是要學習。這不,給公司搭專案的時候,踩到了一個Spring AOP的坑。 本文內容重點: - 問題描述 - Spring AOP執行順序 - 探究順序錯誤的

Arthas實踐--抽絲剝繭排查線上應用日誌打滿問題

現象 在應用的 service_stdout.log裡一直輸出下面的日誌,直接把磁碟打滿了: 23:07:34.441 [TAIRCLIENT-1-thread-1] DEBUG io.netty.channel.nio.NioEventLoop - Selector.selec

線上問題排查,一不小心踩到阿里的 arthas坑了

最近幫新來的校招同學排查一個線上問題,問題本身不是很難,但是過程中踩到了一個arthas的坑,挺有意思的。 同時,也分享下在排查過程中使用的一些比較實用的工具,包括tcpdump、arthas、simpleHTTPServer等,希望能對大家有所幫助。 1.問題描述 新開發的一個功能,簡單來說,就是讀取資料庫

線上性能問題初步排查方法

uniq 查看 含義 常用 inf 如果 cep 建立 ren 引言 有時候有很多問題只有在線上或者預發環境才能發現,而線上又不能Debug,所以線上問題定位就只能看日誌,系統狀態和Dump線程,本文只是簡單的介紹一些常用的工具,幫助定位線上問題。 問題定位 1: 首先使用

mysql 線上故障排查

mysql 線上故障排查Mysql 系統報連接池滿iostatslowlogWhat’s in slow log?Mk-query-digest mk-query-digest 全面分析slow log本文出自 “李世龍” 博客,謝絕轉載!mysql 線上故障排查

一卡通vip充值消費線上oracle庫服務器故障排查過程

oracle 上圖是oracle體系總架構圖今天突然公司所有終端pos機不能刷卡消費,財務室不能充值,一下很多電話打過來了,第一反應肯定數據庫出問題了,登陸到數據庫服務器,果然sqlplus連進去後就不斷提示要求輸入用戶名,彈出一下提示:ERROR:ORA-00020: maximum number of p

線上FullGC頻繁的排查

enc dump for visualvm http 可用 分布式部署 中一 1.8 線上FullGC頻繁的排查 問題 前段時間發現線上的一個dubbo服務Full GC比較頻繁,大約每兩天就會執行一次Full GC。 Full GC的原因 我們知道Full GC的觸發條件

java線上問題排查之rocketmq

for run 排查 com yun locks nano roc work "NettyClientWorkerThread_1" #43 daemon prio=5 os_prio=0 tid=0x00007f1018010000 nid=0x83 waiting on

Linux命令排查線上問題常用的幾個

com .cn 緩沖區 建立 sleep sed gre 命令 文件系統 排查線上問題常用的幾個Linux命令 https://www.cnblogs.com/cjsblog/p/9562380.html top 相當於Windows任務管理器 可以看到,輸出結果分兩部分,

dpdk-lvs的一次線上故障排查報告

本文記錄了dpdk-lvs叢集的一次線上故障排查過程,排查思路可供讀者參考。 上篇文章回顧: SOAR的IDE外掛——您的貼身DBA保鏢 背景 我們內部基於 dpdk 自研的高效能負載均衡器 dpdk-lvs 已經在多個機房部

Arthas實踐--使用redefine排查應用奇怪的日誌來源

背景 隨著應用越來越複雜,依賴越來越多,日誌系統越來越混亂,有時會出現一些奇怪的日誌,比如: [] [] [] No credential found 那麼怎樣排查這些奇怪的日誌從哪裡打印出來的呢?因為搞不清楚是什麼logger打印出來的,所以想定位就比較頭疼。 下面介

深入Spring Boot:利用Arthas排查NoSuchMethodError

前言 有時spring boot應用會遇到java.lang.NoSuchMethodError的問題,下面以具體的demo來說明怎樣利用arthas來排查。 Demo: https://github.com/hengyunabc/spring-boot-inside/tree/

五款提高工作效率的線上工具【神器

1. Piktochart 是一個基於Web的資訊圖表應用程式,它允許沒有豐富經驗的使用者作為圖形設計師使用主題模板輕鬆建立圖表和視覺效果 2. canvas 是一個圖形設計工具網站,成立於2012年。它使用拖放格式,可以訪問超過一百萬張照片,圖形和字型。它被非設計師和專業人士使用。這些工具可用於Web和列

一次線上伺服器inode打滿的事故排查

早晨來到公司收到線上伺服器磁碟/目錄滿了的報警,於是登到伺服器上,使用df -h檢視磁碟情況: # df -h Filesystem Size Used Avail Use% Mounted on /dev/vda2 36G 36G 0

一次線上記憶體洩漏的問題排查

上線了好久的專案今天突然出現cpu到達100% 的情況,先將專案緊急重啟,恢復正常後登入伺服器排查gc日誌,發現存在記憶體洩漏的情況。 top命令檢視程序情況,top -Hp pid檢視執行緒,再jstack匯出日誌。過程匆忙,忘了截圖 搜尋jsatck日誌看到許多執行緒阻塞在這一行程式碼 基本可以

線上問題排查-HBase寫數據出現NotServingRegionException(Region ... is not online)異常

cti method rec tail warn current 程序 執行 too 今天線上遇到一個問題:有一臺服務器的cpu持續沖高,排查發現是我們的一個java應用進程造成的,該進程在向hbase中寫入數據時,日誌不斷地打印下面的異常: org.apache.hado