最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

聊聊如何打印GC日志排查的問題

 更新時(shí)間:2021年09月14日 09:12:40   作者:犀牛飼養(yǎng)員  
這篇文章主要介紹了聊聊如何打印GC日志排查的問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

如何打印GC日志排查問題

在工作當(dāng)中,有時(shí)候我們會(huì)需要打印GC的相關(guān)信息來定位問題。該如何做呢?

先來看個(gè)示例

public static void main(String[] args) {
        List<Integer> list0 = new ArrayList<>();
        long start0 = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            list0.add(i);
        }
        System.out.println("cost: " + (System.currentTimeMillis() - start0));

        List<Integer> list1 = new ArrayList<>();
        long start1 = System.currentTimeMillis();
        for (int i = 0; i < 1000000; i++) {
            list1.add(i);
        }
        System.out.println("cost: " + (System.currentTimeMillis() - start1));
    }

直接運(yùn)行,結(jié)果如下

cost: 135

cost: 85

你應(yīng)該覺得奇怪,同樣的往一個(gè)list插入100萬條數(shù)據(jù),為啥第一個(gè)耗時(shí)比較久?

這種時(shí)候,有經(jīng)驗(yàn)的工程師應(yīng)該能馬上懷疑是GC的問題,我們可以通過在運(yùn)行時(shí)添加JVM參數(shù)來打印程序運(yùn)行時(shí)的GC情況。

-XX:+PrintGCDetails

如果是使用IDEA來運(yùn)行,可以在 run configurations 的 VM options添加上面的參數(shù)即可。

再次運(yùn)行,輸出如下

[GC (Allocation Failure) [PSYoungGen: 1536K->512K(1536K)] 1884K->1234K(262144K), 0.0009030 secs] [Times: user=0.01 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 1302K->1017K(2560K)] 2025K->1948K(263168K), 0.0012290 secs] [Times: user=0.01 sys=0.01, real=0.01 secs]
[GC (Allocation Failure) [PSYoungGen: 2553K->1504K(3072K)] 3484K->3051K(263680K), 0.0017210 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 3040K->2033K(4608K)] 4587K->4228K(265216K), 0.0023170 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 4593K->2560K(5120K)] 8195K->6681K(265728K), 0.0249700 secs] [Times: user=0.31 sys=0.00, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 5120K->3584K(6656K)] 11352K->11408K(267264K), 0.0241680 secs] [Times: user=0.30 sys=0.01, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 6656K->3296K(7680K)] 17645K->17909K(268288K), 0.0349010 secs] [Times: user=0.45 sys=0.00, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 6368K->3328K(10240K)] 25729K->25825K(270848K), 0.0314260 secs] [Times: user=0.40 sys=0.00, real=0.03 secs]
cost: 137
[GC (Allocation Failure) [PSYoungGen: 8166K->4469K(10240K)] 30663K->30103K(270848K), 0.0285370 secs] [Times: user=0.36 sys=0.01, real=0.03 secs]
[GC (Allocation Failure) [PSYoungGen: 9166K->3785K(13312K)] 34800K->33427K(273920K), 0.0226780 secs] [Times: user=0.28 sys=0.01, real=0.02 secs]
[GC (Allocation Failure) [PSYoungGen: 11465K->6142K(13824K)] 41107K->38511K(274432K), 0.0065540 secs] [Times: user=0.08 sys=0.00, real=0.00 secs]
[GC (Allocation Failure) [PSYoungGen: 13822K->7837K(19456K)] 46191K->44246K(280064K), 0.0099720 secs] [Times: user=0.11 sys=0.01, real=0.01 secs]
cost: 79

所以你大概明白了,第一次minor gc的次數(shù)比第二次多,所以運(yùn)行時(shí)間比較長。

那么上面打印出來的日志,具體是什么意思呢?

已經(jīng)有人畫出了很詳細(xì)的圖,我借來用下

在這里插入圖片描述

在這里插入圖片描述

如果想了解 GC 的更多的內(nèi)容,可以看看 oracle 官方對于 HosSpotJVM GC的詳細(xì)介紹

小結(jié)一下

了解GC日志的打印方法,并且能看懂GC日志,對于查找定位問題非常有幫助的。

我自己就遇到過生產(chǎn)上一個(gè)CPU飆到好幾百的情況,打印GC日志發(fā)現(xiàn) JVM 一直在 fullGC,而且每次GC之后內(nèi)存基本沒有變化,從而定位到應(yīng)用程序可能存在內(nèi)存泄漏的問題。

