1. 程式人生 > >檢視jvm記憶體使用命令

檢視jvm記憶體使用命令

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

注: 檢視系統裡java程序資訊

// 檢視當前機器上所有執行的java程序名稱與pid(程序編號)
jps -l 
// 顯示指定的jvm程序所有的屬性設定和配置引數
jinfo pid
  • 1
  • 2
  • 3
  • 4

1 . jmap : 記憶體佔用情況查詢 (位於”jdk_home/bin”目錄下)

// 查詢某個pid程序對應的應用程式記憶體佔用情況
jmap -heap pid

// 示例
jmap -heap 5940
Attaching to process ID 5940, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.92-b14

using thread-local object allocation.
Parallel GC with 4
thread(s) Heap Configuration: MinHeapFreeRatio = 0 MaxHeapFreeRatio = 100 MaxHeapSize = 734003200 (700.0MB) NewSize = 44040192 (42.0MB) MaxNewSize = 244318208 (233.0MB) OldSize = 88080384 (84.0MB) NewRatio = 2 SurvivorRatio = 8 MetaspaceSize = 21807104 (20.796875MB) CompressedClassSpaceSize = 1073741824 (1024.0MB) MaxMetaspaceSize = 17592186044415 MB G1HeapRegionSize = 0 (0.0MB) Heap Usage: PS Young Generation Eden Space: capacity = 32505856 (31.0MB) used = 13906760 (13.262519836425781MB) free = 18599096 (17.73748016357422MB) 42.782322052986395% used From Space: capacity = 6291456 (6.0MB) used = 294912 (0.28125MB) free = 5996544 (5.71875MB) 4.6875% used To Space: capacity = 7340032 (7.0MB) used = 0 (0.0MB) free = 7340032 (7.0MB) 0.0% used PS Old Generation capacity = 41943040 (40.0MB) used = 6127536 (5.8436737060546875MB) free = 35815504 (34.15632629394531MB) 14.609184265136719% used 8535 interned Strings occupying 710344 bytes.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51

2 . jstack : 程序所包含執行緒情況查詢 (位於”jdk_home/bin”目錄下)

// 命令幫助
jstach -h 
// 顯示程序詳情
jstack pid

// 示例
jstach 5940
Full thread dump Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode):

"RMI TCP Connection(10)-10.2.13.162" #32 daemon prio=5 os_prio=0 tid=0x00000000179dc000 nid=0x1f60 in Object.wait() [0x000000001d7dd000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
        at java.lang.Object.wait(Native Method)
        at com.sun.jmx.remote.internal.ArrayNotificationBuffer.fetchNotifications(ArrayNotificationBuffer.java:449)
        - locked <0x00000000d462ec18> (a com.sun.jmx.remote.internal.ArrayNotificationBuffer)
        at com.sun.jmx.remote.internal.ArrayNotificationBuffer$ShareBuffer.fetchNotifications(ArrayNotificationBuffer.java:227)
        at com.sun.jmx.remote.internal.ServerNotifForwarder.fetchNotifs(ServerNotifForwarder.java:274)
        at javax.management.remote.rmi.RMIConnectionImpl$4.run(RMIConnectionImpl.java:1270)
        at javax.management.remote.rmi.RMIConnectionImpl$4.run(RMIConnectionImpl.java:1268)
        at javax.management.remote.rmi.RMIConnectionImpl.fetchNotifications(RMIConnectionImpl.java:1274)
        at sun.reflect.GeneratedMethodAccessor59.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:324)

..............

"GC task thread#1 (ParallelGC)" os_prio=0 tid=0x0000000002d10000 nid=0x27dc runnable

"GC task thread#2 (ParallelGC)" os_prio=0 tid=0x0000000002d11800 nid=0x2d84 runnable

"GC task thread#3 (ParallelGC)" os_prio=0 tid=0x0000000002d13800 nid=0x118 runnable

"VM Periodic Task Thread" os_prio=2 tid=0x0000000015ccb000 nid=0x2fd4 waiting on condition

JNI global references: 239
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

3 . jstat: 可以實時監測系統資源佔用與jvm執行情況 (位於”jdk_home/bin”目錄下)

// 命令語法結構:
Usage: jstat -help|-options
       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

// 引數解釋:
Options — 選項,我們一般使用 -gcutil 檢視gc情況
vmid    — VM的程序號,即當前執行的java程序號
interval– 間隔時間,單位為秒或者毫秒
count   — 列印次數,如果預設則列印無數次

