jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息
1、查看磁盤還剩多少空間,使用df命令(查看Linux版本:lsb_release -a,uname -a)
2、當前文件夾下的磁盤使用情況:(du --max-depth=1 -h后面沒有顯示跟路徑,它默認是當前的路徑。)
3、查看其中某一文件(文件夾)的大小:這里的大小是該文件夾下的大小的總和
4、查看指定目錄下的文件大小
-----------------------------------------------------------------------------------------------------
jps工具
簡潔:jps(Java Virtual Machine Process Status Tool)是JDK1.5提供的一個顯示當前所有java進行的pid命令,非常適合在Linux/Unix平臺上簡單查看當前java進程的一些簡單情況??梢酝ㄟ^它來查看到底啟動了幾個java進程(因為每一個java程序都會獨占一個java虛擬機實例)
jps命令:
jps -q(只顯示pid,不顯示class名稱,jar文件名和傳遞給main方法的參數)
jps -m輸出傳遞給main方法的參數,在嵌入式jvm上可能是null
jps -l輸出應用程序main class的完整package名 或者 應用程序的jar文件完整路徑名
jps -v輸出傳遞給JVM的參數
注:jsp命令有個地方不好,似乎只能顯示當前用戶的java進程,要顯示其他用戶的還是只能用unix/linux的ps命令
| 選項 | 作用 |
| -q | 只能輸出LVMID,省略主類的名稱 |
| -m | 輸出虛擬機進程啟動時傳遞給主類main()函數的參數 |
| -l | 輸出主類的全名,如果進程執行的是Jar包,輸出Jar路徑 |
| -v | 輸出虛擬機進程啟動時JVM參數 |
---------------------------------------------------------------------------------------------------------------------------
jstat
?????? (JVM Statistics Monitorning Tool)是用于監視虛擬機各種運行狀態信息的狀態信息的命令行工具。它可以顯示本地或遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據,在沒有GUI圖形界面,只提供了純文本控制臺環境的服務器上,它將是運行期定位虛擬機性能問題的首選工具:
1. jstat -gc pid? 可以顯示gc的信息,查看gc的次數,及時間。此外還可以用jstat -gc pid 時間段(毫秒值) 查詢次數
??????????? 其中最后五項,分別是young gc的次數,young gc的時間,full gc的次數,full gc的時間,gc的總時間。
2.jstat -gccapacity pid,監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大和最小空間可以顯示,VM內存中三代(young,old,perm)對象的使用和占用大小,
??????????? 如:PGCMN顯示的是最小perm的內存使用量,PGCMX顯示的是perm的內存最大使用量,
??????????? PGC是當前新生成的perm內存占用量,PC是但前perm內存占用量。
??????????? 其他的可以根據這個類推, OC是old內純的占用量。
經計算PGCMN的值為128m,PGCMX的值為256m,這些就是在虛擬機中配置的參數值。
3.jstat -gcutil pid:監視內容與-gc基本相同,但輸出主要關注Java堆各個區域使用到的最大和最小空間
?
說明永生帶使用了的內存量為88.03%
4.jstat -gcnew pid:監視新生代GC的狀況
?
5.jstat -gcnewcapacity pid:監視內容與-gcnew基本相同,輸出主要關注使用到的最大和最小空間
6.jstat -gcold pid:監視老年代的狀況
?
7.stat -gcoldcapacity pid:監視內容與-gcold基本相同,輸出主要關注使用到的最大和最小空間。
8.jstat -gcpermcapacity pid:輸出永生代使用到的最大和最小空間
?
9.jstat -class pid:監視類裝載、卸載數量、總空間及類裝載所耗費的時間
顯示加載class的數量,及所占空間等信息。
10.jstat -compiler pid:輸出JIT編輯器編譯過的方法、耗時等信息
11.stat -printcompilation pid:輸出已經被JIT編譯的方法
當前VM執行的信息。
??????? 一些術語的中文解釋:
???????? S0C:年輕代中第一個survivor(幸存區)的容量 (字節)
???????? S1C:年輕代中第二個survivor(幸存區)的容量 (字節)
???????? S0U:年輕代中第一個survivor(幸存區)目前已使用空間 (字節)
???????? S1U:年輕代中第二個survivor(幸存區)目前已使用空間 (字節)
?????????EC:年輕代中Eden(伊甸園)的容量 (字節)
?????????EU:年輕代中Eden(伊甸園)目前已使用空間 (字節)
?????????OC:Old代的容量 (字節)
?????????OU:Old代目前已使用空間 (字節)
?????????PC:Perm(持久代)的容量 (字節)
?????????PU:Perm(持久代)目前已使用空間 (字節)
???????? YGC:從應用程序啟動到采樣時年輕代中gc次數
???????? YGCT:從應用程序啟動到采樣時年輕代中gc所用時間(s)
???????? FGC:從應用程序啟動到采樣時old代(全gc)gc次數
???????? FGCT:從應用程序啟動到采樣時old代(全gc)gc所用時間(s)
???????? GCT:從應用程序啟動到采樣時gc用的總時間(s)
???????? NGCMN:年輕代(young)中初始化(最小)的大小 (字節)
???????? NGCMX:年輕代(young)的最大容量 (字節)
???????? NGC:年輕代(young)中當前的容量 (字節)
???????? OGCMN:old代中初始化(最小)的大小 (字節)?
???????? OGCMX:old代的最大容量 (字節)
???????? OGC:old代當前新生成的容量 (字節)
???????? PGCMN:perm代中初始化(最小)的大小 (字節)?
???????? PGCMX:perm代的最大容量 (字節)???
???????? PGC:perm代當前新生成的容量 (字節)
?????????S0:年輕代中第一個survivor(幸存區)已使用的占當前容量百分比
???????? S1:年輕代中第二個survivor(幸存區)已使用的占當前容量百分比
???????? E:年輕代中Eden(伊甸園)已使用的占當前容量百分比
?????????O:old代已使用的占當前容量百分比
?????????P:perm代已使用的占當前容量百分比
???????? S0CMX:年輕代中第一個survivor(幸存區)的最大容量 (字節)
???????? S1CMX :年輕代中第二個survivor(幸存區)的最大容量 (字節)
???????? ECMX:年輕代中Eden(伊甸園)的最大容量 (字節)
???????? DSS:當前需要survivor(幸存區)的容量 (字節)(Eden區已滿)
?????????TT: 持有次數限制
???? ??? MTT : 最大持有次數限制
?--------------------------------------------------------------------------------------------------------------------------------------------------------------
?jinfo:實時地查看和調整虛擬機的各項參數。
通過java -XX:+PrintFlagsFinal查看參數默認值
---------------------------------------------------------------------------------------------------------------------------------------------------------------
jmap命令:jmap的用途是為了展示java進程的內存映射信息,或者堆內存詳情
jmap(Memory Map for Java)命令用于生成堆轉儲快照(一般稱為heapdump或dump文件)。如果不使用jmap命令,要想獲取Java堆轉儲快照還有一些比較“暴力”的手段:譬如在第2章中用過的-XX:+HeapDumpOnOutOfMemoryError參數,可以讓虛擬機在OOM異常出現之后自動生成dump文件,通過-XX:+HeapDumpOnCtrlBreak參數則可以使用【Ctrl】+【Break】鍵讓虛擬機生成dump文件,又或者在Linux系統下通過Kill -3命令發送進程退出信號“恐嚇”一下虛擬機,也能拿到dump文件。
jmap的作用并不僅僅是為了獲取dump文件,它還可以查詢finalize執行隊列,Java堆和永久代的詳細信息,如空間使用率、當前用的是哪種收集器等。
?
histo
jmap -histo pid 展示class的內存情況,可以采用jmap -histo pid >a.log(再如:jamp -histo:live 2464 >testjmap.txt)將其保存到文件中,在一段時間后使用文本對比工具,可以對必出GC回收了哪些對象。jmap -dump:format=b,file=outfile 5446可以將5446進程內存heap輸出出來到outfile文件里,在配合MAT(內存分析工具)。
展示的信息為編號,實例數,字節,類名
?
?
heap
jmap -heap pid 展示pid的整體堆信息
[root@localhost ~]# jmap -heap 5446 Attaching to process ID 5446, please wait... Debugger attached successfully. Server compiler detected. JVM version is 24.45-b08
using thread-local object allocation. Parallel GC with 10 thread(s) #10個gc線程
Heap Configuration: #堆內存初始化配置MinHeapFreeRatio = 40 #-XX:MinHeapFreeRatio設置JVM堆最小空閑比率MaxHeapFreeRatio = 70 #-XX:MaxHeapFreeRatio設置JVM堆最大空閑比率 MaxHeapSize????? = 3722444800 (3550.0MB) #-XX:MaxHeapSize=設置JVM堆的最大大小NewSize????????? = 1310720 (1.25MB) #-XX:NewSize=設置JVM堆的‘新生代’的默認大小MaxNewSize?????? = 17592186044415 MB #-XX:MaxNewSize=設置JVM堆的‘新生代’的最大大小OldSize????????? = 5439488 (5.1875MB) #-XX:OldSize=設置JVM堆的‘老生代’的大小NewRatio???????? = 2 #-XX:NewRatio=:‘新生代’和‘老生代’的大小比率SurvivorRatio??? = 8 #-XX:SurvivorRatio=設置年輕代中Eden區與Survivor區的大小比值 ?? PermSize???????? = 134217728 (128.0MB) #-XX:PermSize=<value>:設置JVM堆的‘永生代’的初始大小 ?? MaxPermSize????? = 268435456 (256.0MB) #-XX:MaxPermSize=<value>:設置JVM堆的‘永生代’的最大大小G1HeapRegionSize = 0 (0.0MB)
Heap Usage: PS Young Generation Eden Space: #Eden區內存分布capacity = 651165696 (621.0MB)used???? = 29038624 (27.693389892578125MB)free???? = 622127072 (593.3066101074219MB)4.459483074489231% used From Space: #其中一個Survivor區的內存分布capacity = 1572864 (1.5MB)used???? = 0 (0.0MB)free???? = 1572864 (1.5MB)0.0% used To Space: #另一個Survivor區的內存分布capacity = 296747008 (283.0MB)used???? = 0 (0.0MB)free???? = 296747008 (283.0MB)0.0% used PS Old Generation #當前的Old區內存分布capacity = 2481979392 (2367.0MB)used???? = 120759968 (115.16567993164062MB)free???? = 2361219424 (2251.8343200683594MB)4.865470212574594% used PS Perm Generation #當前的 “永生代” 內存分布 capacity = 268435456 (256.0MB) used???? = 139659040 (133.18923950195312MB) free???? = 128776416 (122.81076049804688MB)52.02704668045044% used
?
dump
導出的文件可以供分析用,比如jhat或者mat,以便查找內存溢出原因
假如指定live選項,那么只輸出活的對象到文件.?
jmap –dump:live,[format=b,]file=/usr/java/dump.log 5446
-finalizerinfo?打印正等候回收的對象的信息
jmap -finalizerinfo 5446
?
64位機上使用需要使用如下方式:
-permstat?打印classload和jvm?heap長久層的信息.?包含每個classloader的名字,活潑性,地址,父classloader和加載的class數量.?另外,內部String的數量和占用內存數也會打印出來
$jmap -permstat 5446
?? -F?強迫.在pid沒有相應的時候使用-dump或者-histo參數.?在這個模式下,live子參數無效.?
?? -h?|?-help?打印輔助信息?
?? -J?傳遞參數給jmap啟動的jvm.
-----------------------------------------------------------------------------------------------------------------------------
jhat命令
用途:是用來分析java堆的命令,可以將堆中的對象一html的形式顯示出來,包括對象的數組,大小等等,并支持對象查詢語言
第一步:導出堆
jmap -dump:live,file=dump.txt 5446
第二步:分析堆文件
jhat dump.txt
第三步:查看html(再輸入:http://訪問機器的ip地址:7000后:)
注意:在訪問的html下方有各種條件的查詢:
(2)從根集能引用到的對象
(3)顯示平臺包括的所有類的實例數量
(4)堆實例的分布表
?
(5)執行對象查詢語句
?
windows下按[Ctrl+C]停止
-------------------------------------------------------------------------------------------------------------------------------------------------------
jstack:java堆棧跟蹤工具
jstack(Stack Trace for Java)命令用于生成虛擬機當前時刻的線程快照(一般稱為threaddump或javadoc文件)。線程快照就是當前虛擬機內每一條線程正在執行的方法堆棧的集合,生成線程快照的主要目的是定位線程出現長時間停頓的原因,如線程間死鎖、死循環、請求外部資源導致的長時間等待等都是導致線程長時間停頓的常見原因。線程出現停頓的時候通過jstack來查看各個線程的調用堆棧,就可以知道沒有響應的線程到底在后臺做些什么事情,或者等待著什么資源。
?
jstack命令
該命令打印java線程的堆棧跟蹤,可以得知哪些線程被阻塞或正等待,以便于查找如線程死鎖的原因
用法:
jstack [ option ] pid
-F:強制產生一個線程dump
-m:打印java和native frames
-l:打印關于鎖的附加信息
jstack [-l]?5446
?
?
總結
以上是生活随笔為你收集整理的jps,jstat,jinfo,jmap,jhat,jstack工具的使用/查看Linux磁盘信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS :active 伪类
- 下一篇: i茅台预约成功可以邮寄吗?