1. 程式人生 > >java自帶視覺化效能監控工具jconsole

java自帶視覺化效能監控工具jconsole

1. 前言

  • 想驗證你對 jvm 配的一些調優引數(比如 Xms、Xmx 等)有沒有起作用嗎?
  • 想不想實時監控你自定義的執行緒池的在實際執行時的執行緒個數、有沒有死鎖?
  • 應用出現 java.lang.OutOfMemoryError: Java heap space,你知道需要去調整 Xms、Xmx。想不想實時監控你的 Java 應用的堆記憶體使用情況,並根據峰值等資料設定最適合你的 Xms、Xmx 等引數?
  • 應用出現 java.lang.OutOfMemoryError: PermGen space,你知道需要去調整 XX:PermSize、XX:MaxPermSize。想不想找到你的應用的永久區 PermGen 的使用峰值,並根據其去設定合理的 XX:PermSize、XX:MaxPermSize 等引數?
  • 我們都知道,JVM 堆記憶體劃分為年輕代和年老代。JVM 預設下的年老代與年輕代的比例(即 XX:NewRatio,這個名字容易讓人產生混淆,即認為是年輕代比年老代)為 2(即把 JVM 堆記憶體平均分成了三份,年老大佔用了兩份,而年輕代佔用一份。參考資料 Sun Java System Application Server Enterprise Edition 8.2 Performance Tuning Guide),這個比例並不適合所有情況,特別是當你的應用裡區域性變數遠遠大於全域性變數,而且大量區域性變數生命週期都很短的時候。如何根據應用實時的執行執行情況合理配置年輕代(Young Generation,即 Eden 區和兩個 Survivor 區之和)和年老代(Old Generation,即 Tenured 區)的比例 XX:NewRatio 值?

Java 自帶效能監控工具:監視和管理控制檯 jconsole,它可以提供 Java 某個程序的記憶體、執行緒、類載入、jvm 概要以及 MBean 等的實時資訊,也許能夠對以上問題提供參考。

2. JVM 一些引數

在啟動 jconsole 之前我們先來回顧一下 JVM 的一些主要引數:

  • -Xms 初始/最小堆記憶體大小
  • -Xmx 最大堆記憶體大小
  • -Xmn 年輕代大小
  • -XX:NewSize 年輕代大小
  • -XX:MaxNewSize 年輕代最大值
  • -XX:NewRatio 年老代與年輕代比值
  • -XX:MaxPermSize 持久代最大值
  • -XX:PermSize 持久代初始值

有些資料說,Xms、Xmx 設定的是 JVM 記憶體大小,是不對的,JVM 除了留給開發人員使用的堆記憶體之外還有非堆記憶體。

讀者可能發現,有三種方式可以劃分年輕代大小:-Xmn 方式、-XX:NewSize + -XX:MaxNewSize 方式、-XX:NewRatio 方式。三種都可以,優先順序從高到低依次是 -XX:NewSize + -XX:MaxNewSize 方式、-Xmn 方式、-XX:NewRatio 方式,也就是說配置了前面優先順序高的後面的優先順序低的就被覆蓋掉了。

3. 本機啟用 jconsole 以監控 Java 程序

CMD 切換到 %JAVA_HOME%/bin 目錄,直接執行 jconsole
CMD 切換到 JAVA_HOME bin 目錄,直接執行 jconsole

即可開啟 Java 監視和管理控制檯:
即可開啟 Java 監視和管理控制檯

本地程序列表裡顯示了所有本地執行中的 Java 程序,雙擊你感興趣的那個程序(比如 PID 為 8504 那個),即可對該程序進行監控了:
雙擊你感興趣的那個程序
 

4. 遠端監控 Java 程序

要對 Java 程序進行遠端監控,在啟動它的時候需要啟用 JMX。
以遠端主機上的 tomcat 為例,先為 jmx 找一個可用的遠端埠,比如 9999:
先為 jmx 找一個可用的遠端埠

No news is good news~在 %TOMCAT_HOME%/bin/catalina.sh 檔案的前面加上以下配置:

在CODE上檢視程式碼片派生到我的程式碼片

  1. JAVA_OPTS=”-Xms1024m -Xmx2048m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false”  
JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxPermSize=128m -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
  • 1



如圖
tomcat的JAVA_OPTS配置
 

【博主 20150526 加註:開始】這樣寫在 tomcat 關閉的時候(執行 %tomcat%/bin/shutdown.sh)會報埠已使用異常:

錯誤: 代理丟擲異常錯誤: java.rmi.server.ExportException: Port already in use: 9999; nested exception is: 
        java.NET.BindException: 地址已在使用

這是因為 tomcat 在啟動、停止的時候都會執行 JAVA_OPTS 配置。這樣就只能使用 kill -9 來關閉 tomcat 了…

解決辦法是把監控配置寫在 CATALINA_OPTS 裡:

