JVM:查看java記憶體情況命令

來源:互聯網
上載者:User

標籤:參數   記憶體流失   大小   等等   jinfo   列印   載入類   簡單   虛擬機器   

  jmap (linux下特有,也是很常用的一個命令)

  觀察運行中的jvm實體記憶體的佔用情況。

  參數如下:

  -heap :列印jvm heap的情況

  -histo: 列印jvm heap的長條圖。其輸出資訊包括類名,對象數量,對象佔用大小。

  -histo:live : 同上,但是只答應存活對象的情況

  -permstat: 列印permanent generation heap情況

  命令使用:

  jmap -heap 3409

  可以觀察到New Generation(Eden Space,From Space,To Space),tenured generation,Perm Generation的記憶體使用量情況

  輸出內容:

  jmap -histo 3409 | jmap -histo:live 3409

  可以觀察heap中所有對象的情況(heap中所有生存的對象的情況)。包括對象數量和所佔空間大小。

  輸出內容:

  寫個指令碼,可以很快把佔用heap最大的對象找出來,對付記憶體流失特別有效。

  如果結果很多,可以用以下命令輸出到文字檔。

  jmap -histo 3409 | jmap -histo:live 3409 > a.txt

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

  jps:與unix上的ps類似,用來顯示本地的java進程,可以查看本地運行著幾個java程式,並顯示他們的進程號。

  jstat:一個極強的監視VM記憶體工具。可以用來監視VM記憶體內的各種堆和非堆的大小及其記憶體使用量量。

  jmap:列印出某個java進程(使用pid)記憶體內的所有‘對象‘的情況(如:產生那些對象,及其數量)。

  jconsole:一個java GUI監視工具,可以以圖表化的形式顯示各種資料。並可通過遠端連線監視遠端伺服器VM。

  詳細:在使用這些工具前,先用JPS命令擷取當前的每個JVM進程號,然後選擇要查看的JVM。

  jstat工具特彆強大,有眾多的可選項,詳細查看堆內各個部分的使用量,以及載入類的數量。使用時,需加上查看進程的進程id,和所選參數。以下詳細介紹各個參數的意義。

  jstat -class pid:顯示載入class的數量,及所佔空間等資訊。

  jstat -compiler pid:顯示VMJust-In-Time 編譯的數量等資訊。

  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 250 6是每250毫秒列印一次,一共列印6次,還可以加上-h3每三行顯示一下標題。

  jmap是一個可以輸出所有記憶體中對象的工具,甚至可以將VM 中的heap,以二進位輸出成文本。

  命令:jmap -dump:format=b,file=heap.bin

  file:儲存路徑及檔案名稱

  pid:進程編號

  ?jmap -histo:live pid| less :堆中活動的對象以及大小

  ?jmap -heap pid : 查看堆的使用狀況資訊

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

  jconsole是一個用java寫的GUI程式,用來監控VM,並可監控遠端VM,非常易用,而且功能非常強。使用方法:命令列裡打 jconsole,選則進程就可以了。

  JConsole中關於記憶體分區的說明。

  Eden Space (heap): 記憶體最初從這個線程池分配給大部分對象。

  Survivor Space (heap):用於儲存在eden space記憶體池中經過記憶體回收後沒有被回收的對象。

  Tenured Generation (heap):用於保持已經在 survivor space記憶體池中存在了一段時間的對象。

  Permanent Generation (non-heap): 儲存虛擬機器自己的靜態(refective)資料,例如類(class)和方法(method)對象。Java虛擬機器共用這些類資料。這個地區被分割為唯讀和唯寫的,

  Code Cache (non-heap):HotSpot Java虛擬機器包括一個用於編譯和儲存本地代碼(native code)的記憶體,叫做“代碼緩衝區”(code cache)

  ?jstack ( 查看jvm線程運行狀態,是否有死結現象等等資訊) : jstack pid : thread dump

  ?jstat -gcutil pid 1000 100 : 1000ms統計一次gc情況統計100次;

  另外推薦一款查看jmap dump 的記憶體對象工具 MemoryAnalyzer

JVM:查看java記憶體情況命令

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.