JDK內置工具使用

JDK內置工具使用

一、javah命令(C?Header?and?Stub?File?Generator)

二、jps命令(Java?Virtual?Machine?Process?Status?Tool)

三、jstack命令(Java?Stack?Trace)

四、jstat命令(Java?Virtual?Machine?Statistics?Monitoring?Tool)

五、jmap命令(Java?Memory?Map)

六、jinfo命令(Java?Configuration?Info)

七、jconsole命令(Java?Monitoring?and?Management?Console)

八、jvisualvm命令(Java?Virtual?Machine?Monitoring,?Troubleshooting,?and?Profiling?Tool)

九、jhat命令(Java?Heap?Analyse?Tool)

十、Jdb命令(The?Java?Debugger)

1、介紹

jstack用于打印出給定的java進程IDcore?file或遠程調試服務的Java堆棧信息,如果是在64位機器上,需要指定選項"-J-d64"Windowsjstack使用方式只支持以下的這種方式:

jstack?[-l]?pid

果java程序崩潰生成core文件,jstack工具可以用來獲得core文件的java?stacknative?stack的信息,從而可以輕松地知道java程序是如何崩潰和在程序何處發生問題。另外,jstack工具還可以附屬到正在運行的java程序中,看到當時運行的java程序的java?stacknative?stack的信息,?如果現在運行的java程序呈現hung的狀態,jstack是非常有用的。

2、命令格式
jstack?[?option?]?pid
jstack?[?option?]?executable?core
jstack?[?option?]?[server-id@]remote-hostname-or-IP

3、常用參數說明

1)、options?

executable?Java?executable?from?which?the?core?dump?was?produced.

(可能是產生core?dumpjava可執行程序)

core?將被打印信息的core?dump文件

remote-hostname-or-IP?遠程debug服務的主機名或ip

server-id?唯一id,假如一臺主機上多個遠程debug服務?

2)、基本參數:

-F’jstack?[-l]?pid’沒有相應的時候強制打印棧信息

-l長列表.?打印關于鎖的附加信息,例如屬于java.util.concurrentownable?synchronizers列表.

-m打印javanative?c/c++框架的所有棧信息.

-h?|?-help打印幫助信息

pid?需要被打印配置信息的java進程id,可以用jps查詢.

4、使用示例


一、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服務)?

輸出內容如下:?
jones@jones:~/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 ] [server-id@]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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387615.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mall整合RabbitMQ實現延遲消息

摘要 本文主要講解mall整合RabbitMQ實現延遲消息的過程&#xff0c;以發送延遲消息取消超時訂單為例。RabbitMQ是一個被廣泛使用的開源消息隊列。它是輕量級且易于部署的&#xff0c;它能支持多種消息協議。RabbitMQ可以部署在分布式和聯合配置中&#xff0c;以滿足高規模、高可…

競價打板的關鍵點

競價打板&#xff0c;主要是速度&#xff0c;其他不重要的&#xff0c;如果為了當天盈利大&#xff0c;失去競價打板的本質含義&#xff0c;因為競價可以買到&#xff0c;盤中買不到&#xff0c;才是競價打板的目的&#xff0c;也就是從競價打板的角度看&#xff0c;主要是看習…

Java常見的幾種內存溢出及解決方法

Java常見的幾種內存溢出及解決方法【情況一】&#xff1a;java.lang.OutOfMemoryError:Javaheapspace&#xff1a;這種是java堆內存不夠&#xff0c;一個原因是真不夠&#xff08;如遞歸的層數太多等&#xff09;&#xff0c;另一個原因是程序中有死循環&#xff1b;如果是java…

docker操作之mysql容器

1、創建宿主機器的掛載目錄 /opt/docker/mysql/conf /opt/docker/mysql/data /opt/docker/mysql/logs 2、創建【xxx.cnf】配置文件&#xff0c;內容如下所示&#xff1a; [mysqld]#服務唯一Idserver-id 1port 3306log-error /var/log/mysql/error.log #只能用IP地址skip_nam…

Windows10系統下wsappx占用CPU資源過高?wsappx是什么?如何關閉wsappx進程?

在Windows10系統開機的時候&#xff0c;wsappx進程占用的CPU資源非常高&#xff0c;導致電腦運行速度緩慢&#xff0c;那么我們如何關閉wsappx進程&#xff0c;讓電腦加快運行速度呢&#xff1f;下面就一起來看一下操作的方法吧。 【現象】 1、先來看一下電腦剛開機的時候&…

如何通過Windows Server 2008 R2建立NFS存儲

如何通過Windows Server 2008 R2建立NFS存儲在我們日常工作的某些實驗中&#xff0c;會需要使用存儲服務器。而硬件存儲成本高&#xff0c;如StarWind之類的iSCSI軟存儲解決方案需要單獨下載服務器端程序&#xff0c;且配置比較繁瑣&#xff0c;令很多新手們很是頭疼。事實上&a…

python-windows安裝相關問題

1.python的環境配置&#xff0c;有些時候是沒有配置的&#xff0c;需要在【系統環境】-【path】里添加。 2.安裝pip&#xff1a;從官網下載pip包&#xff0c;然后到包目錄》python setup.py install 安裝 3.安裝scrapyd&#xff1a;正常使用pip3 install scrapyd安裝不起&…

