欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何查看java進(jìn)程gc情況

 更新時間:2025年07月02日 09:17:05   作者:alden_ygq  
這篇文章主要介紹了如何查看java進(jìn)程gc情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

在 Java 應(yīng)用性能調(diào)優(yōu)中,監(jiān)控垃圾回收(GC)情況是關(guān)鍵環(huán)節(jié)。

以下是查看 Java 進(jìn)程 GC 狀態(tài)的常用方法、工具及最佳實踐:

一、命令行工具實時監(jiān)控

1. jstat(JDK 自帶)

功能:實時顯示 JVM 內(nèi)存和 GC 統(tǒng)計信息。

語法

jstat -gc <pid> [間隔時間(ms)] [次數(shù)]

常用參數(shù)

  • -gc:顯示 GC 相關(guān)統(tǒng)計。
  • -gcutil:顯示 GC 利用率(百分比)。

示例

jstat -gc 12345 1000  # 每 1000ms 輸出一次 GC 統(tǒng)計

輸出字段含義

S0C:Survivor0 區(qū)容量(KB)
S1C:Survivor1 區(qū)容量
S0U:Survivor0 區(qū)已使用
EC:Eden 區(qū)容量
EU:Eden 區(qū)已使用
OC:老年代容量
OU:老年代已使用
MC:元空間容量
MU:元空間已使用
YGC:年輕代 GC 次數(shù)
YGCT:年輕代 GC 總耗時(秒)
FGC:Full GC 次數(shù)
FGCT:Full GC 總耗時
GCT:GC 總耗時

2. jstat 進(jìn)階用法

監(jiān)控 GC 頻率和內(nèi)存增長趨勢

# 每 5 秒輸出一次 GC 利用率,持續(xù)監(jiān)控
jstat -gcutil 12345 5000

輸出示例

 S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
0.00  99.81  93.21  42.35  92.83  89.75    126    0.536     1    0.024    0.560

關(guān)鍵指標(biāo)

  • E(Eden 區(qū)使用率)接近 100% 時觸發(fā) YGC。
  • O(老年代使用率)持續(xù)增長可能導(dǎo)致 FGC。
  • YGC 和 FGC 頻率過高(如每分鐘多次)需警惕性能問題。

二、GC 日志分析

1. 啟用 GC 日志

在 JVM 啟動參數(shù)中添加:

java -XX:+PrintGCDetails \
     -XX:+PrintGCDateStamps \
     -XX:+PrintHeapAtGC \
     -Xloggc:/path/to/gc.log \
     -jar your-app.jar

參數(shù)說明

  • PrintGCDetails:打印 GC 詳細(xì)信息。
  • PrintGCDateStamps:添加 GC 發(fā)生的時間戳。
  • Xloggc:指定日志文件路徑。

2. 手動觸發(fā) GC 并查看日志

jcmd <pid> GC.run  # 手動觸發(fā) Full GC
tail -f /path/to/gc.log  # 實時查看日志

3. 日志分析工具

GCEasy

上傳 GC 日志到 GCEasy,自動生成分析報告,包含:

  • GC 頻率和耗時分布。
  • 堆內(nèi)存使用趨勢。
  • 推薦的 JVM 參數(shù)優(yōu)化建議。

GCViewer

本地工具,可視化 GC 日志:

java -jar gcviewer-1.36.jar /path/to/gc.log

三、可視化工具監(jiān)控 GC

1. VisualVM(JDK 自帶)

啟動方式

jvisualvm  # JDK 8 及以前版本自帶

監(jiān)控步驟

  • 選擇目標(biāo) Java 進(jìn)程 → 點(diǎn)擊「Monitor」選項卡。
  • 查看「Heap」和「Perm Gen」變化趨勢。
  • 點(diǎn)擊「Perform GC」手動觸發(fā) GC。

2. Java Mission Control (JMC) + JFR

啟動 JFR 記錄

