日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
強大的JVM監(jiān)控工具!

介紹

在生產(chǎn)環(huán)境中,經(jīng)常會遇到各種各樣奇葩的性能問題,所以掌握最基本的JVM命令行監(jiān)控工具還是很有必要的

在通化等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作定制網(wǎng)站設(shè)計,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站制作,營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,通化網(wǎng)站建設(shè)費用合理。

名稱 主要作用
jps 查看正在運行的Java進(jìn)程
jstack 打印線程快照
jmap 導(dǎo)出堆內(nèi)存映像文件
jstat 查看jvm統(tǒng)計信息
jinfo 實時查看和修改jvm配置參數(shù)
jhat 用于分析heapdump文件

jps:查看正在運行的Java進(jìn)程

jps可以列出正在運行的Java進(jìn)程,并顯示虛擬機執(zhí)行主類(Main Class,main()函數(shù)所在的類)名稱以及進(jìn)程id

「如果想看一個命令的后面加 -help參數(shù)即可」

 
 
 
 
  1. [root@VM-0-14-centos ~]# jps -help
  2. usage: jps [-help]
  3.        jps [-q] [-mlvV] []
  4. Definitions:
  5.     :      [:]

「可以看到可以監(jiān)控遠(yuǎn)程服務(wù),但是基于安全考慮,一般不使用」

常見的選項如下

選項 作用
-q 只輸出進(jìn)程id
-m 輸出傳遞給主類main函數(shù)的參數(shù)
-l 輸出主類全類名,如果進(jìn)程執(zhí)行的是Jar包,輸出jar包名字
-v 程序啟動時指定的jvm參數(shù)
 
 
 
 
  1. cis@mt002:~$ jps
  2. 70208 KmpService
  3. 183525 LinkAnalysisServer
  4. 25160 MipSerachServer
 
 
 
 
  1. cis@mt002:~$ jps -l
  2. 70208 com.st.kmp.main.KmpService
  3. 183525 com.st.cis.main.LinkAnalysisServer
  4. 25160 com.st.cis.main.MipSerachServer

jstack:打印線程快照

「查看某個Java進(jìn)程中所有線程的狀態(tài)。一般用來定位線程出現(xiàn)長時間停頓的原因,如發(fā)生死循環(huán),死鎖,請求外部資源長時間等待等!」

 
 
 
 
  1. public class DeadLockDemo {
  2.     private static Object lockA = new Object();
  3.     private static Object lockB = new Object();
  4.     public static void main(String[] args) {
  5.         Thread threadA = new Thread(() -> {
  6.             synchronized (lockA) {
  7.                 try {
  8.                     TimeUnit.SECONDS.sleep(1);
  9.                 } catch (InterruptedException e) {
  10.                     e.printStackTrace();
  11.                 }
  12.                 System.out.println("get lockA");
  13.                 synchronized (lockB) {
  14.                     System.out.println("threadA run finish");
  15.                 }
  16.             }
  17.         });
  18.         Thread threadB = new Thread(() -> {
  19.             synchronized (lockB) {
  20.                 try {
  21.                     TimeUnit.SECONDS.sleep(1);
  22.                 } catch (InterruptedException e) {
  23.                     e.printStackTrace();
  24.                 }
  25.                 System.out.println("get lockB");
  26.                 synchronized (lockA) {
  27.                     System.out.println("threadB run finish");
  28.                 }
  29.             }
  30.         });
  31.         threadA.setName("myThreadA");
  32.         threadB.setName("myThreadB");
  33.         threadA.start();
  34.         threadB.start();
  35.     }
  36. }

「我寫了一個死鎖的例子,啟動后執(zhí)行jps找到進(jìn)程id為19457」

 
 
 
 
  1. peng@pengdeMacBook-Pro ~ % jps
  2. 19457 DeadLockDemo
  3. 19458 Launcher
  4. 2658 
  5. 19459 Jps