JAVA_OPTS=”-Xms1024m -Xmx2048m -XX:MaxPermSize=128m”
CATALINA_OPTS=”-Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false”

就可以了。CATALINA_OPTS 配置只是在 tomcat 啟動的時候執行。參考資料:https://bowerstudios.com/node/636。【博主 20150526 加註:結束】

然後重啟 tomcat,在本機開啟 Java 監視和管理控制檯,”遠端程序” 輸入遠端主機名和 jmx 埠號:

jmx 遠端連線

點選 “連線” 按鈕,即可對遠端主機上的 tomcat 進行實時監控了:
即可對遠端主機上的 tomcat 進行實時監控了
 

5. jconsole 提供的一些有用資訊

接著第 4 步的案例往下看。

5.1. JVM 設定資訊是否起作用檢查

點選 “VM 概要” 可以檢視到剛才我們設定的 JAVA_OPTS 的一些引數已經奏效了:
JAVA_OPTS 的一些引數已經奏效
 

5.2. tomcat 執行緒池、自定義執行緒池數量情況實時監控

還在為 tomcat 執行緒池的神祕面紗而頭疼?還在為自己定義的執行緒池 “黑盒” 一般而苦惱?看看下圖:
tomcat執行緒情況

我們的 tomcat 剛啟動,從上圖可以看出只有一個 http-8080-Acceptor-0 執行緒,我們去訪問一下我們的專案,然後再回來看看:
http-8080 執行緒一下子增長到了 8 個

http-8080 執行緒一下子增長到了 8 個。是不是一切一目瞭然,盡在掌握之中?

5.3. 記憶體使用實際消耗

點選 Java 監視和管理控制檯 “記憶體” 葉項,可以看到 tomcat 堆記憶體的使用情況:
tomcat 堆記憶體的使用情況

圖表裡有很多選項:
圖表裡有很多選項

我們看一下 Eden 區:
Eden區

Eden 區基本和整個堆記憶體的走勢差不多。再看 Survivor 區:
Survivor區

Survivor 區在較短時間內的走勢相對平穩。再看 Old Gen 區:
再看 Old Gen 區

這個走勢更加平穩,而且對比 Survivor 區、Old Gen 區兩張圖,可以很明顯地看出,在大約 19:58 那個時刻有將一批物件從 Survivor 區移到 Old Gen 區。最後看 Perm Gen 區。
這個走勢最平穩了。可以明顯看出,在大約 19:58,在我們訪問一下我們的專案的時候,一些新的 class 等靜態資源載入到了 JVM 中。5.4 的載入類數的圖也證實了這一點。

5.4. tomcat 載入類的情況

tomcat 載入類的情況
 

6. 配合 jmap 的使用

先找到我們 tomcat 程序的 PID 是 13863

先找到我們 tomcat 程序的 PID 是 13863,然後執行 jmap -heap 13863:
jmap -heap 13863
 

Heap Configuration 裡列的基本就是我們剛才配的那些,比如 MaxHeapSize 是 2048 MB,MaxPermSize 是 128 MB。這個和 5.1 裡的是一樣的。

參考資料

相關推薦

java視覺效能監控工具jconsole

1. 前言 想驗證你對 jvm 配的一些調優引數(比如 Xms、Xmx 等)有沒有起作用嗎? 想不想實時監控你自定義的執行緒池的在實際執行時的執行緒個數、有沒有死鎖? 應用出現 java.lang.OutOfMemoryError: Java heap space,你知

Java的GUI效能監控工具Jconsole以及JisualVM簡介

1 Jconsole 1.1 簡介以及連線   JConsole是一個基於JMX的GUI工具,用於連線正在執行的JVM,它是Java自帶的簡單效能監控工具。下面以對tomcat的監控為例,帶領大家熟悉Jconsole這個工具。   Step 1,在dos/bash命

JDK的運行監控工具JConsole觀察分析Java程序的運行

alt nbsp 類裝載 什麽 spl for 監控工具 計算機 reat 原文地址:https://blog.csdn.net/libaolin198706231987/article/details/55057149 一、JConsole是什麽 從Java

JDK的虛擬機器監控視覺工具JConsole

  JDK中除了提供大量的命令列工具外,還有兩個功能強大的視覺化工具:JConsole和VisualVM,這篇文章主要來介紹一下JConsole,JConsole是在JDK1.5時期就已經提供的虛擬機器監控工具,是一款基於JMX的視覺化監視和管理的工具,它管理部分的功能是針對JMX MBe

Java效能監測工具用法簡介

https://blog.csdn.net/xad707348125/article/details/51985854 https://www.cnblogs.com/yjd_hycf_space/p/7755633.html http://www.cnblogs.com/alipayhut

利用java工具jconsole監控虛擬機器

  首先編輯tomcat/bin/catalina.sh 加入以下配置 (在 cygwin=false 上面加入) CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote  -Djava.rmi.server.

