一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - JDK常用命令jps jinfo jstat的具體說明與示例

JDK常用命令jps jinfo jstat的具體說明與示例

2022-01-17 11:30沒頭腦遇到不高興 Java教程

JDK本身提供了很多方便的JVM性能調優監控工具,除了集成式的VisualVM和jConsole外,還有jps、jinfo、jstat等小巧的工具,本文章希望能起拋磚引玉之用,讓大家能開始對JVM性能調優的常用工具有所了解

概述

JDK的bin目錄下提供了很多命令工具,比如java.exe,javap.exe,javac.exe。。。。。。這些命令由jdk/lib/tools.jar類庫中提供的,是對tools.jar中的類的封裝。我們主要介紹一下JVM中處理運行日志、異常堆棧、GC日志、線程快照(threaddump / javacore文件)、堆轉儲快照(heapdump/hprof文件)等信息的相關常用命令(jhat就不再介紹了,用的比較少,目前都是用jmap+MAT分別進行生產heapdump文件的生成及分析),這些常用命令在JDK8中的官方文檔地址為https://docs.oracle.com/javase/8/docs/technotes/tools/unix/index.html,打開官方文檔地址可以看到如下所示,我們所介紹的命令里面都有說明,可以對應著看一下。

JDK常用命令jps jinfo jstat的具體說明與示例

常用命令介紹: 本節先介紹前三個,下面的后面進行介紹。

名稱 主要功能
jps JVM Process Status Tool,顯示指定系統內所有HotSpot虛擬機進程
jstat JVM Statistics Minitoring Tool,用于收集HotSpot虛擬機各方面的運行數據
jinfo Configuration Info for Java,顯示虛擬機配置信息
jmap Memory Map for Java,生成虛擬機的內存轉儲快照(heapdump)文件
jhat JVM Heap Dump Browser,用于分析heapdump文件,它會建立一個HTTP/HTML服務器,讓用戶可以在瀏覽器上查看分析結果
jstack Stack Trace for Java,顯示虛擬機的線程快照

注意:我演示使用的是JDK1.8 

jps:虛擬機進程狀況工具

jps(JVM Process Status Tool):可以列出正在運行的虛擬機進程,并顯示虛擬機執行主類(Main Class,main()函數所在的類)的名稱,以及這些進程的本地虛擬機的唯一ID(LVMID,Local Virtual Machine Identifier)。對于本地虛擬機進程來說,LVMID與操作系統的進程ID(PID,Process Identifier)是一致的,在Linux上使用ps命令也可以查看進程ID(例如 ps -ef | grep java 查看Java進程)。官方文檔地址:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jps.html

通過 jps -help 命令可以查看jps命令的使用說明

C:UsersAdministrator>jps -help
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]
 
Definitions:
    <hostid>:      <hostname>[:<port>]

可以看到jps命令格式:jps [option] [hostid]

jps除了查詢本地Java進程,還可以通過RMI協議查詢開啟了RMI服務的遠程虛擬機進程狀態,hostid為RMI注冊表中注冊的主機名。jps的常用選項如下:

選項 作用
-q 只輸出LVMID,省略主類的名稱
-m 輸出虛擬機進程啟動時傳遞給主類的main()函數的參數
-l 輸出主類的全名,如果進程執行的是jar包,輸出jar路徑
-v 輸出虛擬機進程啟動時JVM參數

使用示例:

C:UsersAdministrator>jps -l
13120 sun.tools.jps.Jps
11332
14284 com.wkp.demo.ServiceapiApplication
6908
6924

 jinfo:Java配置信息工具

jinfo(Configuration Info for Java)的作用是實時地查看和調整虛擬機的各項參數。官方文檔地址為:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jinfo.html

通過 jinfo -help 命令可以查看jinfo命令的使用信息:其使用格式為 jinfo [option] pid

C:UsersAdministrator>jinfo -help
Usage:
    jinfo [option] <pid>
        (to connect to running process)
    jinfo [option] <executable <core>
        (to connect to a core file)
    jinfo [option] [server_id@]<remote server IP or hostname>
        (to connect to remote debug server)
 
where <option> is one of:
    -flag <name>         to print the value of the named VM flag
    -flag [+|-]<name>    to enable or disable the named VM flag
    -flag <name>=<value> to set the named VM flag to the given value
    -flags               to print VM flags
    -sysprops            to print Java system properties
    <no option>          to print both of the above
    -h | -help           to print this help message

jinfo命令選項介紹:

選項 作用
-flag 查看JVM參數選項值(如果沒有設置過會打印默認值,使用java -XX:+PrintFlagsFinal也可以查看參數默認值)
-flag [+|-]<name> 程序運行時啟用/禁用JVM的Boolean類型參數選項
-flag <name>=<value 程序運行時設置JVM的非Boolean類型參數選項值
-flags 打印設置的JVM參數選項
-sysprops 把虛擬機進程的System.getProperties()的內容打印出來
 <no option>  不寫option的話會打印上面的所有信息