接著執(zhí)行如下命令,列出了這個進(jìn)程每個線程的執(zhí)行狀態(tài)

 
 
 
 
  1. jstack 19457

「從圖中可以看到有很多線程,GC線程,myThreadA,myThreadB等,其中myThreadA和myThreadB的線程狀態(tài)為BLOCKED,并且在最后提示出了死鎖發(fā)生的位置」

jmap:導(dǎo)出堆內(nèi)存映像文件

「jmap主要用來用來導(dǎo)出堆內(nèi)存映像文件,看是否發(fā)生內(nèi)存泄露等?!?/p>

生產(chǎn)環(huán)境我們一般會配置如下參數(shù),讓虛擬機在OOM異常出現(xiàn)之后自動生成dump文件

 
 
 
 
  1. -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/Users/peng

執(zhí)行如下命令即可手動獲得dump文件

 
 
 
 
  1. jmap -dump:file=文件名.dump 進(jìn)程id

「分析堆內(nèi)存的工具有很多,如Java VisualVM,jhat等。但個人覺得最好用的就是Eclipse Memory Analyzer,沒有之一」

jstat:查看jvm統(tǒng)計信息

「jstat可以顯示本地或者遠(yuǎn)程虛擬機進(jìn)程中的類裝載、 內(nèi)存、 垃圾收集、 JIT編譯等運行數(shù)據(jù)」

用jstat查看一下類裝載的信息。我個人很少使用這個命令,命令行看垃圾收集信息真不如看圖形界面方便,就不多做介紹了。

 
 
 
 
  1. [root@VM-0-14-centos ~]# jstat -class 19402
  2. Loaded  Bytes  Unloaded  Bytes     Time   
  3.  10229 19679.1       52    76.0       5.33

含義如下

Loaded 解釋
Loaded 加載類的個數(shù)
Bytes 加載類的字節(jié)數(shù)
Unloaded 卸載類的個數(shù)
Bytes 卸載類的字節(jié)數(shù)
Time 花費的時間

jinfo:實時查看和修改jvm配置參數(shù)

jinfo的作用是實時地查看和修改虛擬機各項參數(shù)。

「使用jps命令的-v參數(shù)可以查看虛擬機啟動時顯式指定的參數(shù)列表」,但如果想知道未被顯式指定的參數(shù)的系統(tǒng)默認(rèn)值,除了去找資料外,就只能使用jinfo的-flag選項進(jìn)行查詢了(如果只限于JDK 1.6或以上版本的話,使用java -XX:+PrintFlagsFinal查看參數(shù)默認(rèn)值也是一個很好的選擇)

「jinfo flags pid在高版本才能正常使用,我在jdk1.8這個版本不能正常使用」

應(yīng)用程序設(shè)置如下參數(shù)

 
 
 
 
  1. -Xmx10m -Xms10m

查看最大堆內(nèi)存和是否打印GC日志,可以看到不打印GC日志 接著設(shè)置打印GC日志,再次查看,打印GC日志

 
 
 
 
  1. peng@pengdeMacBook-Pro ~ % jinfo -flag MaxHeapSize 20253         
  2. -XX:MaxHeapSize=10485760
  3. peng@pengdeMacBook-Pro ~ % jinfo -flag PrintGCDetails 20253
  4. -XX:-PrintGCDetails
  5. peng@pengdeMacBook-Pro ~ % jinfo -flag +PrintGCDetails 20253
  6. peng@pengdeMacBook-Pro ~ % jinfo -flag PrintGCDetails 20253 
  7. -XX:+PrintGCDetails

「Xmx是MaxHeapSize的別名」

本文轉(zhuǎn)載自微信公眾號「Java識堂」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Java識堂公眾號。


文章標(biāo)題:強大的JVM監(jiān)控工具!
URL標(biāo)題:http://www.dlmjj.cn/article/cdgepcs.html