gc日志打印時(shí)間戳

今天發(fā)現(xiàn)在jvm參數(shù)中,用-XX:+PrintGCDateStamps 替換 -XX:PrintGCTimeStamps,就可以打印真實(shí)的gc時(shí)間信息,而不像現(xiàn)在相對啟動(dòng)時(shí)間的秒數(shù)。

有了真實(shí)時(shí)間戳,可以方便與應(yīng)用的log做對比,便于分析排查問題。

線下實(shí)驗(yàn)過,真實(shí)有效gc日志打印時(shí)間戳

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

相關(guān)文章

  • 淺談SSH框架中spring的原理

    淺談SSH框架中spring的原理

    下面小編就為大家?guī)硪黄獪\談SSH框架中spring的原理。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01
  • 解決springboot無法注入JpaRepository的問題

    解決springboot無法注入JpaRepository的問題

    這篇文章主要介紹了解決springboot無法注入JpaRepository的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 詳解如何在spring中創(chuàng)建全局異常處理器

    詳解如何在spring中創(chuàng)建全局異常處理器

    全局異常處理器在實(shí)際項(xiàng)目開發(fā)中是一個(gè)很重要的工具,對保證代碼的正常運(yùn)行有很重要的作用,所以下面來講一下如何在spring中創(chuàng)建一個(gè)全局異常處理器,感興趣的的朋友可以參考下
    2023-12-12
  • Spring?Boot實(shí)現(xiàn)文件上傳下載

    Spring?Boot實(shí)現(xiàn)文件上傳下載

    這篇文章主要為大家詳細(xì)介紹了Spring?Boot實(shí)現(xiàn)文件上傳下載,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • 打包部署若依(RuoYi)SpringBoot后端和Vue前端圖文教程

    打包部署若依(RuoYi)SpringBoot后端和Vue前端圖文教程

    若依是一個(gè)使用Spring Boot作為后端和Vue.js作為前端的全棧應(yīng)用開發(fā)平臺,下面這篇文章主要給大家介紹了關(guān)于打包部署若依(RuoYi)SpringBoot后端和Vue前端的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • Mybatis常用注解中的SQL注入實(shí)例詳解

    Mybatis常用注解中的SQL注入實(shí)例詳解

    MyBatis是一款優(yōu)秀的持久層框架,它支持定制化 SQL(靈活)、存儲過程(PLSQL模塊化的組件,數(shù)據(jù)庫的一部分)以及高級映射(表映射為Bean也可以將Bean映射為表),下面這篇文章主要給大家介紹了關(guān)于Mybatis常用注解中的SQL注入的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • spring cloud alibaba Nacos 注冊中心搭建過程詳解

    spring cloud alibaba Nacos 注冊中心搭建過程詳解

    這篇文章主要介紹了spring cloud alibaba Nacos 注冊中心搭建過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • MybatisPlus實(shí)現(xiàn)對象嵌套關(guān)聯(lián)查詢一對多List集合查詢

    MybatisPlus實(shí)現(xiàn)對象嵌套關(guān)聯(lián)查詢一對多List集合查詢

    這篇文章主要介紹了MybatisPlus實(shí)現(xiàn)對象嵌套關(guān)聯(lián)查詢一對多List集合查詢,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Java 異常處理小結(jié),從入門到精通

    Java 異常處理小結(jié),從入門到精通

    這篇文章主要介紹了Java 異常處理小結(jié),從入門到精通,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Java中的Enum枚舉使用方法解析

    Java中的Enum枚舉使用方法解析

    這篇文章主要介紹了Java中的Enum枚舉使用方法解析,枚舉是一種數(shù)據(jù)類型,和int、double、string等類型相似,枚舉用于聲明一組命名的常數(shù),當(dāng)一個(gè)變量有幾種可能的取值時(shí),可以將它定義為枚舉類型,需要的朋友可以參考下
    2023-11-11

最新評論

大兴区| 电白县| 白河县| 莲花县| 广元市| 德化县| 阳信县| 黄浦区| 米林县| 勐海县| 万山特区| 华宁县| 通州市| 海宁市| 崇信县| 科尔| 湘潭市| 巴南区| 铜川市| 宁远县| 珠海市| 利辛县| 哈巴河县| 贡嘎县| 南乐县| 加查县| 成安县| 崇州市| 蒲城县| 金平| 启东市| 青州市| 古浪县| 萝北县| 志丹县| 县级市| 锡林郭勒盟| 炎陵县| 万山特区| 酒泉市| 玛曲县|