JDK的bin下的工具有哪些功能

Java生產(chǎn)環(huán)境下問題排查

Java內(nèi)存泄漏分析系列之一:使用jstack定位線程堆棧信息

Java內(nèi)存泄漏分析系列之二:jstack生成的Thread Dump日志結(jié)構(gòu)解析

Java內(nèi)存泄漏分析系列之三:jstat命令的使用及VM Thread分析

Java內(nèi)存泄漏分析系列之四:jstack生成的Thread Dump日志線程狀態(tài)

Java內(nèi)存泄漏分析系列之五:常見的Thread Dump日志案例分析

Java內(nèi)存泄漏分析系列之六:JVM Heap Dump(堆轉(zhuǎn)儲文件)的生成和MAT的使用

查看JVM參數(shù)

jps -l 查看所有正在運(yùn)行的Java程序,同時顯示啟動類類名,獲取到PID

4706 org.apache.catalina.startup.Bootstrap
5023 sun.tools.jps.Jps

jinfo -flags PID 查看運(yùn)行時進(jìn)程參數(shù)與JVM參數(shù)

Attaching to process ID 28987, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.171-b11
Non-default VM flags: -XX:CICompilerCount=3 -XX:InitialHeapSize=132120576 -XX:MaxHeapSize=2092957696 -XX:MaxNewSize=697303040 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44040192 -XX:OldSize=88080384 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseParallelGC
Command line:  -Dspring.config.location=application.properties -Dspring.profiles.active=staging

java -XX:+PrintFlagsFinal -version 查看當(dāng)前虛擬機(jī)默認(rèn)JVM參數(shù)

查看即時GC狀態(tài)

jstat -gc PID 1000 10 每秒查看一次gc信息,共10次

輸出比較多的參數(shù),每個字段的解釋參看 https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html

S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
512.0  512.0   15.3   0.0    4416.0   1055.2   11372.0     7572.5   14720.0 14322.5 1664.0 1522.8     40    0.137   8      0.039    0.176

期間可能碰到提示sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 24.181-b01. Target VM is 25.171-b11的問題,原因在于安裝了多個版本,使用which、ls -l可簡介定位到與當(dāng)前執(zhí)行Java程序相同的Java版本

內(nèi)存問題

內(nèi)存泄露導(dǎo)致OOM?內(nèi)存占用異常的高?這是生產(chǎn)環(huán)境常常出現(xiàn)的問題,Java提供dump文件供我們對內(nèi)存里發(fā)生過的事情進(jìn)行了記錄,我們需要借助一些工具從中獲取有價值的信息。

導(dǎo)出Dump文件

  1. 提前對Java程序加上這些參數(shù)印dump文件 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./
  2. 對正在運(yùn)行的程序使用jmapjmap -dump:format=b,file=heap.hprof PID

分析Dump文件

如果Dump文件不太大的話,可以傳到 http://heaphero.io/index.jsp 來分析

文件比較大,且想進(jìn)行更加系統(tǒng)的分析,推薦使用MAT分析,有如下幾種常用查看方式

  1. 首頁中的【Leak Suspects】能推測出問題所在
  2. 點(diǎn)擊【Create a histogram from an arbitrary set of objects】查到所有對象的數(shù)量
  3. 右鍵點(diǎn)擊某個對象【Merge Shortest Paths to GC Roots】-> 【exclude all phantom/weak/soft etc. references】能查詢到大量數(shù)量的某個對象是哪個GC ROOT引用的

線程問題

任務(wù)長時間不退出?CPU 負(fù)載過高?很可能因為死循環(huán)或者死鎖,導(dǎo)致某些線程一直執(zhí)行不被中斷,但是不報錯是最煩人的,所以日志里看不到錯誤信息,并且又不能用dump文件分析,因為跟內(nèi)存無關(guān)。這個時候就需要用線程分析工具來幫我們了。

導(dǎo)出jstack文件

使用jstack PID > 文件,如果失敗請加-F參數(shù),如果還失敗請使用Java程序啟動時使用的用戶執(zhí)行jstack

排查步驟

  1. top 查看到哪個java程序負(fù)載高
  2. top -p PID -H 查看該進(jìn)程所有進(jìn)程的運(yùn)行狀態(tài)
  3. 記錄下高負(fù)載的線程ID,printf "&x" PID轉(zhuǎn)換成16進(jìn)制
  4. jstack PID > 文件
  5. 在jstack文件中用轉(zhuǎn)換成16進(jìn)制之后的線程ID查詢線程運(yùn)行堆棧
  6. 從堆棧中了解到線程在執(zhí)行什么任務(wù),并結(jié)合業(yè)務(wù)與代碼判斷問題所在

以下轉(zhuǎn)載自: http://www.codingwhy.com/view/858.html

Java開發(fā)人員肯定都知道JDK的bin目錄中有“java”、“javac”這兩個命令行工具,但并非所有的程序員都了解過JDK的bin目錄之中的其他工具的作用。

這些工具被Sun公司作為“禮物”附贈給JDK的使用者,并在軟件的使用說明中把他們申明為“沒有技術(shù)支持并且是試驗性質(zhì)的(unsupported and experimental)”的產(chǎn)品,但事實上,這些工具都非常的穩(wěn)定且功能強(qiáng)大,能在處理應(yīng)用程序性能問題、定位故障時發(fā)揮很大的作用。

細(xì)心的可能會發(fā)現(xiàn),這些工具都非常小,是因為這些工具大多是jdk/lib/tools.jar類庫的一層包裝而已,他們主要的功能代碼是在tools類庫中實現(xiàn)的。

