線上經常遇到MQ消費速度忽高忽低,但是線下測試卻沒有問題。那會是哪一個問題引起的呢?因爲影響MQ消費速度的因素太多了,如下因素只要任何一種出現問題,就會影響MQ消費速度。
- JVM內存過高,一直在Full GC。
- Redis連接堵塞,導致Redis操作一直延遲。
- 第三方接口響應時間過長。
- 服務器cpu/帶寬/IO受限。
- Mysql出現慢sql,查詢過慢。
- 程序本身問題(例如異常循環)。
解決方案:
爲了排除具體原因,但是線上又不能進行錯誤調式,所以博主只能用最笨的辦法,每一行關鍵代碼,都寫上log日誌,然後通過輸出每一行代碼的執行時間,來確定到底是哪裏出錯。
方案問題:
但是打印日誌的方式需要修改代碼,有一定的風險,修改完又需要重新發布才能生效。最重要的是,MQ消費需要跑大量的數據,大部分數據都是正常的,少部分數據是異常的,針對於這種情況,打印日誌的方式就很難發現問題點。
尋求更優解:
那到底有沒有這麼一個工具可以不用修改任何代碼,就可以排查線上問題呢?今天就給大家推送一款神器Arthas,這是阿里巴巴開源的一款性能監控工具。
當你遇到以下類似問題而束手無策時,Arthas 可以幫助你解決:
- 這個類從哪個 jar 包加載的?爲什麼會報各種類相關的 Exception?
- 我改的代碼爲什麼沒有執行到?難道是我沒 commit?分支搞錯了?
- 遇到問題無法在線上 debug,難道只能通過加日誌再重新發布嗎?
- 線上遇到某個用戶的數據處理有問題,但線上同樣無法 debug,線下無法重現!
- 是否有一個全局視角來查看系統的運行狀況?
- 有什麼辦法可以監控到JVM的實時運行狀態?
Arthas入門:
Arthas本質其實就是一個jar包,所以只需要去官網下載對應的jar就可以了,然後通過java -jar的方式啓動,例如:
1 2 |
curl -O https://alibaba.github.io/arthas/arthas-boot.jar java -jar arthas-boot.jar |
啓動成功之後可以看到Arthas啓動標誌,如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[INFO] Try to attach process 71560 [INFO] Attach process 71560 success. [INFO] arthas-client connect 127.0.0.1 3658 ,---. ,------. ,--------.,--. ,--. ,---. ,---. / O \ | .--. ''--. .--'| '--' | / O \ ' .-' | .-. || '--'.' | | | .--. || .-. |`. `-. | | | || |\ \ | | | | | || | | |.-' | `--' `--'`--' '--' `--' `--' `--'`--' `--'`-----' wiki: https://alibaba.github.io/arthas version: 3.0.5.20181127201536 pid: 71560 time: 2018-11-28 19:16:24 $ |
Arthas也提供了Docker模式下的監控,我們只需要在DockerFile中增加如下代碼,就可以嵌入Arthas了。
1 2 |
# copy arthas COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas |
MQ消費過慢終極解決方案:
針對於上面提出的問題,MQ消費速度過慢,我們可以採用trace命令來解決,例如我們可以輸入:
1 |
trace -j com.fourkmiles.advertisement.service.impl.CampaignsV2ApiMethodServicelmpl getSearchTermReport '#cost > 1000' |
這個命令的意思是,CampaignsV2ApiMethodServicelmpl類的getSearchTermReport方法中,打印出執行時間超過1000的方法。
如下圖所示,它可以打印這個方法中每一行代碼所花費的時間。
它還可以監測:線程、jvm、方法、方法執行路徑、服務運行情況、反編譯代碼、獲取方法返回值等功能,Arthas都給我們提供了方便的命令來查詢這些指標。
總結:
總體來說Arthas功能還是非常強大的,對應線上bug排查可謂雪中送炭。但是Arthas本質還是一個jar服務,所以對服務器是有一定性能損耗的,在不監控的時候一定要關閉Arthas對應的服務。
官網地址:https://alibaba.github.io/arthas/install-detail.html
想要更多幹貨、技術猛料的孩子,快點拿起手機掃碼關注我,我在這裏等你哦~
林老師帶你學編程:https://wolzq.com