如何使用阿里云ARMS诊断Java服务端报错问题
摘要:?這是ARMS團(tuán)隊(duì)推出的“網(wǎng)站常見問題1分鐘定位系列篇”第二文。
?
我的網(wǎng)站為什么一錯(cuò)再錯(cuò)
網(wǎng)頁報(bào)錯(cuò),尤其是5XX錯(cuò)誤是互聯(lián)網(wǎng)應(yīng)用最常見的問題之一。5XX錯(cuò)誤通常發(fā)生于服務(wù)端。服務(wù)端是業(yè)務(wù)邏輯最復(fù)雜,也是整條網(wǎng)絡(luò)請(qǐng)求鏈路中最容易出錯(cuò)、出了錯(cuò)最難排查的地方。
運(yùn)維工程師與研發(fā)工程師排查此類問題,通常要通過登錄機(jī)器查看日志來定位問題。對(duì)于一般的Java應(yīng)用錯(cuò)誤日志,通常是這幅模樣:
一般來說,對(duì)于邏輯不算太復(fù)雜、歷史不算“太悠久”的應(yīng)用來說,登錄機(jī)器看日志的方式能夠很大程度上地解決網(wǎng)站報(bào)錯(cuò)的問題。但遇到下列情況時(shí),使用傳統(tǒng)的方式可能就有些困難:
- 在一個(gè)分布式Java應(yīng)用集群中,我想知道這類錯(cuò)誤每分鐘發(fā)生了多少次,什么時(shí)候開始發(fā)生的;
- 系統(tǒng)太老,遺留異常我不想管了,我只想知道,今天和昨天相比,發(fā)布前和發(fā)布后相比,多了哪些異常;
- 我想知道這個(gè)錯(cuò)誤對(duì)應(yīng)的是哪個(gè)Web請(qǐng)求,Web請(qǐng)求的參數(shù)是什么;
- 客服給了我一個(gè)用戶下單失敗的訂單號(hào),我想知道這個(gè)用戶下單為啥失敗,到底哪里錯(cuò)了;
使用阿里云ARMS的0埋點(diǎn)技術(shù),1分鐘定位“錯(cuò)”問題
利用阿里云ARMS(應(yīng)用實(shí)時(shí)監(jiān)控 -?鏈接)的異常自動(dòng)捕捉、收集、統(tǒng)計(jì)、溯源能力,您只需要在您的應(yīng)用啟動(dòng)腳本中增加幾行探針加載邏輯 -?鏈接,不需要對(duì)您的應(yīng)用代碼做任何改動(dòng),即可以讓應(yīng)用中所有“錯(cuò)”調(diào)用無處可逃。
1、對(duì)應(yīng)用中的所有錯(cuò)誤進(jìn)行全方位監(jiān)控,只需要安裝ARMS Java探針(如果您的應(yīng)用托管于EDAS,您甚至可以跳過這一步?-?鏈接)
- 開通ARMS,并創(chuàng)建應(yīng)用;
- 下載Java探針包并解壓;
- 在Java應(yīng)用啟動(dòng)腳本中增加 -javaagent:/{user.workspace}/ArmsAgent/arms-bootstrap-1.7.0-SNAPSHOT.jar -Darms.licenseKey=xxx -Darms.appId=xxx (appId和licenseKey根據(jù)頁面分配的信息填寫,詳情可看 -?鏈接)
打開ARMS頁面,數(shù)據(jù)開始上報(bào),驗(yàn)證Java探針安裝成功。
2、所有“錯(cuò)”一覽無余
- 成功安裝探針后,在應(yīng)用概覽中我們立即就能看到系統(tǒng)中發(fā)生的所有“異常”,異常類型的分布以及發(fā)生次數(shù)。
- 點(diǎn)擊“應(yīng)用詳情”,可以看到更詳細(xì)的異常分布圖,您可以看到集群或者單臺(tái)機(jī)器的錯(cuò)誤詳情,從下圖中,我們可以看到從11點(diǎn)開始系統(tǒng)的錯(cuò)誤發(fā)生了激增的現(xiàn)象!
3、錯(cuò)誤溯源:找到導(dǎo)致錯(cuò)誤的原因
- 光看到錯(cuò)誤的分布還遠(yuǎn)遠(yuǎn)不夠,我們需要知道這個(gè)錯(cuò)誤發(fā)生的原因。雖然日志中Java的異常堆棧中包含了調(diào)用的代碼片段,但并不包含這次調(diào)用的完整上下游和請(qǐng)求參數(shù)。
- ARMS的探針技術(shù),通過字節(jié)碼增強(qiáng)技術(shù),可以以很小的性能開銷完整捕獲異常上下游的完整調(diào)用快照,讓異常的原因更加清晰。
- 我們可以從調(diào)用鏈快照中清晰地看到一次異常中的完整鏈路,我們甚至可以看到這次調(diào)用的詳細(xì)的請(qǐng)求參數(shù)和異常日志,以獲得更加詳細(xì)的問題上下文信息。
- 至此,我們完成了一次全白屏化的線上錯(cuò)誤診斷過程,通過ARMS探針診斷工具,再也不需要登錄機(jī)器診斷線上錯(cuò)誤問題了。
4、防患于未然 -- 設(shè)置告警
當(dāng)然,您可以在ARMS的告警設(shè)置中對(duì)某一個(gè)接口或全部接口設(shè)置告警,讓頁面接口出現(xiàn)錯(cuò)誤時(shí)第一時(shí)刻通知到您的運(yùn)維團(tuán)隊(duì)。
原文鏈接
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
?
總結(jié)
以上是生活随笔為你收集整理的如何使用阿里云ARMS诊断Java服务端报错问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这是一段关乎你的代码:你的未来 我们正在
- 下一篇: 让你久等了!《码出高效:Java 开发手