1.JVM監(jiān)控和調優(yōu)的主要目的
-
性能優(yōu)化:通過JVM調優(yōu),可以提高Java應用程序的性能,減少響應時間,提高吞吐量,以更好地滿足用戶需求。性能優(yōu)化可以加快應用程序的執(zhí)行速度,減少延遲,提高用戶體驗。
-
內存管理:JVM負責管理Java應用程序的內存。正確的內存管理可以避免內存泄漏和內存溢出等問題,確保應用程序在長時間運行時不會耗盡內存或導致性能下降。
-
垃圾回收優(yōu)化:垃圾回收是JVM的核心功能之一,它負責釋放不再使用的對象并回收內存。通過調整垃圾回收器的參數和策略,可以減少垃圾回收的頻率和開銷,提高應用程序的響應速度。
-
資源利用率:JVM調優(yōu)可以幫助應用程序更有效地利用計算資源,包括CPU、內存和線程等。這有助于降低硬件成本,提高應用程序的伸縮性和性能。
-
穩(wěn)定性和可靠性:JVM調優(yōu)可以提高應用程序的穩(wěn)定性,降低崩潰和故障的風險。通過監(jiān)視和調整JVM的行為,可以減少應用程序中的內存泄漏、死鎖和其他潛在問題。
-
成本效益:優(yōu)化JVM性能可以減少硬件和運維成本。通過更好地利用現有資源,可以延長硬件的使用壽命,降低云計算服務的費用,從而在長期內節(jié)省資金。
????????總之,JVM調優(yōu)是確保Java應用程序在生產環(huán)境中穩(wěn)定、高性能運行的重要步驟。它需要深入理解Java虛擬機、垃圾回收機制、內存管理等方面的知識,以便根據應用程序的需求進行合適的調整和優(yōu)化。通過JVM調優(yōu),可以提高應用程序的競爭力,提供更好的用戶體驗,并減少運維成本。
2.JVM監(jiān)控和調優(yōu)常用命令
2.1jps查看正在運行的Java進程
????????jps(Java Process Status):顯示指定系統(tǒng)內所有的HotSpot虛擬機進程(查看虛擬機進程信息),可用于查詢正在運行的虛擬機進程。
基本使用語法為:jps [-q] [-mlvV] [<hostid>]
-q:僅僅顯示LVMID(local virtual machine id),即本地虛擬機唯一id。不顯示主類的名稱等
-m:輸出虛擬機進程啟動時傳遞給主類main()的參數
-l:輸出應用程序主類的全類名 或 如果進程執(zhí)行的是jar包,則輸出jar完整路徑
-v:列出虛擬機進程啟動時的JVM參數。比如:-Xms20m -Xmx50m是啟動程序指定的jvm參數。---V:表示顯示版本信息
hostid:RMI注冊表中注冊的主機名。如果想要遠程監(jiān)控主機上的 java 程序,需要安裝 jstatd
上述命令在同一個【】內的命令也可以組合使用,示例
bdpcloud@host154[/home/bdpcloud]$ jps -mlvV
10240 DbToHiveServer-5.0.jar conf/reldbtohive -Xms512m -Xmx1g -Xss64m -Xmn128m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m
2.2jstat查看JVM統(tǒng)計信息
????????jstat(JVM Statistics Monitoring Tool):用于監(jiān)視虛擬機各種運行狀態(tài)信息的命令行工具。它可以顯示本地或者遠程虛擬機進程中的類裝載、內存、垃圾收集、JIT編譯等運行數據。在沒有GUI圖形界面,只提供了純文本控制臺環(huán)境的服務器上,它將是運行期定位虛擬機性能問題的首選工具。常用于檢測垃圾回收問題以及內存泄漏問題。
基本使用語法為:jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
查看可選項:jstat -options所有參數
類裝載相關的:
-class:顯示ClassLoader的相關信息:類的裝載、卸載數量、總空間、類裝載所消耗的時間等
JIT相關的:
-compiler:顯示JIT編譯器編譯過的方法、耗時等信息
-printcompilation:輸出已經被JIT編譯的方法
垃圾回收相關的(重點):
-gc:顯示與GC相關的堆信息。包括Eden區(qū)、兩個Survivor區(qū)、老年代、永久代等的容量、已用空間、GC時間合計等信息。
-gccapacity:顯示內容與-gc基本相同,但輸出主要關注Java堆各個區(qū)域使用到的最大、最小空間。
-gcutil:顯示內容與-gc基本相同,但輸出主要關注已使用空間占總空間的百分比。
-gccause:與-gcutil功能一樣,但是會額外輸出導致最后一次或當前正在發(fā)生的GC產生的原因。
-gcnew:顯示新生代GC狀況
-gcnewcapacity:顯示內容與-gcnew基本相同,輸出主要關注使用到的最大、最小空間
-gcold:顯示老年代GC狀況
-gcoldcapacity:顯示內容與-gcold基本相同,輸出主要關注使用到的最大、最小空間
其他參數說明:
[-t] :?可以在輸出信息前加上一個Timestamp列,顯示程序的運行時間。單位:秒
[-h<lines>]:可以在周期性數據輸出時,輸出多少行數據后輸出一個表頭信息
<vmid>:jps中的JVM進程
[<count>]]:用于指定輸出統(tǒng)計數據的周期,單位為毫秒。即:查詢間隔
<count>]]:用于指定查詢的總次數
jstat -class查看
bdpcloud@host154[/home/bdpcloud]$ jstat -class 7872
Loaded ?Bytes ?Unloaded ?Bytes ? ? Time ??
?23203 45413.4 ? ? ? ?0 ? ? 0.0 ? ? 245.35
jstat -compiler查看
bdpcloud@host154[/home/bdpcloud]$ jstat -compiler 7872
Compiled Failed Invalid ? Time ? FailedType FailedMethod
? ?27280 ? ? ?8 ? ? ? 0 ?1544.76 ? ? ? ? ?1 com/alibaba/csp/sentinel/util/TimeUtil$1 run
jstat -printcompilation 查看(輸出已經被JIT編譯的方法)
bdpcloud@host154[/home/bdpcloud]$ jstat -printcompilation 7872
Compiled ?Size ?Type Method
? ?27280 ? ?456 ? ?1 redis/clients/jedis/JedisFactory validateObject
jstat -gc查看(基于內存大小分析)
示例:
bdpcloud@host154[/home/bdpcloud]$ jstat -gc 7873
?S0C ? ?S1C ? ?S0U ? ?S1U ? ? ?EC ? ? ? EU ? ? ? ?OC ? ? ? ? OU ? ? ? MC ? ? MU ? ?CCSC ? CCSU ? YGC ? ? YGCT ? ?FGC ? ?FGCT ? ? GCT ??
10752.0 10752.0 6792.1 ?0.0 ? 153088.0 22379.3 ? 175104.0 ? 16293.0 ? 53760.0 50572.8 7168.0 6508.4 ? ? 14 ? ?5.373 ? 2 ? ? ?4.079 ? ?9.452
也可以指定時間,次數,打印總次數輸出
bdpcloud@host154[/home/bdpcloud]$ jstat -gc -t 7873 1000 100文章來源:http://www.zghlxwxcb.cn/news/detail-696779.html
參數說明:
S0C:表示年輕代(Young Generation)中的 Survivor 0 區(qū)的容量(以KB為單位)。
S1C:表示年輕代中的 Survivor 1 區(qū)的容量(以KB為單位)。
S0U:表示年輕代中 Survivor 0 區(qū)的使用量(以KB為單位)。
S1U:表示年輕代中 Survivor 1 區(qū)的使用量(以KB為單位)。
EC:表示年輕代中 Eden 區(qū)的容量(以KB為單位)。
EU:表示年輕代中 Eden 區(qū)的使用量(以KB為單位)。
OC:表示老年代(Old Generation)的容量(以KB為單位)。
OU:表示老年代的使用量(以KB為單位)。
MC:表示方法區(qū)(Metaspace)的容量(以KB為單位)。
MU:表示方法區(qū)的使用量(以KB為單位)。
CCSC:表示壓縮類空間(Compressed Class Space)的容量(以KB為單位)。
CCSU:表示壓縮類空間的使用量(以KB為單位)。
YGC:表示年輕代垃圾回收的次數。
YGCT:表示年輕代垃圾回收所花費的總時間&#x文章來源地址http://www.zghlxwxcb.cn/news/detail-696779.html
到了這里,關于JVM監(jiān)控和調優(yōu)常用命令jps|jstat|jinfo|jmap|jhat|jstack實戰(zhàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!