Java故障檢修,程序概要分析,監(jiān)視和管理工具

工具名稱 用途
jvisualvm 一個圖形化的Java虛擬機(jī) 參考: Java jvisualvm簡要說明
jconsole java監(jiān)視臺和管理控制臺 參考: 如何利用 JConsole觀察分析Java程序的運(yùn)行,進(jìn)行排錯調(diào)優(yōu) https://www.ibm.com/support/knowledgecenter/zh/SSYKE2_8.0.0/com.ibm.java.vm.80.doc/docs/jconsole.html
jps JVM Process Status進(jìn)程狀態(tài)工具。列出目標(biāo)系統(tǒng)的HotSpot JJVM 可以列出本機(jī)所有java進(jìn)程的pid
jstat 按照命令行的具體要求記錄和收集一個JVM的性能數(shù)據(jù)
jstatd JVM jstat 的守護(hù)進(jìn)程
jmc Java任務(wù)控制工具(Java Mission Control),主要用于HotSpot JVM的生產(chǎn)時間監(jiān)測、分析、診斷。

故障檢測和修理工具

工具名稱 用途
jinfo 配置或打印某個Java進(jìn)程VM flag
jhat 堆儲存查看器
jmap Java內(nèi)存圖
jsadebugd Java的 Serviceability Agent Debug的守護(hù)進(jìn)程
jstack Java堆棧跟蹤

JVM性能調(diào)優(yōu)監(jiān)控工具jps、jstack、jmap、jhat、jstat、hprof使用詳解

基本工具

這些工具是JDK的基礎(chǔ),用這些工具來編寫應(yīng)用程序。

工具名稱 用途
javac Java語言編譯器
java Java應(yīng)用程序啟動器
javaw Java運(yùn)行工具,用于運(yùn)行.class字節(jié)碼文件或.jar文件,但不會顯示控制臺輸出信息,適用于運(yùn)行圖形化程序。
javadoc Java API文檔生成器
apt java 注解處理器 「深入Java」Annotation注解
appletviewer java applet小程序查看器
jar java文件壓縮打包工具
jdb Java調(diào)試器
javah C頭文件和stub生成器,用于寫本地化方法,例如生產(chǎn)JNI樣式的頭文件
javap class文件反編譯工具
extcheck 用于檢測jar包中的問題
jcmd Java命令行(Java Command),用于向正在運(yùn)行的JVM發(fā)送診斷命令請求。

安全工具

這些工具用于設(shè)置系統(tǒng)的安全規(guī)則和生產(chǎn)可以工作在遠(yuǎn)端的安全規(guī)則下的應(yīng)用程序

工具名稱 用途
keytool 管理密鑰庫和證書
jarsigner 生產(chǎn)和校驗JAR簽名
policytool 有用戶界面的規(guī)則管理工具
kinit 用于獲得和緩存網(wǎng)絡(luò)認(rèn)證協(xié)議Kerberos 票證的授予票證
klist 憑據(jù)高速緩存和密鑰表中的 Kerberos 顯示條目
ktab 密鑰和證書管理工具

Java國際化工具

這些工具可以幫助你創(chuàng)建可本地化的應(yīng)用程序

native2ascii

遠(yuǎn)程方法調(diào)用工具

這些工具可以幫助創(chuàng)建可以和web和網(wǎng)絡(luò)交互的應(yīng)用程序

工具名稱 用途
rmic 生成遠(yuǎn)程對象的stubs and skeletons(存根和框架)
rmid Java遠(yuǎn)程方法調(diào)用(RMI:Remote Method Invocation)活化系統(tǒng)守護(hù)進(jìn)程
rmiregistry Java遠(yuǎn)程對象注冊表
serialver 返回類的 serialVersionUID
java-rmi Java遠(yuǎn)程方法調(diào)用(Java Remote Method Invocation)工具,主要用于在客戶機(jī)上調(diào)用遠(yuǎn)程服務(wù)器上的對象

Java IDL and RMI-IIOP 工具

這些工具用于創(chuàng)建使用OMG-Standard IDL 和 CORBA/IIOP 的應(yīng)用程序

工具名稱 用途
tnameserv Java IDL瞬時命名服
idlj 生產(chǎn)映射到OMG IDL接口可以使Java應(yīng)用程序使用CORBA的.java文件
orbd 為客戶可以在CORBA環(huán)境下透明的定位和調(diào)用服務(wù)器的穩(wěn)定的對象提供支持
servertool 為應(yīng)用程序提供易于使用的接口用于注冊,注銷,啟動,關(guān)閉服務(wù)器

Java部署工具

工具名稱 用途
pack200 使用java gzip壓縮工具將JAR文件轉(zhuǎn)換為壓縮的pack200文件,生產(chǎn)打包文件是高度壓縮的JAR包,可以直接部署,減少下載時間
unpack200 解包pack200文件為JARs

Java web工具

工具名稱 用途
javaws Java web 啟動命令行工具
schemagen Java構(gòu)架的XML Schema生成器
wsgen 生成 JAX-WS
wsimport 生成 JAX-WS
xjc 綁定編譯器

Java腳本工具

工具名稱 用途
jrunscript 運(yùn)行腳本

其他工具

工具名稱 用途
jabswitch Java Access Bridge Switch的簡稱,用于控制Java訪問橋的開/關(guān)。Java訪問橋是一種技術(shù),讓Java應(yīng)用程序?qū)崿F(xiàn)Accessibility API,以供Microsoft Windows系統(tǒng)的輔助技術(shù)訪問。
javafxpackager JavaFX打包工具
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容