使用示例:

C:UsersAdministrator>jinfo -flag MaxHeapSize 14284
-XX:MaxHeapSize=67108864
C:UsersAdministrator>jinfo -flags 14284
Attaching to process ID 14284, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.112-b15
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=8388608 -XX:+ManagementServer -XX:MaxHeapSize=67108864 -XX:MaxNewSize=22347776 -XX:MaxTenuringThreshold=6 -XX:MinHeapDeltaBytes=196608 -
XX:NewSize=2752512 -XX:OldPLABSize=16 -XX:OldSize=5636096 -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:+PrintGC -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX
:+PrintHeapAtGC -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseConcMarkSweepGC -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocation -XX:+UseParNewGC
Command line:  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=63038 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dspring.liveBeansVie
w.mbeanDomain -Dspring.application.admin.enabled=true -Xms8m -Xmx64m -verbose:gc -Xloggc:D:workspaceshgwd-Wplogshgwd-usercentergc.log -XX:+PrintHeapAtGC -XX:+PrintGCApplicationStoppedTime -XX:+Pr
intGCTimeStamps -XX:+PrintCommandLineFlags -XX:+PrintFlagsFinal -XX:+PrintGCDetails -XX:+UseConcMarkSweepGC -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -
Dcom.sun.management.jmxremote.port=9004 -Djava.rmi.server.hostname=127.0.0.1 -Dfile.encoding=UTF-8

 jstat:虛擬機統計信息監控工具

jstat(JVM Statistics Monitoring Tool)是用于監控虛擬機各種運行狀態信息的命令行工具。它可以顯示本地或遠程虛擬機(需要遠程主機提供RMI支持)進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI圖像界面,只提高了純文本控制臺環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具。官方文檔地址為:https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

使用jstat -help可以查看使用幫助

C:UsersAdministrator>jstat -help
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
 
Definitions:
  <option>      An option reported by the -options option
  <vmid>        Virtual Machine Identifier. A vmid takes the following form:
                     <lvmid>[@<hostname>[:<port>]]
                Where <lvmid> is the local vm identifier for the target
                Java virtual machine, typically a process id; <hostname> is
                the name of the host running the target Java virtual machine;
                and <port> is the port number for the rmiregistry on the
                target host. See the jvmstat documentation for a more complete
                description of the Virtual Machine Identifier.
  <lines>       Number of samples between header lines.
  <interval>    Sampling interval. The following forms are allowed:
                    <n>["ms"|"s"]
                Where <n> is an integer and the suffix specifies the units as
                milliseconds("ms") or seconds("s"). The default units are "ms".
  <count>       Number of samples to take before terminating.
  -J<flag>      Pass <flag> directly to the runtime system.

使用jstat -options可以查看jstat支持的option 

C:UsersAdministrator>jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation

 選項option代表這用戶希望查詢的虛擬機信息,主要分為3類:類裝載、垃圾收集和運行期編譯狀況,具體選項及租用參見下表:

選項 作用
-class 監視類裝載、卸載數量、總空間及類裝載所耗費的時間
-gc 監視Java堆狀況,包括Eden區、2個Survivor區、老年代、永久代等的容量
-gccapacity 監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大和最小空間
-gcutil 監視內容與-gc基本相同,但輸出主要關注已使用空間占總空間的百分比
-gccause 與-gcutil功能一樣,但是會額外輸出導致上一次GC產生的原因
-gcnew 監視新生代GC的狀況
-gcnewcapacity 監視內容與-gcnew基本相同,輸出主要關注使用到的最大和最小空間
-gcold 監視老年代GC的狀況
-gcoldcapacity 監視內容與――gcold基本相同,輸出主要關注使用到的最大和最小空間
-gcpermcapacity 輸出永久代使用到的最大和最小空間
-compiler 輸出JIT編譯器編譯過的方法、耗時等信息
-printcompilation 輸出已經被JIT編譯的方法

其實每個option的輸出內容,官方文檔中都有介紹,這里就不把每一個命令都演示一遍了,感興趣的話可以自己試一下,對照著官方文檔還是很好理解的。

JDK常用命令jps jinfo jstat的具體說明與示例

 jstat命令格式:jstat [option vmid [interval[s|ms] [count]] ]

