中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

打印GC日志排查問題怎么解決

發布時間:2021-12-21 10:26:45 來源:億速云 閱讀:234 作者:柒染 欄目:大數據

這篇文章將為大家詳細講解有關打印GC日志排查問題怎么解決,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

在工作當中,有時候我們會需要打印GC的相關信息來定位問題。該如何做呢?

先來看個示例,

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));
    }
 

直接運行,結果如下,

cost: 135
cost: 85
 

你應該覺得奇怪,同樣的往一個list插入100萬條數據,為啥第一個耗時比較久?

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

-XX:+PrintGCDetails
 

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

再次運行,輸出如下,

[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的次數比第二次多,所以運行時間比較長。

那么上面打印出來的日志,具體是什么意思呢?已經有人畫出了很詳細的圖,我借來用下,

打印GC日志排查問題怎么解決


 

 

打印GC日志排查問題怎么解決


    

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

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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

gc
AI

清涧县| 虎林市| 太康县| 高雄市| 崇礼县| 页游| 小金县| 定陶县| 建平县| 通渭县| 遂川县| 左权县| 奉节县| 电白县| 二连浩特市| 资兴市| 和静县| 鹤岗市| 松滋市| 通州区| 盖州市| 桦南县| 泗水县| 章丘市| 六盘水市| 青铜峡市| 永仁县| 镇巴县| 岚皋县| 隆安县| 荥阳市| 库伦旗| 昌江| 盐边县| 武宁县| 松江区| 香河县| 迭部县| 遂平县| 太仆寺旗| 合阳县|