hdu 1542/1255 Atlantis/覆蓋的面積

1542 1255 兩道掃描線線段樹的入門題。 基本沒有什么區別&#xff0c;前者是模板&#xff0c;后者因為是求覆蓋次數至少在兩次以上的&#xff0c;這個同樣是具有并集性質的&#xff0c;所以把cover的判斷條件更改一下就可以了qwq。 hdu1542 代碼如下&#xff1a; #include<i…

使用了JDK自帶的jconsole查看Tomcat運行情況

最近對公司的項目進行JVM調優&#xff0c;使用了JDK自帶的jconsole查看Tomcat運行情況&#xff0c;記錄下配置以便以后參考&#xff1a;首先&#xff0c;修改Tomcat的bin目錄下的catalina.bat文件&#xff0c;在JAVA_OPTS變量中添加下面四行&#xff0c;即可set JAVA_OPTS %JAV…

jvm02

java虛擬機內存管理 每個線程就是一個順序的執行單元&#xff0c;線程共享區即多個線程共享同一塊區域&#xff0c;線程獨占區即每個線程都有自己的虛擬機棧&#xff0c;本地方法棧&#xff0c;程序計數器。 程序計數器是一個比較小的內存空間&#xff0c;可以看作是當前線程所…

搭建svn管理平臺

安裝svn服務器&#xff1a;yum -y install subversion創建svn的目錄&#xff1a;mkdir -p /data/svn初始化svn目錄&#xff1a;svnadmin create /data/svnconf下的三個目錄介紹&#xff1a;authz&#xff1a;控制權限,創建用戶。密碼在passwd創建 passwd&#xff1a;密碼文件&…

Oracle dataguard 正常切換和應急切換

Oracle dataguard 正常切換和應急切換oracle dataguard提供異地容災方案,能有效的防止單點故障和提供高可用技術,這里介紹dataguard正常主備切換和應急切換&#xff08;應急切換模擬主庫出現問題無法還原,備庫脫離dataguard接管主庫對外提供服務&#xff09;1&#xff09;Oracl…

好程序員web前端分享JS引擎的執行機制

好程序員web前端分享JS引擎的執行機制&#xff0c;請先著重牢記兩點&#xff01;JS是單線程語言。JS的EventLoop是JS的執行機制。深入了解JS的執行&#xff0c;就等于深入了解JS里的eventloop。1、靈魂三問&#xff1a;JS為什么是單線程的?為什么需要異步?單線程又是如何實現…

shutil模塊、json和pickle模塊

shutil模塊&#xff1a; 高級的文件、文件夾、壓縮包處理模塊 json和pickle模塊 之前學過eval內置方法可以將一個字符串轉化成Python對象&#xff0c;但eval方法是有局限性的&#xff0c;對于普通的數據類型&#xff0c;json.loads、eval都可以使用&#xff0c;但遇到特殊類型的…

每日一問:LayoutParams 你知道多少?

前面的文章中著重講解了 View 的測量流程。其中我提到了一句非常重要的話&#xff1a;**View 的測量匡高是由父控件的 MeasureSpec 和 View 自身的 LayoutParams 共同決定的。**我們在前面的 每日一問&#xff1a;談談對 MeasureSpec 的理解 把 MeasureSpec 的重點進行了講解&a…

kuangbin專題十六 KMP擴展KMP HDU2594 Simpsons’ Hidden Talents

Homer: Marge, I just figured out a way to discover some of the talents we weren’t aware we had. Marge: Yeah, what is it? Homer: Take me for example. I want to find out if I have a talent in politics, OK? Marge: OK. Homer: So I take some politician’s na…

SNI: 實現多域名虛擬主機的SSL/TLS認證

為什么80%的碼農都做不了架構師&#xff1f;>>> 一. 介紹 早期的SSLv2根據經典的公鑰基礎設施PKI(Public Key Infrastructure)設計&#xff0c;它默認認為&#xff1a;一臺服務器&#xff08;或者說一個IP&#xff09;只會提供一個服務&#xff0c;所以在SSL握手時…

echo(),print(),print_r(),var_dump()的區別

echo可以一次輸出多個值&#xff0c;多個值之間用逗號分隔。echo是語言結構(language construct)&#xff0c;而并不是真正的函數&#xff0c;因此不能作為表達式的一部分使用。echo是php的內部指令&#xff0c;不是函數&#xff0c;無返回值。 print()&#xff1a;函數print()…

我心目中的牛程序員、我們可以對比看看(人家還是看多年朋友面子上才肯幫忙1周,至少需支付1萬元辛苦費)...

為什么80%的碼農都做不了架構師&#xff1f;>>> 最近碰到客戶整個網站改版的需要&#xff0c;非常短的時間里只有1周時間里&#xff0c;需要把整個B2C網站徹底的進行版面&#xff0c;我自己估算了一下&#xff0c;就是往死里干一天工作48個小時&#xff0c;1周也干…

c#做端口轉發程序支持正向連接和反向鏈接

3389的時候 例子1&#xff1a;連接a機器的3389端口連不上&#xff0c;因為對方防火墻或者網關做了限制&#xff0c;只能訪問a機器的個別端口比如80。 例子2&#xff1a;連接a機器的幾乎所有端口都連不上&#xff08;對方乃內網或者防火墻網關做了限制&#xff09;&#xff0c…