對于命令格式中的VMID與LVMID需要特別說明下:如果是本地虛擬機進程,VMID和LVMID是一致的,如果是遠程虛擬機進程,那VMID的格式應當是:[protocol:][//] lvmid [@hostname[:port]/servername]

參數interval和count代表查詢間隔和次數,如果省略這兩個參數,說明只查詢一次。假設需要每1000毫秒查詢一次進程14284垃圾收集狀況,一共查詢5次,那命令行如下:jstat -gc 14284 1000 5

C:UsersAdministrator>jstat -gc 14284 1000 5
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU      CCSC   CCSU     YGC    YGCT  FGC      FGCT     GCT
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051
2176.0 2176.0  0.0   2176.0 17472.0   673.2    43712.0    34800.8   69760.0 66724.9 9088.0 8479.0    620    1.201  57      1.850    3.051

 通過上面的option表得知-gc用于監視Java堆狀況,包括Eden區、2個Survivor區、老年代、永久代等的容量,我們對上面的打印做下簡單介紹:

  • S0C和S1C表示S0和S1的可用空間都是2176.0KB(注意這里的單位是KB);
  • S0U的值表示S0區域是空的沒有被占用;S1U的值是2176.0KB,說明S1被占滿了;
  • EC表示Eden區域的容量是17472.0KB,EU表示Eden區使用了673.2KB;
  • OC和OU分別表示堆內存中的Old區的容量及使用大小;
  • MC和MU分別表示方法區(JDK1.8元空間)的容量及使用大小;
  • CCSC和CCSU分別表示壓縮類空間的容量及使用大小;
  • YGC:年輕代垃圾回收次數
  • YGCT:年輕代垃圾回收消耗時間
  • FGC:老年代垃圾回收(FullGC)次數
  • FGCT:老年代垃圾回收(FullGC)消耗時間
  • GCT:垃圾回收消耗總時間(等于YGCT+FGCT)

下面再演示下:jstat -gcutil 14284 1000 5

C:UsersAdministrator>jstat -gcutil 14284 1000 5
  S0     S1      E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
  0.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.051
  0.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.051
  0.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.051
  0.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.051
  0.00 100.00   7.31  79.61  95.65  93.30    620    1.201    57    1.850    3.051

 關于GC時間的上面已經介紹了,可以結合上面的jstat -gc看一下:

  • S0:S0區當前使用比例為0.00%,也就是空的
  • S1:S1區當前使用比例100.00%,已經滿了
  • E:Eden區使用比例7.31%
  • O:老年代使用比例79.61%
  • M:元空間使用比例95.65%
  • CCS:壓縮類空間使用比例93.30%

本節就先介紹到這里,下節會介紹jmap+MAT實戰堆內存溢出分析

到此這篇關于JDK常用命令jps jinfo jstat的具體說明與示例的文章就介紹到這了,更多相關JDK 常用命令 內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/u012988901/article/details/100839202

延伸 · 閱讀

精彩推薦
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關于小米推送Java代碼,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧...

    富貴穩中求8032021-07-12
  • Java教程升級IDEA后Lombok不能使用的解決方法

    升級IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級,尋思已經有好久沒有升過級了。升級完畢重啟之后,突然發現好多錯誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程xml與Java對象的轉換詳解

    xml與Java對象的轉換詳解

    這篇文章主要介紹了xml與Java對象的轉換詳解的相關資料,需要的朋友可以參考下...

    Java教程網2942020-09-17
  • Java教程Java實現搶紅包功能

    Java實現搶紅包功能

    這篇文章主要為大家詳細介紹了Java實現搶紅包功能,采用多線程模擬多人同時搶紅包,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進去或缺失數據的解決

    Java BufferWriter寫文件寫不進去或缺失數據的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進去或缺失數據的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程20個非常實用的Java程序代碼片段

    20個非常實用的Java程序代碼片段

    這篇文章主要為大家分享了20個非常實用的Java程序片段,對java開發項目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java8中Stream使用的一個注意事項

    Java8中Stream使用的一個注意事項

    最近在工作中發現了對于集合操作轉換的神器,java8新特性 stream,但在使用中遇到了一個非常重要的注意點,所以這篇文章主要給大家介紹了關于Java8中S...

    阿杜7482021-02-04
主站蜘蛛池模板: 久久毛片基地 | 被巨大黑人的翻白眼 | 欧美在线播放成人免费 | 日韩欧美推理片免费在线播放 | ysav67| 国产精品久久久免费视频 | 亚洲高清中文字幕一区二区三区 | 无限在线看免费视频大全 | 青青国产在线视频 | 国产成人影院 | 亚洲精品国产精品国自产观看 | 国产精品香蕉在线观看不卡 | 能播放18xxx18女同 | 99re5精品视频在线观看 | 91香蕉小视频 | 日韩免费观看 | 香蕉视频在线观看网站 | 日本中文字幕一区二区高清在线 | 日本综合在线观看 | 久久视频在线视频观看精品15 | 蜜桃免费| 大陆男男gayxxxxvideo | 国产精品永久免费视频观看 | 欧美男同猛男 videos 同性 | 国产精品久久久久久五月尺 | 四虎国产精品免费入口 | 久热在线这里只有精品7 | 天堂va在线高清一区 | 国产日韩欧美色视频色在线观看 | 久久精品热只有精品 | 国产精品福利短视在线播放频 | 2021国产麻豆剧传媒剧情最新 | 男人综合网 | 日本免费在线观看 | 特黄特色大片免费视频大全 | 手机在线观看国产精选免费 | 亚洲国产在线综合018 | 久久精品麻豆国产天美传媒果冻 | 性德国高清xxxxbbbb | 高清女主播一区二区三区 | 97久久免费视频 |