S0  — Heap上的 Survivor space 0 區已使用空間的百分比
S1  — Heap上的 Survivor space 1 區已使用空間的百分比
E   — Heap上的 Eden space 區已使用空間的百分比
O   — Heap上的 Old space 區已使用空間的百分比
P   — Perm space 區已使用空間的百分比
YGC — 從應用程式啟動到取樣時發生 Young GC 的次數
YGCT– 從應用程式啟動到取樣時 Young GC 所用的時間(單位秒)
FGC — 從應用程式啟動到取樣時發生 Full GC 的次數
FGCT– 從應用程式啟動到取樣時 Full GC 所用的時間(單位秒)
GCT — 從應用程式啟動到取樣時用於垃圾回收的總時間(單位秒)

//示例
jstat -options
    -class
    -compiler
    -gc
    -gccapacity
    -gccause
    -gcmetacapacity
    -gcnew
    -gcnewcapacity
    -gcold
    -gcoldcapacity
    -gcutil
    -printcompilation

jstat -class -t 5940
Timestamp Loaded  Bytes  Unloaded  Bytes     Time
6188.4   3898  7178.4       40    58.3       1.78

jstat -gcutil 5940 1000 5
S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT
0.00  25.00  98.55  15.37  96.94  94.88     21    0.069     7    0.237    0.306
0.00  25.00  99.59  15.37  96.94  94.88     21    0.069     7    0.237    0.306
0.00  25.00  99.59  15.37  96.94  94.88     21    0.069     7    0.237    0.306
0.00  25.00 100.00  15.37  96.94  94.88     21    0.069     7    0.237    0.306
0.00  25.00 100.00  15.37  96.94  94.88     21    0.069     7    0.237    0.306
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48

4 . jconsole 以GUI的方式更直觀化呈現jvm程序的實時情況, 比如記憶體佔用, 執行緒執行情況等; 
在jdk_home/bin目錄下執行 jconsole.exe 開啟圖形化介面, 然後選擇要檢查的程序就可以檢視所有相關jvm情況的資訊了.

概覽

5 . jprofiler 一個付費的商業jvm分析監控工具, 可檢視概況, 記憶體, GC活動, class 狀況, 執行緒資訊, CPU 佔用情況, 記憶體物件資訊, 還有資料庫連線等, 是一個非常優秀的分析工具;

概覽


相關推薦

一個簡單但實用的檢視JVM記憶體是否存在記憶體溢位以及檢視GC情況的命令

