gc狀態查詢(java)
jstat工具特別強大,有眾多的可選項,詳細檢視堆內各個部分的使用量,以及載入類的數量。使用時,需加上檢視程序的程序id,和所選引數。
執行:cd $JAVA_HOME/bin中執行jstat,注意jstat後一定要跟引數。
語法結構:
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
引數解釋:
Options — 選項,我們一般使用 -gcutil 檢視gc情況
vmid — VM的程序號,即當前執行的java程序號
interval– 間隔時間,單位為秒或者毫秒
count — 列印次數,如果預設則列印無數次
stat -printcompilation pid:當前VM執行的資訊。
-gcutil引數
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使用過程如下:
sudo jps
1,使用top命令檢視java的pid,發現有2個java程序,不確定哪個對應的是web應用的程序號
Html程式碼
- [email protected]:~$ top
- top - 11:34:00 up 112 days, 10:48, 2 users, load average: 0.77, 0.36, 0.26
- Tasks: 247 total, 1 running, 246 sleeping, 0 stopped, 0 zombie
- Cpu(s): 15.8%us, 1.5%sy, 0.0%ni, 82.5%id, 0.0%wa, 0.0%hi, 0.1%si, 0.0%st
- Mem: 12321892k total, 2440448k used, 9881444k free, 515004k buffers
- Swap: 31249400k total, 112k used, 31249288k free, 995320k cached
- PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
- 16183 root 20 0 1564m 175m 12m S 126 1.5 0:03.82 java
- 15581 root 20 0 305m 54m 9988 S 1 0.5 0:05.13 java
- 15689 www-data 20 0 55084 28m 956 S 1 0.2 0:01.51 nginx
- 15688 www-data 20 0 55332 28m 956 S 0 0.2 0:04.63 nginx
- 16182 webserver 20 0 19356 1528 1064 R 0 0.0 0:00.02 top
- 1 root 20 0 23704 1932 1296 S 0 0.0 0:02.24 init
- 2 root 20 0 0 0 0 S 0 0.0 0:00.01 kthreadd
- 3 root RT 0 0 0 0 S 0 0.0 0:00.02 migration/0
2,使用ps -ef | grep java,可以看到java應用程式對應的程序號ps -ef | grep tomcat 看到的東西更加少,好找些
Html程式碼
- [email protected]:/usr/local/resin$ ps -ef | grep java
- root 17778 1 0 13:10 pts/0 00:00:16 /usr/lib/jvm/java-6-sun-1.6.0.20/bin/java -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true-Dresin.home=/usr/local/resin -Dresin.root=/usr/local/resin/ -Xrs -Xss256k -Xmx32m -Dcom.sun.management.jmxremote -d64 com.caucho.boot.WatchdogManager -resin-home /usr/local/resin -conf /usr/local/resin/conf/resin-8080.conf start
- root 18293 17778 8 13:56 pts/0 00:07:14 /usr/lib/jvm/java-6-sun-1.6.0.20/bin/java -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djava.system.class.loader=com.caucho.loader.SystemClassLoader -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true-Dresin.home=/usr/local/resin [color=red]-Xmx4096m -Xms4096m -Xmn1024m -Xss1m -Xdebug -Dcom.sun.management.jmxremote -XX:PermSize=512M-XX:MaxPermSize=1024M[/color] -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djava.awt.headless=true-Dresin.home=/usr/local/resin -Dresin.root=/usr/local/resin/ -Dcom.sun.management.jmxremote -Djava.util.logging.manager=com.caucho.log.LogManagerImpl -Djavax.management.builder.initial=com.caucho.jmx.MBeanServerBuilderImpl -Djav .awt.headless=true-Dresin.home=/usr/local/resin -Dresin.root=/usr/local/resin/ -Dcom.sun.management.jmxremote com.caucho.server.resin.Resin --root-directory /usr/local/resin -conf /usr/local/resin/conf/resin-8080.conf -socketwait 29006 -resin-home /usr/local/resin start
- webserver 18867 14532 0 15:21 pts/0 00:00:00 grep --color=auto java
3,執行sudo jstat -gcutil 程序號 5s(每隔5秒檢視jvm垃圾回收情況)
Html程式碼
- [email protected]:~$ sudo jstat -gcutil 16183 5s
- S0 S1 E O P YGC YGCT FGC FGCT GCT
- 5.02 0.00 49.75 30.01 65.49 14 0.421 1 0.121 0.542
- 5.02 0.00 88.80 30.01 65.62 14 0.421 1 0.121 0.542
- 0.00 96.66 32.79 30.44 65.81 15 0.428 1 0.121 0.549
- 0.00 96.66 72.60 30.44 65.93 15 0.428 1 0.121 0.549
- 1.20 0.00 38.76 30.61 66.01 16 0.439 1 0.121 0.560
- 1.20 0.00 63.20 30.61 66.08 16 0.439 1 0.121 0.560
- 0.00 1.28 30.78 30.71 66.45 17 0.446 1 0.121 0.567
- 0.00 1.28 67.98 30.71 66.57 17 0.446 1 0.121 0.567
- 1.65 0.00 8.04 30.81 66.67 18 0.452 1 0.121 0.573
- 1.65 0.00 47.42 30.81 66.82 18 0.452 1 0.121 0.573
- 1.65 0.00 90.38 30.81 66.91 18 0.452 1 0.121 0.573
- 0.00 1.41 37.02 30.94 66.97 19 0.458 1 0.121 0.578
- 0.00 1.41 75.75 30.94 66.98 19 0.458 1 0.121 0.578
- 1.19 0.00 18.04 31.04 67.13 20 0.465 1 0.121 0.585
其他可用option:
可以通過命令:jstat -options option,看到支援的option引數
-class (類載入器)
-compiler (JIT)
-gc (GC堆狀態)
-gccapacity (各區大小)
-gccause (最近一次GC統計和原因)
-gcnew (新區統計)
-gcnewcapacity (新區大小)
-gcold (老區統計)
-gcoldcapacity (老區大小)
-gcpermcapacity (永久區大小)
-gcutil (GC統計彙總)
-printcompilation (HotSpot編譯統計)
jstat -gcutil pid: 統計gc資訊統計。
jstat -gccapacity pid: 可以顯示,VM記憶體中三代(young,old,perm)物件的使用和佔用大小
-gccapacity引數:
NGCMN:年輕代(young)中初始化(最小)的大小 (位元組)
NGCMX:年輕代(young)的最大容量 (位元組)
NGC:年輕代(young)中當前的容量 (位元組)
S0C:年輕代中第一個survivor(倖存區)的容量 (位元組)
S1C:年輕代中第二個survivor(倖存區)的容量 (位元組)
EC:年輕代中Eden(伊甸園)的容量 (位元組)
OGCMN:old代中初始化(最小)的大小 (位元組)
OGCMX:old代的最大容量 (位元組)
OGC:old代當前新生成的容量 (位元組)
OC:Old代的容量 (位元組)
PGCMN:perm代中初始化(最小)的大小 (位元組)
PGCMX:perm代的最大容量 (位元組)
PGC:perm代當前新生成的容量 (位元組)
PC:Perm(持久代)的容量 (位元組)
YGC:從應用程式啟動到取樣時年輕代中gc次數
FGC:從應用程式啟動到取樣時old代(全gc)gc次數
jps -mlVv localhost
jps [ options ] [ hostid ]
其中,options可以用:
-q (安靜)
-m (輸出傳遞給main方法的引數)
-l (顯示完整路徑)
-v (顯示傳遞給JVM的命令列引數)
-V (顯示通過flag檔案傳遞給JVM的引數)
-J (和其他Java工具類似用於傳遞引數給命令本身要呼叫的java程序);
hostid是主機id,預設localhost。
Jstack Usage:
jstack [-l] <pid>
(to connect to running process 連線到正在執行的程序)
jstack -F [-m] [-l] <pid>
(to connect to a hung process 連線到懸掛的程序)
jstack [-m] [-l] <executable> <core>
(to connect to a core file 連線到core檔案)
jstack [-m] [-l] [[email protected]]<remote server IP or hostname>
(to connect to a remote debug server 連線到遠端機器)
Options:
-F to force a thread dump. Use when jstack <pid> does not respond (process is hung)
-m to print both java and native frames (mixed mode)
-l long listing. Prints additional information about locks
-h or -help to print this help message
jstack 3713;
jstack -F 3713
jstack -l -m /opt/jdk1.6.0/bin/java core.659
可以觀察到jvm中當前所有執行緒的執行情況和執行緒當前狀態
Java程式碼
- Attaching to process ID 3713, please wait...
- Debugger attached successfully.
- Server compiler detected.
- JVM version is 20.4-b02
- Deadlock Detection:
- No deadlocks found.
- Thread 12172: (state = BLOCKED)
- - sun.misc.Unsafe.park(boolean, long) @bci=0 (Interpreted frame)
jmap:顯示java程序記憶體使用的相關資訊
jmap pid #列印記憶體使用的摘要資訊
jmap –heap pid #java heap資訊
jmap -histo:live pid #統計物件count ,live表示在使用
jmap -histo pid >mem.txt #列印比較簡單的各個有多少個物件佔了多少記憶體的資訊,一般重定向的檔案
jmap -dump:format=b,file=mem.dat pid #將記憶體使用的詳細情況輸出到mem.dat 檔案
jvm配置列印GC相關資訊
-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC
對應的日誌會輸出到catalina的日誌中去
jinfo -flag HeapDumpBeforeFullGC 29167 #檢視HeapDumpBeforeFullGC
jinfo: 檢視和修改JVM引數
Usage:
jinfo <option> <pid>
(to connect to a running process)
where <option> is one of:
-flag <name> to print the value of the named VM flag
-flag [+|-]<name> to enable or disable the named VM flag
-flag <name>=<value> to set the named VM flag to the given value
-h | -help to print this help message
相關推薦
gc狀態查詢(java)
Jstat是JDK自帶的一個輕量級小工具。全稱“Java Virtual Machine statistics monitoring tool”,它位於java的bin目錄下,主要利用JVM內建的指令對Java應用程式的資源和效能進行實時的命令列的監控,包括了對Heap s
折半查詢(Java)
/*折半查詢 比方說,對於從小到大升序的陣列,只要判斷資料是否和陣列中間值相等, 如果不相等,當該資料小於陣列中間元素的值,則說明資料在中間值的左側, 因此將這組資料的區間縮小為中間值左側的區間,以此類推。直到查詢區間縮小為0還沒找到,說明要查詢的資料不在陣列中。 */ i
Binary search 二分查詢(java)
二分查詢 二分查詢可能是最常見的筆試考題之一 package binarySearchDemo; import java.util.Scanner; public class binary_search { public static void
劍指offer——二維陣列中的查詢(JAVA)
題目描述 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 解題思路 利用二維陣列
在SPRING DATA MONGODB中使用聚合統計查詢(Java)
public class VideoRepositoryImpl implements VideoRepositoryCustom{ private static Logger logger = LoggerFactory.getLogger(VideoRepositoryImpl.cla
二維陣列中的查詢(Java)
題目:在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。第一思路:在二維陣列中選取一個數字,分3種情況來查詢的過程。(1)選取的數字和target相等,則查詢過
(java)leetcode852 山脈陣列的封頂索引(二分查詢法找出陣列中最大值的下標)(Peak Index in a Mountain Array)
題目描述: 我們把符合下列屬性的陣列 A 稱作山脈: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A
二分查詢的兩種實現(Java)
查詢過程 首先,假設表中元素是按升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的記錄,使查詢成功
演算法——把二元查詢樹轉變成排序的雙向連結串列(JAVA)
輸入一棵二元查詢樹,將該二元查詢樹轉換成一個排序的雙向連結串列。 要求不能建立任何新的結點,只調整指標的指向。 轉換成雙向連結串列 1=2=3=4=5=6=7=8=9=10=11=12=13=14=15。 程式碼如下 public class B
二分查詢(Java實現)
二分查詢又稱為折半查詢,要求線性表必須採用順序儲存結構,並且元素按關鍵字有序排列。 查詢過程:假設陣列中元素按升序排列,將陣列中間位置的值與待查值比較,如果相等則查詢成功;否則利用中間位置下標將陣列分成
無序連結串列實現順序查詢(Java實現)
連結串列中的每個結點儲存一個鍵值對,get()的實現即為遍歷連結串列,equals()方法比較需要被查詢的鍵和每個結點中的鍵,如果匹配成功就返回相應的值,否則返回null。put()的實現也是遍歷連結串
JVM GC調優(2)-----GC演算法判定物件可以被回收(部分摘自深入理解Java虛擬機器)
這次我們介紹JVM中的GC演算法 引用計數法 可達性分析法 首先我們提出四個問題 哪裡的記憶體需要回收? 什麼時候回收? 如何回收? Java與C++之間有一堵由記憶體動態分配和垃圾收集技術所圍成的“高牆”, 牆外面的人想進去, 牆裡面的人卻想出來。
JVM GC調優(3)-----GC演算法(部分摘自深入理解Java虛擬機器)
介紹幾種GC演算法的思想及其發展過程: 標記-清除 複製 標記-壓縮 分代收集演算法 GC演算法主要是用於堆死亡物件的清理的集中方式,他們各有優缺點,下面我們開始做介紹 標記清除演算法 原理解析 -最基礎的收集演算法是“標記-清除”( Mark-Swe
一行程式碼搞定二分查詢(java版)
效果如圖: public static int rank(double key,double[] a,int lo,int hi){ return lo>hi?-1:key<a[lo+(hi-lo)/2]?rank(key,a,lo,lo+(hi-lo)/2-
leetcode 29 ---- 二分查詢(中等) : 兩數相除(java)
1. 問題:給定兩個整數,被除數 dividend 和除數 divisor。將兩數相除,要求不使用乘法、除法和 mod 運算子。返回被除數 dividend 除以除數 divisor 得到的商。 示例 1: 輸入: dividend = 10, divisor = 3
牛客網——華為機試(題14:字串的連線最長路徑查詢)(Java)
題目描述: 給定n個字串,請對n個字串按照字典序排列。 輸入描述: 輸入第一行為一個正整數n(1≤n≤1000),下面n行為n個字串(字串長度≤100),字串中只含有大小寫字母。 輸出描述: 資料輸出n行,輸出結果為按照字典序排列的字串。 示例1: 輸入: 9
簡單的折半查詢演算法(Java)
折半查詢的優點是能夠最大減少查詢的時間複雜度,但也對查詢的目標陣列或集合提出一定要求,即陣列或集合中的數字排序必須是有序的,否則不能用折半查詢,只能用遍歷。以下是簡單的折半查詢演算法: public class test { public static void main
劍指offer之二維陣列中的查詢(Java實現)
2. 二維陣列中的查詢 題目描述 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
自己寫UDF函式匯入hive對查詢結果進行格式化顯示(Java)
本篇UDF函式使用IntelliJ IDEA進行編寫和打包,使用的是Java語言,資料使用上一篇部落格“HDFS、Hive(Impala)讀取本地檔案到HDFS,再使用Hive(Impala)從HDFS讀取檔案進行建表”中已經放入hive中的資料進行查詢展示。 建立一個ma
藍橋杯(java):數列特徵,查詢整數,楊輝三角,特殊的數字,迴文數
人生無趣,生活不易,一起找點樂子吧。 數列特徵: 問題描述 給出n個數,找出這n個數的最大值,最小值,和。 輸入格式 第一行為整數n,表示數的個數。 第二行有n個數,為給定的n個數,每個數的絕對值都小於10000。 輸出格式 輸出三行,每行一個整