查看 java 進程佔用內存[轉]

使用ps查看JAVA進程使用的內存和虛擬內存( Linux內存管理 ):

$ ps -p ${pid} -o rss,vsz  
RSS     VSZ
7152568 17485844

 

VSZ是虛擬內存,RSS是實際使用的內存,單位KB。你會發現,RSS會遠遠超過了-Xmx的設定。

  爲什麼呢?首先要搞清楚JVM的內存機制: JVM內存區域總體分兩類,heap區 和 非heap 區(本地內存) 。

heap區: 堆區分爲Young Gen,Old Gen。
非heap區: Code Cache(代碼緩存區)、Perm Gen(永久代)、Jvm Stack(java虛擬機棧)、Local Method Statck(本地方法棧)。
  這樣,大概懂了吧。-Xmx設定的僅僅只是heap區。
  
  
  JDK1.8有Native Memory Tracker也可以幫助定位內存。NMT必須先通過VM啓動參數中打開,不過要注意的是,打開NMT會帶來5%-10%的性能損耗。
-XX:NativeMemoryTracking=[off | summary | detail]

off: 默認關閉
summary: 只統計各個分類的內存使用情況.
detail: Collect memory usage by individual call sites.

一般在啓動參數上加入-XX:NativeMemoryTracking=detail,然後通過jcmd查看NMT報告以及查看對比情況。
jcmd <pid> VM.native_memory [summary | detail | baseline | summary.diff | detail.diff | shutdown] [scale= KB | MB | GB]

summary: 分類內存使用情況.
detail: 詳細內存使用情況,除了summary信息之外還包含了虛擬內存使用情況。
baseline: 創建內存使用快照,方便和後面做對比
summary.diff: 和上一次baseline的summary對比
detail.diff: 和上一次baseline的detail對比
shutdown: 關閉NMT

 

其中scale參數可以指定展示的單位,可以爲KB或者MB或者GB

$ jcmd ${pid} VM.native_memory summary

$ jcmd ${pid} VM.native_memory summary

Total: reserved=8491110KB, committed=7220750KB
-                 Java Heap (reserved=6293504KB, committed=6291456KB) 
                            (mmap: reserved=6293504KB, committed=6291456KB) 
 
-                     Class (reserved=1107429KB, committed=66189KB) 
                            (classes #11979)
                            (malloc=1509KB #18708) 
                            (mmap: reserved=1105920KB, committed=64680KB) 
 
-                    Thread (reserved=159383KB, committed=159383KB) 
                            (thread #156)
                            (stack: reserved=158720KB, committed=158720KB)
                            (malloc=482KB #788) 
                            (arena=182KB #310)
 
-                      Code (reserved=255862KB, committed=41078KB) 
                            (malloc=6262KB #9319) 
                            (mmap: reserved=249600KB, committed=34816KB) 
 
-                        GC (reserved=449225KB, committed=449225KB) 
                            (malloc=166601KB #1714646) 
                            (mmap: reserved=282624KB, committed=282624KB) 
 
-                  Compiler (reserved=395KB, committed=395KB) 
                            (malloc=265KB #856) 
                            (arena=131KB #3)
 
-                  Internal (reserved=146041KB, committed=146041KB) 
                            (malloc=132185KB #276370) 
                            (mmap: reserved=13856KB, committed=13856KB) 
 
-                    Symbol (reserved=31487KB, committed=31487KB) 
                            (malloc=29209KB #91080) 
                            (arena=2278KB #1)
 
-    Native Memory Tracking (reserved=33212KB, committed=33212KB) 
                            (malloc=168KB #2575) 
                            (tracking overhead=33044KB)
 
-               Arena Chunk (reserved=2284KB, committed=2284KB)
                            (malloc=2284KB) 
 
-                   Unknown (reserved=12288KB, committed=0KB)
                            (mmap: reserved=12288KB, committed=0KB) 

 

COLLECTOR_PID=`ps -ef|grep "ProcessName" | grep -v grep | awk '{print $2}'`
OUTDIR=/opt/chkmem
HOSTNAME=`hostname`

prstat -s rss 1 1 > ${OUTDIR}/${HOSTNAME}_coll_${COLLECTOR_PID}_prstat_`date '+%Y%m%d_%H%M%S'`.txt

/opt/jdk1.8.0_40/bin/jcmd ${COLLECTOR_PID} VM.native_memory detail > ${OUTDIR}/${HOSTNAME}_coll_${COLLECTOR_PID}_nmd_`date '+%Y%m%d_%H%M%S'`.txt

pmap -x ${COLLECTOR_PID} > ${OUTDIR}/${HOSTNAME}_coll_${COLLECTOR_PID}_pmap_`date '+%Y%m%d_%H%M%S'`.txt

 

 

 

 

 

 

 

 

 

 

 

 

 .

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章