jcmd <pid> JFR.start name=GCRecording settings=profile duration=5m filename=gc.jfr

分析 GC 事件

  • 使用 JMC 打開 .jfr 文件。
  • 查看「Garbage Collections」視圖,分析 GC 類型、耗時和內(nèi)存變化。

四、生產(chǎn)環(huán)境低開銷監(jiān)控方案

1. Prometheus + Grafana

配置 JMX Exporter

java -javaagent:/path/to/jmx_prometheus_javaagent.jar=9090:/path/to/config.yaml -jar your-app.jar

Grafana 儀表盤

導(dǎo)入預(yù)定義的 JVM 監(jiān)控儀表盤(如 ID 14548),查看:

  • 堆內(nèi)存各區(qū)域使用情況。
  • GC 頻率和耗時趨勢。
  • 類加載 / 卸載數(shù)量。

2. Arthas(在線診斷工具)

查看 GC 統(tǒng)計

dashboard  # 實時查看 JVM 狀態(tài),包括 GC 信息

監(jiān)控特定類的 GC 情況

monitor -c 5 java.lang.String  # 每 5 秒統(tǒng)計 String 對象的 GC 情況

五、GC 問題排查思路

1. 高頻 Full GC 排查

檢查老年代增長趨勢

jstat -gcoldcapacity <pid> 1000  # 監(jiān)控老年代容量變化

分析大對象分配

使用 JFR 記錄「Object Allocation in New TLAB」事件,找出頻繁創(chuàng)建大對象的代碼。

2. 長時間 STW(Stop The World)

檢查 GC 類型

通過 GC 日志確認(rèn)是否為 CMS 或 G1 的 Full GC 導(dǎo)致。

優(yōu)化建議

  • 增大堆內(nèi)存(-Xmx)。
  • 調(diào)整垃圾收集器(如使用 G1 或 ZGC)。

3. 內(nèi)存泄漏預(yù)警

對比多次堆轉(zhuǎn)儲

# 間隔 1 小時生成兩次堆轉(zhuǎn)儲
jmap -dump:format=b,file=heap1.hprof <pid>
sleep 3600
jmap -dump:format=b,file=heap2.hprof <pid>

使用 MAT 對比兩個堆轉(zhuǎn)儲,找出持續(xù)增長的對象類型。

六、GC 性能指標(biāo)參考

指標(biāo)健康值參考問題表現(xiàn)
YGC 頻率幾分鐘到幾十分鐘一次每秒多次
YGC 耗時通常 < 100ms超過 500ms
FGC 頻率幾小時到幾天一次每小時多次
FGC 耗時通常 < 500ms超過 1s
老年代使用率穩(wěn)定在 30%-70%持續(xù)增長接近 100%
GC 總耗時占比< 5%超過 10%

七、JVM 參數(shù)優(yōu)化建議

根據(jù)應(yīng)用特點(diǎn)調(diào)整 GC 相關(guān)參數(shù):

堆內(nèi)存分配

-Xms2g -Xmx2g  # 堆內(nèi)存初始值和最大值一致,避免動態(tài)調(diào)整

新生代比例

-XX:NewRatio=2  # 老年代:新生代 = 2:1

垃圾收集器選擇

# G1 適合大內(nèi)存(> 8GB)應(yīng)用
-XX:+UseG1GC -XX:MaxGCPauseMillis=200

# ZGC 適合極低延遲要求(< 10ms STW)
-XX:+UseZGC

