1. 程式人生 > >JVM效能監控——命令列工具

JVM效能監控——命令列工具

重要的監控資料

對於JVM的效能監控,主要注意以下一些引數,通過JVM自帶的命令列工具,即可檢測相關引數,從而找出系統或程式中存在的效能問題

  1. 當前使用的GC
  2. Java堆的大小,新生代和老年代的大小,永久代的大小
  3. Minor GC的頻率和持續時間,Full GC的頻率和持續時間
  4. 每個併發GC週期內的空間回收量
  5. GC前後JAVA堆的佔用量
  6. GC前後新生代和老年代的佔用量
  7. GC前後永久代的佔用量
  8. 是否顯示呼叫了System.gc()

命令列工具

幾個比較有用的命令列工具,可以幫助我們只管的檢測到JVM的相關引數

jps(JVM Process Status Tool) JVM程序狀況工具:

  • 主要功能:列出正在執行的虛擬機器程序,並顯示執行主類的名稱及程序在本地JVM中的ID(LVMID), 與ps命令相似,可以檢視JVM中的程序ID
  • 使用方法:jps [options][hostid]

[options]:
-q: 只輸出LVMID
-m: 輸出JVM啟動時傳給主類的方法
-l:輸出主類的全名,如果是Jar則輸出jar的路徑
-v: 輸出JVM啟動引數