jstat -gcutil pid 2000:2秒鐘列印一次記憶體佔用和GC情況 可以檢視記憶體佔用情況,GC次數及耗時,以及每次GC成果 S0:倖存區1佔用率 S1:倖存區2佔用率 E:Eden區佔用率 O:老年區佔用率 M:元資料區(java8,相當於ja

檢視jvm記憶體使用命令

jmap (linux下特有,也是很常用的一個命令) 觀察執行中的jvm實體記憶體的佔用情況。 引數如下: -heap :列印jvm heap的情況-histo: 列印jvm heap的直方圖。其輸出資訊包括類名,物件數量,物件佔用大小。-histo:live :

動態檢視JVM記憶體的工具

JAVA JPS 命令詳解 JPS 名稱: jps - Java Virtual Machine Process Status Tool 命令用法: jps [options] [hostid]               options:命令選項,用來對輸出格式進行控

JVM:檢視java記憶體情況命令

jinfo:可以輸出並修改執行時的java 程序的opts。 jps:與unix上的ps類似,用來顯示本地的java程序,可以檢視本地執行著幾個java程式,並顯示他們的程序號。 jstat:一個極強的監視VM記憶體工具。可以用來監視VM記憶體內的各種堆和非堆的大小及其記憶體使用量。 jmap:打印出某個ja

ubuntu 檢視記憶體命令

原文連結:https://blog.csdn.net/jzp12/article/details/7560450 Linux中使用free可以檢視系統記憶體使用狀態, 預設單位為KB為單位,在此我以MB為單位說明 [email protected]:~/桌面$ free -m &n

如何檢視jvm資訊的命令

昨天面試被問到關於檢視jvm資訊的操作命令。以前是真真的沒用到過。 平時自己就用個 ps -ef|grep java  tail -f std.out kill -9 pid  vi 編輯器命令 awk 篩選匹配內容到一個資料夾裡。 tar -xv

linux檢視jvm實際堆記憶體情況

linux如何檢視jvm實際記憶體情況   解決方法: 1.檢視jvm的pid(下面的8499),執行:jps [[email protected] ~]# jps 8499 Bootstrap 11284 Jps

jstat命令檢視jvm的GC情況 (以Linux為例)

 注意!!!:使用的jdk版本是jdk8.   類載入統計:   Loaded:載入class的數量 Bytes:所佔用空間大小 Unloaded:未載入數量 Bytes:未載入佔用空間 Time:時間   編譯統計   Compiled:編譯數量。

perftools檢視JVM堆外記憶體

最近線上執行的hbase發現分配了16g記憶體,但是實際使用了22g,堆外記憶體達到6g。感覺非常詭異。堆外記憶體用一般的工具很難檢視,可以通過google-perftools來跟蹤: http://code.google.com/p/google-perftools/d

free 簡單命令檢視叢集記憶體使用狀態

[[email protected] ~]# ls a* -l;free;df-rw-------. 1 root root 1627 Dec 14 16:28 anaconda-ks.cfg-rw-------. 1 root root 2365 Dec 15 1

elasticsearch cat 命令檢視 佔用記憶體情況

elasticsearch 使用 命令 檢視 節點,索引 等 佔用記憶體情況  具體細節 參考官網文件 參考文件 https://www.elastic.co/guide/en/elasticsearch/reference/5.3/cat.html https://www

在Eclipse中檢視JVM記憶體使用情況

1.在eclipse根目錄下建立一個檔案,檔名options,檔案內容org.eclipse.ui/perf/showHeapStatus=true2.修改eclipse目錄下的eclipse.ini檔案,在開始新增如下

linux下檢視jvm使用記憶體狀況

 首先通過 Java程式碼   jstat -gcutil pid 1000     可以檢視GC情況。不需要額外的工具。這樣可以看看是不是有大量FullGC 如果卻是存在大量FullGC,那麼可以直接檢視記憶體  Java程式碼   jmap -histo pid |more   來看

JVM記憶體設定與檢視

一、設定JVM記憶體設定 1. 設定JVM記憶體的引數有四個: -Xmx    Java Heap最大值,預設值為實體記憶體的1/4,最佳設值應該視實體記憶體大小及計算機內其他記憶體開銷而定; -Xms    Java Heap初始值,Server端JVM最好將-X

linux下使用free命令檢視實際記憶體佔用(可用記憶體

轉:http://blog.is36.com/linux_free_command_for_memory/ linux下在終端環境下可以使用free命令看到系統實際使用記憶體的情況,一般用free -m方式檢視記憶體佔用情況(兆為單位)。而系統實際可用記憶體是不是f

jvm記憶體溢位之jdk命令

jps 檢視java應用pid jps -l 列出應用pid 及jar包完整名稱。 jps -v 列表應用pid 及jvm引數。 jmap 獲取記憶體快照 jmap -histo:live pid檢視記憶體中物件例項的數量及佔據記憶體大小並排序 jmap -dump:for

如何檢視Java物件佔用JVM記憶體大小

轉換成位元組型別 之前遇到要檢視快取大小,找了很多方法都不是很合適,從同事那裡得知一個很好、很準確的方法。現分享如下: private List<Map<String,Object>> paramList=new ArrayList<M

Java虛擬機器學習(8):檢視JVM引數及值的命令列工具

檢視JVM各個引數值方式 1. HotSpot vm中的各個globals.hpp檔案  檢視jvm初始的預設值及引數 2.-XX:+PrintFlagsInitial引數 顯示所有可設定引數及預設值,可結

Linux使用free命令檢視實際記憶體佔用

轉自:http://www.cnblogs.com/pengdonglin137/p/3315124.html Linux下在終端環境下可以使用free命令看到系統實際使用記憶體的情況,一般用free -m方式檢視記憶體佔用情況(兆為單位)。而系統實際可用記憶體是不是free

jstat命令檢視jvm的GC情況

jstat命令可以檢視堆記憶體各部分的使用量,以及載入類的數量。命令的格式如下: jstat [-命令選項] [vmid] [間隔時間/毫秒] [查詢次數] 注意!!!:使用的jdk版本是jdk8.  類載入統計: Loaded:載入class的數量Bytes:所佔用空間大小