1. 程式人生 > >Java自帶的效能監測工具用法簡介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm

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

一、jstatd
啟動jvm監控服務。它是一個基於rmi的應用,向遠端機器提供本機jvm應用程式的資訊。預設埠1099。 
例項:jstatd -J-Djava.security.policy=my.policy

my.policy檔案需要自己建立,內如如下: 
Java程式碼  收藏程式碼
  1. grant codebase "file:${java.home}/../lib/tools.jar" {  
  2.  permission java.security.AllPermission;  
  3. };  

這是安全策略檔案,因為jdk對jvm做了jaas的安全檢測,所以我們必須設定一些策略,使得jstatd被允許作網路操作 


二、jps
列出所有的jvm例項 
例項: 
jps 
列出本機所有的jvm例項 

jps 192.168.0.77
列出遠端伺服器192.168.0.77機器所有的jvm例項,採用rmi協議,預設連線埠為1099 
(前提是遠端伺服器提供jstatd服務) 

輸出內容如下: 
[email protected]:~/data/ebook/java/j2se/jdk_gc$ jps 
6286 Jps 
6174  Jstat 

詳細請看連線:http://www.blogjava.net/aoxj/archive/2007/12/29/171447.html

三、jconsole

用法: jconsole [ -interval=n ] [ -notile ] [ -pluginpath  ] [ -version ] [ connection ...] 

  -interval   將更新間隔時間設定為 n 秒(預設值為 4 秒) 
  -notile     最初不平鋪顯示視窗(對於兩個或更多連線) 
  -pluginpath 指定 jconsole 用於查詢外掛的路徑 
  -version    輸出程式版本 

  connection = pid || host:port || JMX URL (service:jmx:://...) 

  pid       目標程序的程序 ID 
  host      遠端主機名或 IP 地址 
  port      用於遠端連線的埠號 

  -J          對正在執行 jconsole 的 Java 虛擬機器指定輸入引數


在cmd中輸入命令:jconsole 3980[java程序號] 彈出下圖


四、jinfo
用法: 
jinfo [ option ] pid 
jinfo [ option ] executable core 
jinfo [ option ] [[email protected]]remote-hostname-or-IP 

引數: 

pid   程序號 
executable   產生core dump的java executable 
core   core file 
remote-hostname-or-IP  主機名或ip 
server-id    遠端主機上的debug server的唯一id 

選項: 
no option  列印命令列引數和系統屬性 
-flags  列印命令列引數 
-sysprops  列印系統屬性 
-h  幫助


觀察執行中的java程式的執行環境引數:引數包括Java System屬性和JVM命令列引數 
例項: 
jinfo 2083
其中2083就是java程序id號,可以用jps得到這個id號。我在windows上嘗試輸入這個命令,但是不管用,於是我輸入了下面這個命令: 
jinfo -flag MaxPermSize 3980
顯示如下: 
-XX:MaxPermSize=67108864 

五、jstack
該命令應該如何使用呢?首先需要用jstack命令產生java程序的dump檔案,然後分析dump檔案中的資料,下面的連線是一篇講述如何分析jstack產生的dump檔案資料的文章,寫的非常不錯: 
http://www.blogjava.net/jzone/articles/303979.html

六、jmap(linux下特有,也是很常用的一個命令)
觀察執行中的jvm實體記憶體的佔用情況。 
引數如下: 
-heap:列印jvm heap的情況 
-histo:列印jvm heap的直方圖。其輸出資訊包括類名,物件數量,物件佔用大小。 
-histo:live :同上,但是隻答應存活物件的情況 
-permstat:列印permanent generation heap情況


命令使用:
jmap -heap 2083
可以觀察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的記憶體使用情況 

jmap -histo 2083 | jmap -histo:live 2083
可以觀察heap中所有物件的情況(heap中所有生存的物件的情況)。包括物件數量和所佔空間大小。 

jmap -histo java程序id
可以檢視java程序中的所有例項、例項的個數,可用於查詢單例物件是否真的只生成了一個例項。 

在控制檯,輸入命令“jmap -histo 7329 > histo_dump”,得到如下結果: 
Java程式碼  收藏程式碼
  1. num     #instances         #bytes  class name  
  2. ---------------------------------------------  
  3.   1:        605348       68849960  [C  
  4.   2:       1609734       51511488  java.util.concurrent.ConcurrentHashMap$Segment  
  5.   3:       1610022       38640528  java.util.concurrent.locks.ReentrantLock$NonfairSync  
  6.   4:         70784       31478168  [I  
  7.   5:        218224       27628072  <constMethodKlass>  
  8.   6:       1609734       26423552  [Ljava.util.concurrent.ConcurrentHashMap$HashEntry;  
  9.   7:         40379       24430792  [B  
  10.   8:        218224       19211544  <methodKlass>  
  11.   9:        602848       14468352  java.lang.String  
  12.  10:         19374       11640184  <constantPoolKlass>  
  13.  11:        236950       11451216  <symbolKlass>  
  14.  12:        283746       11349840  java.util.concurrent.ConcurrentHashMap$ValueIterator  
  15.  13:         19374        8826272  <instanceKlassKlass>  
  16.  14:        100613        8048728  [Ljava.util.concurrent.ConcurrentHashMap$Segment;  
  17.  15:         85036        7332664  [Ljava.lang.Object;  
  18.  16:         15559        6614824  <constantPoolCacheKlass>  
  19.  17:         78919        6313520  java.lang.reflect.Method  
  20.  18:        103377        4962096  com.sun.tools.javac.zip.ZipFileIndexEntry  
  21.  19:         51998        4324096  [Ljava.util.HashMap$Entry;  
  22.  20:        100613        4024520  java.util.concurrent.ConcurrentHashMap  
  23.  21:        157136        3771264  java.util.concurrent.ConcurrentHashMap$HashEntry  
  24.  22:         35932        3736928  com.asiainfo.dbm.core.bean.monitor.FlowService  
  25.  23:         35932        3736928  com.asiainfo.dbm.core.bean.monitor.FlowService  


七、jstat
最後要重點介紹下這個命令,這是jdk命令中比較重要,也是相當實用的一個命令,可以觀察到classloader,compiler,gc相關資訊。 
具體引數如下: 
-class:統計class loader行為資訊 
-compile:統計編譯行為資訊 
-gc:統計jdk gc時heap資訊 
-gccapacity:統計不同的generations(不知道怎麼翻譯好,包括新生區,老年區,permanent區)相應的heap容量情況 
-gccause:統計gc的情況,(同-gcutil)和引起gc的事件 
-gcnew:統計gc時,新生代的情況 
-gcnewcapacity:統計gc時,新生代heap容量 
-gcold:統計gc時,老年區的情況 
-gcoldcapacity:統計gc時,老年區heap容量 
-gcpermcapacity:統計gc時,permanent區heap容量 
-gcutil:統計gc時,heap情況 
-printcompilation:不知道幹什麼的,一直沒用過。


一般比較常用的幾個引數是:
Java程式碼  收藏程式碼
  1. jstat -class 27629 3000 10 //每隔1秒監控一次,一共做10次  

輸出內容含義如下:
Loaded Bytes Unloaded Bytes Time
49955 49701.5    35528 32456.1      34.71
49955 49701.5    35528 32456.1      34.71
49955 49701.5    35528 32456.1      34.71
49955 49701.5    35528 32456.1      34.71
49963 49708.8    35528 32456.1      34.71
49963 49708.8    35528 32456.1      34.71
49963 49708.8    35528 32456.1      34.71
49971 49716.1    35528 32456.1      34.71
49971 49716.1    35528 32456.1      34.71
49971 49716.1    35528 32456.1      34.71


jstat -gc 2083 2000 20(每隔2秒監控一次,共做10) 
輸出內容含義如下:
S0C Current survivor(存活的) space 0 capacity (KB).
EC Current eden space capacity (KB).
EU Eden space utilization (KB).
OC Current old space capacity (KB).
OU Old space utilization (KB).
PC Current permanent space capacity (KB).
PU Permanent space utilization (KB).
YGC Number of young generation GC Events.
YGCT Young generation garbage collection time.
FGC Number of full GC events.
FGCT Full garbage collection time.
GCT Total garbage collection time.


監控記憶體使用情況 引數 (檢視記憶體溢位相對有用) 
jstat -gccause 2083 5000 (每隔5秒監控一次) 
輸出內容含義如下:
S0 Survivor space 0 utilization as a percentage of the space's current capacity.
S1 Survivor space 1 utilization as a percentage of the space's current capacity.
E Eden space utilization as a percentage of the space's current capacity.
O Old space utilization as a percentage of the space's current capacity.
P Permanent space utilization as a percentage of the space's current capacity.
YGC Number of young generation GC events.
YGCT Young generation garbage collection time.
FGC Number of full GC events.
FGCT Full garbage collection time.
GCT Total garbage collection time.
LGCC Cause of last Garbage Collection.
GCC Cause of current Garbage Collection.


八、jvisualvm
java visualvm 是visualvm的一個針對java vm的釋出版本。 關於visualvm的更多資訊可以訪問 visualvm.java.net.jvisualvm 工具從jdk 6 update7 (apple的java 是從 mac os x 10.5 update 4)之後,預設就已經存在jdk工具裡。 
java visualvm是一個穩定的工具,用每一個jdk釋出版本測試過。 最新的jdk請到oracle(sun)公司的網上進行下載。

jvisualvm 的功能及ui比jconsole還要強大。我們先來看下jvisualvm的用法。 他是一個gui(圖形介面)的工具,所以上手應該會很快。 

官網上關於jvisualvm的用法介紹 http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html 

簡單來說,我們不需要傳遞任何引數就可以啟動jvisualvm。 

我們可以把jvisualvm也放到jdk的path裡, 然後加到環境的path裡。 這時候我們在windows的執行或者cmd裡執行 
jvisualvm就可以啟動該工具了。 或者我們直接雙擊點選該軟體 
在cmd中輸入命令:jvisualvm 彈出下圖


具體用法可以參考下面這個連結:http://www.iteye.com/topic/516447

下面我們來講解如何利用visualvm對遠端的主機進行監控
首先,我們可以在使用者目錄下的任何地方(比如說:使用者根目錄,或者是jdk根目錄)新建一個名稱為jstatd.all.policy的檔案,檔案內容如下: 
Java程式碼  收藏程式碼
  1. grant codebase "file:${java.home}/../lib/tools.jar" {     
  2.   permission java.security.AllPermission;     
  3. };  


新建完檔案後,我們給這個檔案賦予執行許可權,命令如下: 
Java程式碼  收藏程式碼
  1. chmod 755 jstatd.all.policy  


然後,我們在我們執行如下命令,啟動jstatd服務(jstatd服務的預設埠為1099): 
Java程式碼  收藏程式碼
  1. jstatd -J-Djava.security.policy=/sw/bes/jstatd.all.policy  

記住jstatd.all.policy檔案必須為絕對路徑,防止出現java.security.AccessControlException: access denied (java.util.PropertyPermission java.rmi.server.ignoreSubClasses write)錯誤。 

最後,我們可以用jps命令檢視是否啟動成功: 
Java程式碼  收藏程式碼
  1. jps -l  

得到如下結果: 
  • 9481 com.bes.enterprise.ee.nodeagent.NodeAgentMain
  • 7329 com.bes.enterprise.server.Entry
  • 18968 com.bes.enterprise.server.Entry
  • 15802 sun.tools.jstatd.Jstatd
  • 16075 sun.tools.jps.Jps
  • 9328 com.bes.enterprise.server.Entry

相關推薦

Java效能監測工具用法簡介——jstackjconsolejinfojmapjdbjstajvisualvm

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

Java效能監測工具用法簡介

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

Perfmon - Windows 系統監測工具(轉)

跟蹤 存取 內存使用情況 ota 點擊 for 等等 order 服務 本文轉自:http://blog.csdn.net/oscar999/article/details/7918385 一、 簡述 可以用於監視CPU使用率、內存使用率、硬盤讀寫速度、網絡速度等。 Per

Perfmon - Windows 系統監測工具

distrib 圖形 bytes 文本文 space 所有 mit lan network 一、 簡述 可以用於監視CPU使用率、內存使用率、硬盤讀寫速度、網絡速度等。 Perfmon提供了圖表化的系統性能實時監視器、性能日誌和警報管理,系統的性能日誌可定義為二進制文件、文

JVM效能分析工具介紹——jstack

轉載: https://blog.csdn.net/Roy_70/article/details/78021551 前言 JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat、h

Java虛擬機器效能監測工具Visual VM與OQL

1.Visual VM多合一工具 Visual VM是一個功能強大的多合一故障診斷和效能監控的視覺化工具,它集成了多種效能統計工具的功能,使用 Visual VM 可以代替jstat、jmap、jhat、jstack甚至是JConsole。在JDK 6 Update 7以後,Visual Vm便作為JDK的一

JVM效能分析工具介紹——jstat

前言 JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一種工具都有其自身的特點,使用者可以根據你需要檢測的應用或者程式片段的

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

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

java視覺化效能監控工具jconsole

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

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

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

Widows系統監控工具——24小時監控伺服器效能

操作步驟 1、執行程式perfmon.exe 2、選擇【使用者自定義】-【新建】-【資料收集器集】 3、自定義名稱“test”,選擇【手動建立】,然後【下一步】 4、選擇“效能計數器”,【下一步】 5、使用者可以根據具體情況,選擇多長時間記錄一次,然後點選

Java常用工具

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

JVM效能調優監控工具專題一:JVM效能調優工具

前提概要:  JDK本身提供了很多方便的JVM效能調優監控工具,除了整合式的VisualVM和jConsole外,還有jps、jstack、jmap、jhat、jstat、hprof等小巧的工具,每一種工具都有其自身的特點,使用者可以根據你需要檢測的應用或者程式片段的狀況,適

使用java 的webservice

sim 同名 文件 return 自己 cor 自定義 rgs poi 1:具有功能的類的寫法---發布服務 @WebService public class CarFactory { public String car(String num){

javajavajava.util.logging.Logger日誌功能

lena mat logs pre 默認 closed custom err ole 偶然翻閱到一篇文章,註意到Java自帶的Logger日誌功能,特地來細細的看一看,記錄一下。 1.Java自帶的日誌功能,默認的配置   ①Logger的默認配置,位置在JRE安裝目錄下l

java消費

mes sage exception 信息 args class ise bsp isempty package com.csf.myproject.core; import java.util.concurrent.BlockingQueue; import java

Java 的加密類MessageDigest類(加密MD5和SHA)

turn md4 格式化 字節轉換 查看 new word 用戶名 trac Java 自帶的數據加密類MessageDigest(MD5或SHA加密)說明:在網站中,為了保護網站會員的用戶名和密碼等隱私信息,所以我們在用戶註冊時就直接進行MD5方式或其他方式進行加密,

C# 利用VS的WSDL工具生成WebService服務類

web 路徑 引用 src cnblogs logs png program 菜單 WebService有兩種使用方式,一種是直接通過添加服務引用,另一種則是通過WSDL生成。 添加服務引用大家基本都用過,這裏就不講解了。 那麽,既然有直接引用的方式,為什麽還要通過WSDL

基於java連結串列結構實現迴圈連結串列

背景 有些場景下,需要迴圈連結串列,如某些狀態是從一個到下一個,最後再回到開始。此種情況下,可以採用迴圈連結串列來實現。 程式碼 package com.cxyzy.tencentfacerec; import java.util.Iterator; import java.u

火狐瀏覽器介面測試工具HttpRequester使用方法

前言: HttpRequester介面測試工具作為一個十分好用的後臺介面測試工具,它讓程式設計師擺脫了依靠前端介面獲取引數的瓶頸。提高了後臺開發的工作效率,對於改錯和優化具有不可忽視的作用。 一、json資料提交測試方法 操作步驟: 1.在URL裡面填寫介面路徑。 2.點選Conten