jstat(JVM Statistics Monitoring Tool) JVM統計資訊監控工具:

  • 主要功能:監控JVM各種執行狀態資訊,如虛擬機器程序中的類裝載、記憶體、GC、JIT編譯等資料
  • 使用方法:jstat [options vmid [interval [s|ms] [count] ]]
  1. options:
    這裡寫圖片描述
  2. vmid:
    • 本地JVM程序:與LVMID一直,使用jps檢視
    • 遠端JVM程序:[protocol:][//]LVMID[@hostname[:post]/servername]
  3. internal和count:
    • 代表查詢間隔和次數,忽略說明只查詢一次
  4. 例項:
    jstat -gcutil 16270 250 10 //每250ms查詢一次程序16270的GC情況,共20次
    這裡寫圖片描述

jmap(JVM Memory Map for Java) Java記憶體映像工具

  • 主要功能:1.用於生成堆轉儲快照,即dump檔案;2. 可以查詢finalize執行佇列、Java堆和永久代的詳細資訊(使用率、當前用的GC等)
  • 使用方法:jmap [options] vmid
  1. options:
    這裡寫圖片描述
  2. 例項:
    jmap -histo 16270 >a.log //16270程序堆疊中物件的統計資訊
    這裡寫圖片描述

    • instances:表示例項數量
    • bytes:表示記憶體佔用
    • class name:表示類全名資訊

* 注:jmap使用的時候JVM會處於假死狀態,只能在服務癱瘓的時候為了解決問題來使用,否則會造成服務中中斷*

jstack(JVM Stack Trace for Java) : 堆疊跟蹤工具

  • 功能:1. 用於生成JVM當前時刻的執行緒快照(即當前JVM內每一個條執行緒正在執行的方法堆疊集合);2.用於分析執行緒出現長時間停頓的原因
  • 使用方法:jstack [options] vmid
  1. options:
    這裡寫圖片描述
  2. 例項:jstack -l 16270 //檢視16270的執行緒快照

這裡寫圖片描述

執行緒的狀態:
- Runnable:該執行緒具備所有執行條件,在執行佇列中準備作業系統的排程,或正在執行
- Wait on condition:執行緒等待某個條件的發生,如網路讀寫等。可通過stacktrace來分析
- Waiting for monitor entry:處於Entry Set監控器佇列
- In Ojbect.wait():處於Wait Set監控器佇列
執行緒鎖住資源
- 死鎖:通過dump資訊可以檢視是否執行緒間存在死鎖
- 熱鎖:多個執行緒對臨界區或者鎖的競爭,往往是導致系統性能瓶頸的主要因素

例項:Eclipse效能調優

綜合使用JVM命令列對Eclise效能調優
1.基本配置:
基本配置

2.JVM現狀:
JVM現狀

3.使用eclipse視覺化效能分析外掛,觀測到以下結果:

  • 從JVM堆的監視曲線中得到:
    • “堆大小”曲線和“使用堆”曲線一直都是很大的間隔距離
    • “最大堆”曲線向上:JVM內部在進行堆擴容
    • “使用堆”曲線向下:JVM出發了一次GC

JVM堆監控曲線

  • 永久代的監視曲線
    • “PermGen大小”曲線和“使用PermGen”完全重合
    • 說明:永久代中沒有可回收的資源,所以“使用PermGen”曲線不會向下發展

永久代監控曲線

  1. 得出的結論是:永久代導致的記憶體溢位

  2. 優化分析:

    • 減少時間:
      • 新生代:GC太頻繁,太小
      • 老年代:GC用時太長,不停地擴容
  3. 優化計劃:
    • 新生代提升到128M:避免新生代頻繁GC
    • 堆設定為512M,永久代設定為96M,並設定成固定值,以避免記憶體擴充套件

相關推薦

JVM效能監控——命令工具

重要的監控資料 對於JVM的效能監控,主要注意以下一些引數,通過JVM自帶的命令列工具,即可檢測相關引數,從而找出系統或程式中存在的效能問題 當前使用的GC Java堆的大小,新生代

jvm 效能監控 調優工具

1.jps 檢視java的程序 栗子, 2.jstack id,檢視程序的棧資訊 栗子, 3.taskkill -f -t -im  id,關閉執行緒 栗子: 4.jmap 檢視堆記憶體分配情況 5.jhat 檢視dump出的記憶體使用情況 首先我們轉儲堆記憶體

JVM效能監控工具(一)-jdk命令工具

概述 當系統出bug需要定位問題的時候,知識、經驗是關鍵基礎,資料是依據,工具是運用知識處理資料的手段。這裡所說的資料包括:執行日誌,異常堆疊,GC日誌,執行緒快照(threaddump/javacore檔案),堆轉儲快照(heapdump/hprof檔案)等

監控Linux效能的18個命令工具

對於系統和網路管理員來說每天監控和除錯Linux系統的效能問題是一項繁重的工作。在IT領域作為一名Linux系統的管理員工作5年後,我逐漸認識到監控和保持系統啟動並執行是多麼的不容易。基於此原因,我們已編寫了最常使用的18個命令列工具列表,這些工具將有助於每個Linux/Unix 系統管理員的工作。

監控 Linux 效能的 18 個命令工具

5.Netstat-網路狀態統計 Netstat是一個用於監控進出網路的包和網路介面統計的命令列工具。它是一個非常有用的工具,系統管理員可以用來監控網路效能,定位並解決網路相關問題。 # netstat -a | moreActive Internet connections (servers and es

深入理解JVM——效能監控工具(七)

前言 工欲善其事必先利其器,效能優化和故障排查在我們大都數人眼裡是件比較棘手的事情,一是需要具備一定的原理知識作為基礎,二是需要掌握排查問題和解決問題的流程、方法。本文就將介紹利用效能監控工具,幫助開發者更快更準的找到問題產生的根源。本文分為三部分,第一部分將

JVM效能監控與故障處理工具

一、JVM引數 1、引數分類 1.標準引數  功能和輸出的引數都是很穩定的 在未來的JVM版本中不會改變 可以使用java -help檢索出所有的標準引數 2.X引數  非標準化引數 在未來的版本可能會改變 所有的引數都用-X開始 可以使用java -X檢索

cTop:用於容器監控命令工具 | Linux 中國

ctop 為多個容器提供了一個簡潔凝練的實時指標概覽。它是一個類 top 的針對容器指標的介面。

JVM-JDK自帶命令工具

JDK自帶命令列工具 1. jps-檢視Java程序 jps命令相當於Linux下的ps命令,只不過它只列出Java程序。 jps :列出Java程式程序ID和Main函式名稱 jp

Java虛擬機器學習(8):檢視JVM引數及值的命令工具

檢視JVM各個引數值方式 1. HotSpot vm中的各個globals.hpp檔案  檢視jvm初始的預設值及引數 2.-XX:+PrintFlagsInitial引數 顯示所有可設定引數及預設值,可結

常用的jvm效能監控和故障處理工具

    目前,網上有很多免費或者收費的JVM效能分析和故障監控工具,免費的有Eclipse Memory Analyzer(用於分析堆轉存快照檔案dump)、jvm各個類堆cup的使用情況分析工具:async-profiler-1.4-linux-x64.tar.gz  (官

JVM調優前戲之JDK命令工具---jhat

在JDK的命令列中,一般開發人員最耳熟能詳的肯定就是java,javac,javap等常用命令,不過在jdk/bin下還有許多其他

JVM系列八(虛擬機器效能監控命令).

## jps JVM Process Status Tool,顯示指定系統內所有的 HotSpot 虛擬機器程序。顯示資訊包括虛擬機器執行主類名稱以及這些程序的本地虛擬機器唯一ID(Local Virtual Machine Identifier,LVMID)。 ``` jps [-q] [-mlvV] []

JVM 常用命令工具

> 本文部分摘自《深入理解 Java 虛擬機器第三版》 ## 基礎故障處理工具 Java 開發人員肯定都知道 JDK 的 bin 目錄下有許多小工具,這些小工具除了用於編譯和執行 Java 程式外,打包、部署、簽名、除錯、監控、運維等各種場景都可能會見到它們的影子 本文主要介紹的是用於監視虛擬機

ionic4+angular6 混合移動開發 capacitor cordova Xcode 命令工具 Command Line Tools

首先要更新或者安裝 ionic cli npm install -g ionic 建立專案 ionic start ionic-angular tabs --type=angular   –type=angular 是需要多加的引數,現在官方只整合好了angua

Capacitor 新一代混合應用“神器” 會代替Cordova嗎?? Xcode 命令工具 Command Line Tools

      1.介紹or暢想   Capacitor是由ionic團隊最新開發維護的一個跨平臺的應用程式容器,可以輕鬆構建在iOS,Android,Electron 和 Web 上本機執行的Web應用程式。我們稱這些應用為“Native

Cygwin(類UNIX模擬環境)&CURL(強大的http命令工具

前言: 需要我用curl試下能否傳送post請求調起公司的模擬系統(目前) 跟著大佬的腳步,親測一把~ 感謝大佬的提供的部落格和指導 @咩神  個人部落格園及來源地址 Cygwin(類UNIX模擬環境) 一個可以讓你在windows下玩轉linux命令的工具 Cygwin官網下載安裝包:http

svn使用規範、在Windows下使用svn命令工具、svn命令的解釋

以前在公司一直使用git,現在公司有用svn,一時間還真的不知道如何下手,在網上搜尋了很多大神和官網文件的指導,總結了下面一份教程,希望能夠幫助大家快速上手,如果想更細緻的瞭解相關內容,可以點選每個小節裡提供的的連結。 1、Windows下命令列工具: 發現原來安裝的tortoisesvn已經整合到she

macOS 升級後重裝命令工具的問題

問題背景 最近升級個人macbook 從 10.13 到 10.14 在終端輸入 git 不能用了,發現是重灌作業系統後原來的 Command Line Tools 被自動解除安裝了, 採用 xcode-select --install 命令發現 currently unavailable. 解決方法

Sentry命令工具除錯資訊檔案

sentry-cli可用於驗證和上傳除錯資訊檔案(dSYM,Proguard檔案等)。 除錯資訊檔案是其他檔案,可幫助我們提供有關崩潰報告的更多資訊。我們目前支援以下格式: 適用於iOS,tvOS和macOS的dSYM檔案 適用於Linux和Android的ELF符號 適用