一款java診斷工具,java代碼檢測工具

本文目錄一覽:

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-hant/n/157828.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-18 20:02
下一篇 2024-11-18 20:03

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Python字符串寬度不限制怎麼打代碼

    本文將為大家詳細介紹Python字符串寬度不限制時如何打代碼的幾個方面。 一、保持代碼風格的統一 在Python字符串寬度不限制的情況下,我們可以寫出很長很長的一行代碼。但是,為了…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python基礎代碼用法介紹

    本文將從多個方面對Python基礎代碼進行解析和詳細闡述,力求讓讀者深刻理解Python基礎代碼。通過本文的學習,相信大家對Python的學習和應用會更加輕鬆和高效。 一、變量和數…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29

發表回復

登錄後才能評論