查看java內存狀況的幾個經常使用命令

java 命令簡單查看jvm內存使用情況html

jinfo:能夠輸出並修改運行時的java 進程的opts。 java

jps:與unix上的ps相似,用來顯示本地的java進程,能夠查看本地運行着幾個java程序,並顯示他們的進程號。 linux

jstat:一個極強的監視VM內存工具。能夠用來監視VM內存內的各類堆和非堆的大小及其內存使用量。 jvm

jmap:打印出某個java進程(使用pid)內存內的全部'對象'的狀況(如:產生那些對象,及其數量)。 工具

一、jinfopost

jinfo:的用處比較簡單,就是能輸出並修改運行時的java進程的運行參數。用法是jinfo -opt pid 如:查看52606的MaxPerm大小能夠用 jinfo -flag MaxPermSize 52606。spa

二、jps線程

顯示當前全部java進程pid的命令,咱們能夠經過這個命令來查看到底啓動了幾個java進程(由於每個java程序都會獨佔一個java虛擬機實例),不過jps有個缺點是隻能顯示當前用戶的進程id,要顯示其餘用戶的還只能用linux的ps命令。3d

執行jps命令,會列出全部正在運行的java進程,其中jps命令也是一個java程序,前面的數字就是對應的進程id,這個id的做用很是大,後面會有相關介紹。unix

jps -help:

jps -l :

 

輸出應用程序main.class的完整package名或者應用程序jar文件完整路徑名

 jps -v: 輸出傳遞給JVM的參數

jps失效

咱們在定位問題過程會遇到這樣一種狀況,用jps查看不到進程id,用ps -ef | grep java卻能看到啓動的java進程。

要解釋這種現象,先來了解下jps的實現機制:

java程序啓動後,會在目錄/tmp/hsperfdata_{userName}/下生成幾個文件,文件名就是java進程的pid,所以jps列出進程id就是把這個目錄下的文件名列一下而已,至於系統參數,則是讀取文件中的內容。

咱們來思考下:若是因爲磁盤滿了,沒法建立這些文件,或者用戶對這些文件沒有讀的權限。又或者由於某種緣由這些文件或者目錄被清除,出現以上這些狀況,就會致使jps命令失效。

若是jps命令失效,而咱們又要獲取pid,還可使用如下兩種方法:

一、top | grep java

二、ps -ef |grep java

三、jstat

jstat工具特別強大,有衆多的可選項,詳細查看堆內各個部分的使用量,以及加載類的數量。使用時,需加上查看進程的進程id,和所選參數。如下詳細介紹各個參數的意義。 
jstat -class pid:顯示加載class的數量,及所佔空間等信息。 
jstat -compiler pid:顯示VM實時編譯的數量等信息。 
jstat -gc pid:能夠顯示gc的信息,查看gc的次數,及時間。其中最後五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。 
jstat -gccapacity:能夠顯示,VM內存中三代(young,old,perm)對象的使用和佔用大小,如:PGCMN顯示的是最小perm的內存使用量,PGCMX顯示的是perm的內存最大使用量,PGC是當前新生成的perm內存佔用量,PC是但前perm內存佔用量。其餘的能夠根據這個類推, OC是old內純的佔用量。 
jstat -gcnew pid:new對象的信息。 
jstat -gcnewcapacity pid:new對象的信息及其佔用量。 
jstat -gcold pid:old對象的信息。 
jstat -gcoldcapacity pid:old對象的信息及其佔用量。 
jstat -gcpermcapacity pid: perm對象的信息及其佔用量。 
jstat -util pid:統計gc信息統計。 
jstat -printcompilation pid:當前VM執行的信息。 
除了以上一個參數外,還能夠同時加上 兩個數字,如:jstat -printcompilation 3024 260 6是每260毫秒打印一次,一共打印6次,還能夠加上-h3每三行顯示一下標題。

 四、jmap

主要用於打印指定java進程的共享對象內存映射或堆內存細節。

堆Dump是反映堆使用狀況的內存鏡像,其中主要包括系統信息、虛擬機屬性、完整的線程Dump、全部類和對象的狀態等。通常在內存不足,GC異常等狀況下,咱們會去懷疑內存泄漏,這個時候就會去打印堆Dump。

jmap的用法:

jmap pid

打印的信息分別爲:共享對象的起始地址、映射大小、共享對象路徑的全程。

jmap -heap pid:查看堆使用狀況

map -histo pid:查看堆中對象數量和大小

打印的信息分別是:序列號、Class實例的數量、內存的佔用、類限定名

若是是內部類,類名的開頭會加上*,若是加上live子參數的話,如jmap -histo:live pid,這個命名會觸發一次FUll GC,只統計存活對象

 

原文出處:https://www.cnblogs.com/sxFu/p/11751934.html

相關文章
相關標籤/搜索