日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java 故障处理与性能监控工具

發(fā)布時間:2025/3/12 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 故障处理与性能监控工具 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 概述
  • 基礎(chǔ)工具
    • jps
    • jstat
    • jinfo
    • jmap
    • jhat
    • jstack
  • 高級工具
    • VisualVM
      • VisualVM 的主要功能
    • Arthas
    • GC Easy

概述

在使用 Java 語言進(jìn)行開發(fā)的過程中,我們很可能會遇到各種程序問題。
比如,可能會遇見程序突然就靜止不動了,但是程序進(jìn)程依然顯示在后臺進(jìn)行;也可能會遇見程序莫名其妙地卡頓,甚至崩潰。當(dāng)問題比較直觀時,例如程序日志中明確地告訴你出現(xiàn)了一個 NPE 異常,出現(xiàn)在哪一行,那排查問題就會順暢很多。
但是很多時候出現(xiàn)的問題可能沒有那么直觀,所以我們需要學(xué)習(xí)使用一些工具來排查問題,或者進(jìn)行性能監(jiān)控。

基礎(chǔ)工具

基礎(chǔ)工具,這里主要介紹由 JDK 自帶的幾個用于查看或追蹤 Java 應(yīng)用運行情況的命令行工具。

jps

jps,即 Java Process Status。從名字就可以看出,這是個與 Java 進(jìn)程相關(guān)的的命令行工具。
這個命令用于列出正在運行的 Java 進(jìn)程,并顯示該進(jìn)程中虛擬機(jī)執(zhí)行的主類。例如:

可以看出,所有運行中的 Java 進(jìn)程都被打印出來了,打印出來的信息中有兩列,前一列是進(jìn)程的 id,后一項是虛擬機(jī)執(zhí)行的主類(運行 Main 方法的類)
jps 命令是一個非常常用,也是非常實用的命令,在后續(xù)介紹的工具中,基本都需要先使用 jps 命令獲取對應(yīng)程序的進(jìn)程 id 后才能使用

jstat

jstat,即 JVM Statistics Monitoring Tool,是一個用于監(jiān)控虛擬機(jī)各種運行信息的命令行工具。
它可以顯示當(dāng)前運行的 Java 進(jìn)程中的內(nèi)存使用情況、類加載數(shù)據(jù)、垃圾收集信息等實時運行數(shù)據(jù),功能十分強(qiáng)大。
jstat 主要的參數(shù)有:

  • -class:顯示當(dāng)前類加載相關(guān)信息
  • -gc:顯示當(dāng)前虛擬機(jī)堆以及方法區(qū)的使用情況,以及垃圾收集相關(guān)的數(shù)據(jù)

比較常用的是 -gc 參數(shù),格式為:jstat -gc 進(jìn)程 id。例如:

可以看出,指定的 Java 進(jìn)程的垃圾收集相關(guān)信息都被打印了出來,在排查內(nèi)存問題時比較常用

jinfo

jinfo,即 Configuration Info For Java,是一個用于查看和調(diào)整虛擬機(jī)各項參數(shù)的命令行工具。
它的功能主要分為以下幾個部分:

  • 不指定參數(shù)時,查看所有參數(shù)的值
  • -flag 參數(shù)查看指定參數(shù)的值
  • -flags 參數(shù)查看未顯式指定的參數(shù)對應(yīng)的值(默認(rèn)值)
  • 在 JDK 6 以后,可以使用 -flag 參數(shù)動態(tài)修改部分參數(shù)值

使用的格式為:jinfo [option] 進(jìn)程 id。例如:

可以看出,15848 這個進(jìn)程的最大堆內(nèi)存空間大小為 734003200 bit

jmap

jmap,即 Memory Map For Java,是一個用于生成堆轉(zhuǎn)儲快照(堆 dump 文件)的命令行工具。
通常情況下,當(dāng)我們需要查看堆內(nèi)各對象的存活情況時,就需要用到堆 dump 文件。堆 dump 文件即觸發(fā)堆轉(zhuǎn)儲那一刻的堆內(nèi)使用情況快照,內(nèi)部包含了各對象的存活情況及引用鏈等信息,對于問題定位有非常大的幫助。
獲取堆 dump 文件我們也可以設(shè)置當(dāng)出現(xiàn) OOM 異常時,讓虛擬機(jī)自動轉(zhuǎn)儲堆 dump 文件到指定目錄。如果想要在虛擬機(jī)正常運行時獲取堆 dump 文件,就需要用到 jmap 命令了。
jmap 命令除了獲取堆 dump 文件之外,還可以查詢 finalize 執(zhí)行隊列,當(dāng)前使用垃圾收集器種類等信息。
jmap 命令的主要參數(shù)為:

  • -dump:生成堆 dump 文件
  • -heap:顯示當(dāng)前使用的垃圾收集器種類等信息

在日常開發(fā)過程中,用的比較多的還是生成堆 dump 文件,格式為 jmap -dump:format=b,file=文件位置 進(jìn)程 id,例如:

可以看出,使用了 jmap -dump 后,在指定位置創(chuàng)建了堆 dump 文件

jhat

jhat,即 JVM Heap Analysis Tool,是一個用于分析堆 dump 文件的命令行工具。
當(dāng)我們使用 jmap 獲取了堆 dump 文件后,我們是不能直接打開查看文件的,因為里面是用特殊的文件格式來書寫的,所以我們需要借助工具才能看得懂里面的內(nèi)容。而 jhat 就是一個用于分析堆 dump 文件的工具。
用法也非常簡單,格式為 jhat dump 文件的路徑 即可,例如:

在使用了 jhat 命令后,它會創(chuàng)建一個 Web 服務(wù),用于查看分析結(jié)果,例如圖中提示我們在 7000 端口上啟動了一個服務(wù),我們打開 localhost:7000 查看的結(jié)果為:

可以看到,jhat 的分析結(jié)果在網(wǎng)頁中就展示出來了,頁面上的每個超鏈接都可以繼續(xù)點擊進(jìn)去查看進(jìn)一步的分析結(jié)果。
但是在實際應(yīng)用中,jhat 是比較少用的,因為首先 jhat 的分析結(jié)果過于粗糙,難以提取有用的信息;其次 JDK 為我們提供了其他更好用的圖形化界面用于分析并查看堆 dump 文件;最后,運行 jhat 命令比較占用系統(tǒng)資源,在堆文件比較大時可能會造成系統(tǒng)卡頓。

jstack

jstack,即 Stack Trace for Java,是一個用于生成虛擬機(jī)當(dāng)前時刻的線程快照(threaddump 文件)的命令行工具。
線程快照,就是正在運行的 Java 線程內(nèi)某一時刻每一個線程正在運行的方法的堆棧的集合。當(dāng)正在運行的程序中出現(xiàn)某個請求遲遲不響應(yīng),或者說某個線程長時間停頓的情況時,可以使用 jstat 命令查看相關(guān)線程的當(dāng)前執(zhí)行堆棧情況來定位問題的原因。
常用的參數(shù)為:

  • 不使用任何參數(shù)時,將會打印這個進(jìn)程內(nèi)的所有 Java 線程的堆棧運行情況
  • -l 參數(shù)將會額外顯示關(guān)于鎖的相關(guān)信息
  • -m 參數(shù)將會把本地方法的執(zhí)行堆棧也顯示出來

比較常用的是 -l 參數(shù),用法為 jstack -l 進(jìn)程 id,例如:

可以看到,該命令把線程的堆棧信息都打印了出來,由于加了 -l 參數(shù),還出現(xiàn)了鎖相關(guān)信息 Locked ownable synchronizers 的內(nèi)容

高級工具

高級工具,主要指的是多功能合一的,對于問題定位能力有極大提升的工具。這里主要介紹下面幾款:

  • JDK 自帶的 VisualVM
  • 阿里開源的 Arthas
  • 在線 GC 診斷工具 GC Easy

VisualVM

VisualVM ,官方名稱為 All-in-One Java Troubleshooting Tool,是功能最強(qiáng)大的 Java 運行監(jiān)控和故障處理程序之一。
從名稱就可以看出,這肯定是一個多種功能合一的工具。事實也確實如此,它除了常規(guī)的運行監(jiān)控與故障處理外,還提供了性能分析,擴(kuò)展插件等功能。除此之外,jvisualvm 還有個非常大的優(yōu)點:對于被監(jiān)控的 Java 程序完全無侵入,不需要基于特殊的運行方式,或者定制化的 Agent 去運行。
VisualVM 的啟動方式也很簡單,只需要在命令行輸入 jvisualvm 即可啟動

VisualVM 的主要功能

VisualVM 的主要功能如下所示:

  • 顯示當(dāng)前系統(tǒng)上運行的所有 Java 進(jìn)程與其環(huán)境信息(jps 和 jinfo 命令的功能)
  • 監(jiān)控 Java 程序的垃圾收集相關(guān)信息,與堆、方法區(qū)的內(nèi)存使用信息(jstat 命令的功能)
  • 監(jiān)控 Java 程序當(dāng)前所有線程的堆棧信息(jstack 命令的功能)
  • 創(chuàng)建堆 dump 文件,以及分析堆 dump 文件(jmap、jhat 命令的功能)
  • 多維度(方法,線程)進(jìn)行性能分析,可以找出各維度下耗時最長,性能最低下的數(shù)據(jù)條目
  • 其他擴(kuò)展插件帶來的功能,例如 Visual GC 插件,可以將堆內(nèi)存的使用情況及 GC 過程通過可視化的界面展示出來

Arthas

Alibaba 開源的一個 JVM 監(jiān)控工具,非常好用,可以在 linux 環(huán)境下運行后查看無圖形化的圖標(biāo)界面

  • 可以通過 jad 命令反編譯線上發(fā)布的代碼,查看是否發(fā)布成功了
  • 可以通過 dashboard 命令,查看統(tǒng)計圖表命令
  • 可以通過 thread 命令查看現(xiàn)在線程的所有狀態(tài),-b 參數(shù)查看是否有死鎖的線程
  • 可以通過 ognl 命令查看系統(tǒng)線上變量的值,或者執(zhí)行線上代碼!!

如果線上是集群部署的應(yīng)用,那么可以通過 zabbix 或者普羅米修斯等集群監(jiān)控工具先定位到是哪臺機(jī)器出了問題,然后再在這臺機(jī)器上執(zhí)行 arthas 相關(guān)命令。
官網(wǎng)地址為:Arthas

GC Easy

這是一款在線且收費的 GC 分析工具,可以通過上傳 GC 日志文件,或者堆 dump 文件來給出調(diào)優(yōu)意見,可以在完全不懂業(yè)務(wù)代碼的情況下,根據(jù)這個工具提供的意見,進(jìn)行 JVM 的參數(shù)調(diào)優(yōu),可以稱作是傻瓜式的 JVM 調(diào)優(yōu)工具。
官網(wǎng)地址為:GC Easy

總結(jié)

以上是生活随笔為你收集整理的Java 故障处理与性能监控工具的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。