效能工具之JMeter+InfluxDB+Grafana打造壓測視覺實時監控

概述 本文我們將介紹如何使用JMeter+InfluxDB+Grafana打造壓測視覺化實時監控。 引言 我們很多時候在使用JMeter做效能測試,我們很難及時察看壓測過程中應用的效能狀況,總是需要等到測試完成後去看Report,如果是長時間壓測,比如壓測1~

Java效能監測工具用法簡介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm

一、jstatd啟動jvm監控服務。它是一個基於rmi的應用,向遠端機器提供本機jvm應用程式的資訊。預設埠1099。 例項:jstatd -J-Djava.security.policy=my.policymy.policy檔案需要自己建立,內如如下:  Java程式碼   grant codeb

深入理解Java虛擬機器總結一虛擬機器效能監控工具效能調優(三)

深入理解Java虛擬機器總結一虛擬機器效能監控工具與效能調優(三) JDK的命令列工具 JDK的視覺化工具 效能調優 JDK的命令列工具 主要有以下幾種: jps (Java Process Status Tool): 虛擬機器程序

如何搭建視覺應用監控伺服器效能(ubuntu下安裝influxdb+telegraf+grafana)

看完本文,你就可以部署一個監控伺服器的視覺化應用,並且可以自己匯入資料來源進行展示。 參考:https://blog.csdn.net/TTchengcheng/article/details/79742574 參考:https://docs.influxdata.com/

定義視覺除錯工具(Microsoft.VisualStudio.DebuggerVisualizers)

前言: 最近飛機失聯的太多,明天要飛北京處理伺服器雙機熱備的問題,航空保險已買,單號是:TF10122913。 至於我的銀行卡密碼,在我枕頭下面的字條裡,要是我之後沒再更新文章,請通知我家人,哈哈哈哈。好了,Joke 被 Play 後,下面 Enter 正文。 背景:話說:使用CYQ.Data時,會經常斷點M

JProfiler一個專業的Java效能監控工具

JProfiler是一個全功能的Java剖析工具(profiler),專用於分析J2SE和J2EE應用程式。它把CPU、執行緒和記憶體的剖析組合在一個強大的應用中。JProfiler可提供許多IDE整合和應用伺服器整合功能。JProfiler直覺式的GUI讓你可以找到效能瓶頸、抓住記憶體洩漏(memory 

Java常用工具

1.jps–列出java程序,類似於ps命令–引數-q可以指定jps只輸出程序ID ,不輸出類的短名稱–引數-m可以用於輸出傳遞給Java程序(主函式)的引數–引數-l可以用於輸出主函式的完整路徑–引數-v可以顯示傳遞給JVM的引數2.jinfo檢視JVM引數修改簡單的引數3

Java應用程式效能監控工具

簡介 當一個軟體系統完成基本功能上線執行後,如前期設計不佳,後面很容易出現記憶體和效能問題。解決這些問題有多種途徑,其中最為常用的方式:藉助監控工具,直接找到問題點(或某個範圍),然後仔細研究程式碼,找出根因並整改。本文僅對效能類問題做深入探討 當程式出現效能問題後,

java效能監控工具MoSKito學習--MoSKito-Essential模組4

》Thresholds 閾值 What is a threshold? 什麼是閾值 一個閾值標記了一個生產者的效能邊界。當生產者超過了這些邊界(或上或下),閾值狀態會被改變。這樣你就知道這個生產者需要注意了。 Threshold Concepts to Remember 需

java效能監控工具MoSKito學習--概念解釋

2 MoSKito 的概念 >Producers, Stats and Values 生產者,統計和值  >>Producers 生產者  >>Stats 統計  >>StatValues 統計值  >>Values 值

JProfiler 8(一個很好的java效能監控工具) ubuntu

一、 下載註冊  JProfiler 8 註冊碼:你找找看在哪裡呢? 按預設選擇“Single or evaluation license” Name 和 Company 隨意 -----------------------憂鬱的分割線---------------

論持久戰之Java效能監控工具(jmap)

首先看一下Java官方提供的引數示例: 下面介紹三個常用引數(heap、dump、histo) -heap(to print java heap summary) ①堆配置資訊 ②堆使用資訊 -dump:(to dump jav

Netty之傳輸POJO(使用Java的序列方式)

1、使用Netty傳輸POJO物件,重點在於物件的序列化。序列化的物件通過TCP進行網路傳輸,結合Netty提供的物件編解碼器,可以做到遠端傳輸物件。首先Java需要序列化的物件,需要實現java.io.Serializable介面. 2、工程目錄        2.1 專

Java Web 伺服器效能監控工具 JavaMelody

1、maven 依賴 <dependency> <groupId>net.bull.javamelody</groupId> <artifactId>javamelody-core</art