通過以上方法,可全面監(jiān)控 Java 進(jìn)程的 GC 狀態(tài),及時發(fā)現(xiàn)并解決內(nèi)存泄漏、GC 頻繁等性能問題。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring Boot中日志管理與異常處理實踐指南

    Spring Boot中日志管理與異常處理實踐指南

    本文系統(tǒng)化講解SpringBoot日志管理與異常處理,涵蓋Logback配置、分層異常處理、上下文記錄及ELK集成,強(qiáng)調(diào)日志分級、自定義異常設(shè)計,增強(qiáng)應(yīng)用穩(wěn)定性與可維護(hù)性,感興趣的朋友跟隨小編一起看看吧
    2025-06-06
  • springboot亂碼問題解決方案

    springboot亂碼問題解決方案

    這篇文章主要介紹了springboot亂碼問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • Kotlin與Java的主客觀對比分析

    Kotlin與Java的主客觀對比分析

    這篇文章主要介紹了Kotlin與Java的主客觀對比分析,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • elasticsearch索引創(chuàng)建create?index集群matedata更新

    elasticsearch索引創(chuàng)建create?index集群matedata更新

    這篇文章主要介紹了elasticsearch索引創(chuàng)建create?index及集群matedata更新,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Java 1.0和Java 1.1 的IO類的比較

    Java 1.0和Java 1.1 的IO類的比較

    Java庫的IO分為輸入/輸出兩部分。早期的Java 1.0版本的輸入系統(tǒng)是InputStream及其子類,輸出系統(tǒng)是OutputStream及其子類。后來的Java 1.1版本對IO系統(tǒng)進(jìn)行了重新設(shè)計。本分對此做了分析和比較,有利于學(xué)習(xí),最后給出了例子。
    2013-11-11
  • Java?項目中使用遞歸的小結(jié)

    Java?項目中使用遞歸的小結(jié)

    在 Java 中,遞歸是指在方法的定義中調(diào)用自身的過程,遞歸是基于方法調(diào)用棧的原理實現(xiàn)的:當(dāng)一個方法被調(diào)用時,會在調(diào)用棧中創(chuàng)建一個對應(yīng)的棧幀,包含方法的參數(shù)、局部變量和返回地址等信息,這篇文章主要介紹了Java?項目中對使用遞歸的理解分享,需要的朋友可以參考下
    2024-07-07
  • Java14發(fā)布了,再也不怕NullPointerException了

    Java14發(fā)布了,再也不怕NullPointerException了

    這篇文章主要介紹了Java14發(fā)布了,再也不怕NullPointerException了,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2020-03-03
  • MyBatis-Plus數(shù)據(jù)庫配置與數(shù)據(jù)源整合方案

    MyBatis-Plus數(shù)據(jù)庫配置與數(shù)據(jù)源整合方案

    本文詳細(xì)介紹了在MyBatis-Plus中進(jìn)行數(shù)據(jù)庫配置與數(shù)據(jù)源整合的常見方法,包括單數(shù)據(jù)源和多數(shù)據(jù)源的配置步驟,以及如何使用SpringBoot的自動配置和手動配置來管理數(shù)據(jù)源,通過合理的配置,開發(fā)者可以簡化數(shù)據(jù)庫操作,實現(xiàn)高效的數(shù)據(jù)庫管理和復(fù)雜的應(yīng)用架構(gòu)
    2025-02-02
  • 詳解如何為SpringBoot Web應(yīng)用的日志方便追蹤

    詳解如何為SpringBoot Web應(yīng)用的日志方便追蹤

    在Web應(yīng)用程序領(lǐng)域,有效的請求監(jiān)控和可追溯性對于維護(hù)系統(tǒng)完整性和診斷問題至關(guān)重要,SpringBoot是一種用于構(gòu)建Java應(yīng)用程序的流行框架,在本文中,我們探討了在SpringBoot中向日志添加唯一ID的重要性,需要的朋友可以參考下
    2023-11-11
  • RxJava中多種場景的實現(xiàn)總結(jié)

    RxJava中多種場景的實現(xiàn)總結(jié)

    這篇文章給大家詳細(xì)介紹了RxJava中多種場景的實現(xiàn),對大家學(xué)習(xí)使用RxJava具有一定的參考借鑒價值,有需要的朋友們可以參考學(xué)習(xí),下面來一起看看吧。
    2016-10-10

最新評論