本文目錄一覽:
java內存診斷軟件?
對於每一個java進程來說都有自己的內存池和使用空間,而這也就意味着會出現內存使用錯誤等問題,而這時候我們就需要對java內存進行診斷分析,今天雲南java培訓就一起來了就一下,在進行內存診斷上都有哪些軟件可以使用。
Java堆:分析診斷數據
堆轉儲分析
堆轉儲可以使用如下的工具進行分析:
EclipseMAT(內存分析工具,MemoryAnalyzerTool)是一個社區開發的分析堆轉儲的工具。它提供了一些很棒的特性,包括:
可疑的泄漏點:它能探測堆轉儲中可疑的泄露點,報告持續佔有大量內存的對象;
直方圖:列出每個類的對象數量、淺大小(shallow)以及這些對象所持有的堆。直方圖中的對象可以很容易地使用正則表達式進行排序和過濾。這樣有助於放大並集中我們懷疑存在泄露的對象。它還能夠對比兩個堆轉儲的直方圖,展示每個類在實例數量方面的差異。這樣能夠幫助我們查找Java堆中增長快的對象,並進一步探查確定在堆中持有這些對象的根;
不可達的對象:MAT有一個非常棒的功能,那就是它允許在它的工作集對象中包含或排除不可達/死對象。如果你不想查看不可達的對象,也就是那些會在下一次GC周期中收集掉的對象,只關心可達的對象,那麼這個特性是非常便利的;
重複的類:展現由多個類加載器所加載的重複的類;
到GC根的路徑:能夠展示到GC根(JVM本身保持存活的對象)的引用鏈,這些GC根負責持有堆中的對象;
OQL:我們可以使用對象查詢語言(ObjectQueryLanguage)來探查堆轉儲中的對象。它豐富了OQL的基礎設施,能夠編寫複雜的查詢,幫助我們深入了解轉儲的內部。
JavaVisualVM:監控、分析和排查Java語言的一站式工具。它可以作為JDK工具的一部分來使用,也可以從GitHub上下載。它所提供的特性之一就是堆轉儲分析。它能夠為正在監控的應用創建堆轉儲,也可以加載和解析它們。從堆轉儲中,它可以展現類的直方圖、類的實例,也能查找特定實例的GC根;
jhat命令工具(在/bin文件夾中)提供了堆轉儲分析的功能,它能夠在任意的瀏覽器中展現堆轉儲中的對象。默認情況下,Web服務器會在7000端口啟動。jhat支持範圍廣泛的預定義查詢和對象查詢語言,以便於探查堆轉儲中的對象;
Java任務控制(JavaMissionControl)的JOverflow插件:這是一個實驗性的插件,能夠讓Java任務控制執行簡單的堆轉儲分析並報告哪裡可能存在內存浪費;
Yourkit是一個商業的Javaprofiler,它有一個堆轉儲分析器,具備其他工具所提供的幾乎所有特性。除此之外,YourKit還提供了:
可達性的範圍(reachabilityscope):它不僅能夠列出可達和不可達的對象,還能按照它們的可達性範圍顯示它們的分佈,也就是,強可達、弱/軟可達或不可達;
內存探查:YourKit內置了一組全面的查詢,而不是使用ad-hoc查詢功能,YourKit的查詢能夠探查內存,查找反模式並為常見的內存問題分析產生原因和提供解決方案。
更效率、更優雅 | 阿里巴巴開發者工具不完全盤點
從人工到自動化,從重複到創新,技術演進的歷程中,伴隨着開發者工具類產品的發展。
阿里巴巴將自身在各類業務場景下的技術積澱,通過開源、雲上實現或工具等形式對外開放,本文將精選了一些阿里巴巴的開發者工具,希望能幫助開發者們提高開發效率、更優雅的寫代碼。
由於開發者涉及的技術領域眾多,筆者僅從自己熟悉的領域,以後端開發者的視角盤點平時可能有得到的工具。每個工具按照以下幾點進行介紹:
Arthas 阿里巴巴2018年9月開源的一款Java線上診斷工具。
工具的使用場景:
Arthas支持JDK 6+,支持Linux/Mac/Windows,採用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。
使用教程:
基礎教程:;id=arthas-basics
進階教程:;id=arthas-advanced
獲取方式:(免費)
開源地址:
Cloud Toolkit 是一款 IDE 插件,可以幫助開發者更高效地開發、測試、診斷並部署應用。通過 Cloud Toolkit,開發者能夠方便地將本地應用一鍵部署到任意機器(本地或雲端),並內置 Arthas 診斷、高效執行終端命令和 SQL 等。
工具的使用場景:
每次修改完代碼後,是否正在經歷反覆地打包?在 Maven 、Git 以及其他運維腳本和工具的之間頻繁切換?
採用 SCP 工具上傳?使用XShell或SecureCRT 登陸 服務器?替換部署包?重啟?
文件上傳到服務器指定目錄,在各種 FTP、SCP 工具之間頻繁切換 ?
使用教程:
獲取方式:(免費)
工具地址:
ChaosBlade 是一款遵循混沌工程實驗原理,提供豐富故障場景實現,幫助分佈式系統提升容錯性和可恢復性的混沌工程工具,可實現底層故障的注入,提供了延遲、異常、返回特定值、修改參數值、重複調用和try-catch 塊異常等異常場景。
工具的使用場景:
使用教程:
新手指南
獲取方式:(免費)
開源地址:新手指南
該插件用於檢測 Java 代碼中存在的不規範的位置,並給予提示。規約插件是採用kotlin語言開發。
使用教程:
IDEA插件使用文檔:
插件使用文檔
Eclipse插件使用文檔:插件使用文檔
獲取方式:(免費)
開源地址:
ARMS 是一款 APM 類的監控工具,提供前端、應用、自定義監控 3 類監控選項,可快速構建實時的應用性能和業務監控能力。
工具的使用場景:
使用教程:
前端監控接入:
應用監控接入:
自定義監控:
獲取方式:(收費)
工具地址:
Docsite 一款集官網、文檔、博客和社區為一體的靜態開源站點的解決方案,具有簡單易上手、上手不撒手的特質,同時支持 react 和靜態渲染、PC端和移動端、支持中英文國際化、SEO、markdown文檔、全局站點搜索、站點風格自定義、頁面自定義等功能。
使用教程:
獲取方式:(免費)
項目地址:
Freeline 可以充分利用緩存文件,在幾秒鐘內迅速地對代碼的改動進行編譯並部署到設備上,有效地減少了日常開發中的大量重新編譯與安裝的耗時。Freeline 最快捷的使用方法就是直接安裝 Android Studio 插件。
使用教程:
獲取方式:(免費)
項目地址:
PTS 可以模擬大量用戶訪問業務的場景,任務隨時發起,免去搭建和維護成本,支持 JMeter 腳本轉化為 PTS 壓測,同樣支持原生 JMeter 引擎進行壓測。
使用教程:
獲取方式:(收費)
工具地址:
KT 可以簡化在 Kubernetes 下進行聯調測試的複雜度,提高基於Kubernetes的研發效率。
使用教程:
獲取方式:(免費)
工具地址:
AHAS 為 K8s 等容器環境提供了架構可視化的功能,同時,具有故障注入式高可用能力評測和一鍵流控降級等功能,可以快速低成本的提升應用可用性。
工具的使用場景:
使用教程:
獲取方式:(免費)
工具地址:
作者:中間件小哥
Arthas,7000 字入門篇
Arthas 是Alibaba開源的Java診斷工具,深受開發者喜愛。
當你遇到以下類似問題而束手無策時,Arthas可以幫助你解決:
Arthas支持JDK 6+,支持Linux/Mac/Windows,採用命令行交互模式,同時提供豐富的 Tab 自動補全功能,進一步方便進行問題的定位和診斷。
推薦使用 arthas-boot,下載arthas-boot.jar,然後用java -jar的方式啟動:
註:在運行第2條命令之前,先運行一個java進程在內存中,不然會出現找不到java進程的錯誤。
打印幫助信息
如果下載速度比較慢,可以使用aliyun的鏡像:
1、在 D: 下創建 Arthas 目錄,在windows命令窗口下,使用curl命令下載阿里服務器上的jar包,大小138k。
2、使用 java 啟動 arthas-boot.jar,來安裝 arthas,大小約10M。運行此命令會發現java進程,輸入1按回車。則自動從遠程主機上下載 Arthas到本地目錄。
注意:啟動 Arthas 的時候一定要先啟動一個 Java 進程。
3、查看按照好的目錄
如果下載速度比較慢,可以嘗試用阿里雲的鏡像倉庫
1. 比如要下載3.5.4版本,下載的url是:
2. 解壓後,在文件夾里有arthas-boot.jar,直接用java -jar的方式啟動:
註:如果是Linux,可以使用以下命令解壓到指定的 arthas目錄
刪除下面文件:
直接刪除user home下面的.arthas和logs/arthas目錄
命令
注意 :在 Windows 中啟動 arthas 捕獲進程的時候可能會出現如下的報錯
直接將啟動命令換成
Arthas目前支持Web Console,用戶在attach成功之後,可以直接訪問:。
可以填入IP,遠程連接其它機器上的arthas。
默認情況下,arthas只listen 127.0.0.1,所以如果想從遠程連接,則可以使用 –target-ip參數指定listen的 IP
輸入dashboard(儀錶板),按回車/enter,會展示當前進程的信息,按ctrl+c可以中斷執行。
註:輸入前面部分字母,按tab可以自動補全命令
獲取到 arthas-demo進程的 Main Class
thread 14 會打印線程 ID 14的棧。如果是 thread 1會打印線程ID 1的棧,通常是main函數的線程。
thread 1 示例圖
3. 通過jad來反編譯Main Class
通過watch命令來查看demo.MathGame#primeFactors函數的返回值:
按 Q 或者 Ctrl+C 退出
如果只是退出當前的連接,可以用quit或者exit命令。Attach到目標進程上的arthas還會繼續運行,端口會保持開放,下次連接時可以直接連接上。
如果想完全退出arthas,可以執行stop命令。
查看命令幫助信息,help 命令會打印出所有可以用的命令
作用
打印文件內容,和linux里的cat命令類似;如果沒有寫路徑,則顯示當前目錄下的文件。
匹配查找,和linux里的grep命令類似,但它只能用於管道命令
舉例
使用正則表達式,顯示包含2個o字符的線程信息,thread | grep -e “o+”
返回當前的工作目錄,和linux命令類似
pwd: Print Work Directory 打印當前工作目錄
清空當前屏幕區域
查看當前會話的信息
重置增強類,將被 Arthas 增強過的類全部還原,Arthas 服務端關閉時會重置所有增強過的類
version
輸出當前目標 Java 進程所加載的 Arthas 版本號
history
打印命令 歷史
quit
退出當前 Arthas 客戶端,其他 Arthas 客戶端不受影響
關閉 Arthas 服務端,所有 Arthas 客戶端全部退出
keymap
Arthas快捷鍵列表及自定義快捷鍵
Arthas 命令行快捷鍵
顯示當前系統的實時數據面板,按q或ctrl+c退出
數據說明
查看當前 JVM 的線程堆棧信息
舉例
展示當前最忙的前3個線程並打印堆棧,thread -n 3
當沒有參數時,顯示所有線程的信息,thread ;當顯示1號線程的運行堆棧,thread 1
找出當前阻塞其他線程的線程,有時候我們發現應用卡住了, 通常是由於某個線程拿住了某個鎖, 並且其他線程都在等待這把鎖造成的。為了排查這類問題, arthas提供了thread -b, 一鍵找出那個罪魁禍首。thread -b
指定採樣時間間隔,每過1000毫秒採樣,顯示最占時間的3個線程thread -i 1000 -n 3
查看處於等待狀態的線程,thread –state WAITING
查看當前 JVM 的信息
查看和修改JVM的系統屬性
小結
查看當前JVM的環境屬性(System Environment Variables)
查看,更新VM診斷相關的參數
更新指定的選項
通過getstatic命令可以方便的查看類的靜態屬性
執行ognl表達式,這是從3.0.5版本新增的功能
官網:
參數說明
舉例
小結
查看JVM已加載的類信息,「Search-Class」 的簡寫,這個命令能搜索出所有已經加載到 JVM 中的 Class 信息
sc 默認開啟了子類匹配功能,也就是說所有當前類的子類也會被搜索出來,想要精確的匹配,請打開options disable-sub-class true開關
打印出類的 Field 信息
查看已加載類的方法信息
「Search-Method」 的簡寫,這個命令能搜索出所有已經加載了 Class 信息的方法信息。
顯示 String 類加載的方法,sm java.lang.String
顯示String中的toString方法詳細信息,sm -d java.lang.String toString
反編譯指定已加載類源碼
編譯 java.lang.String,jad java.lang.String
反編繹時只顯示源代碼,默認情況下,反編譯結果里會帶有 ClassLoader信息,通過–source-only選項,可以只打印源代碼。方便和 mc/redefine 命令結合使用。 jad –source-only java.lang.Object
反編譯指定的函數, jad demo.MathGame main
Memory Compiler/內存編譯器,編譯.java文件生成.class
加載外部的.class文件,redefine到JVM里
從上面可以得出,我們在 main() 方法新增的內容並沒有生效,在 run() 方法新增的內容生效了。
3. jvm相關命令
4. class和classloader相關命令
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/157828.html