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

溫馨提示×

溫馨提示×

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

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

Java?JVM虛擬機調優的方法

發布時間:2022-08-17 09:55:13 來源:億速云 閱讀:119 作者:iii 欄目:開發技術

今天小編給大家分享一下Java JVM虛擬機調優的方法的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

jmap查看內存信息

jmap histo /pid > ./log.txt :查看某一進程實例個數,占用內存的字節數,以及所屬的類

Java?JVM虛擬機調優的方法

jmap -heap /pid :查看堆信息

Java?JVM虛擬機調優的方法

Java?JVM虛擬機調優的方法

jmap ‐dump:format=b,file=app.hprof /pid

Java?JVM虛擬機調優的方法

Java?JVM虛擬機調優的方法

通過jvisualvm命令啟動jvm可視化管理界面可導入dump文件進行分析:查看類的實例

Java?JVM虛擬機調優的方法

jstack

分析死鎖:寫一段死鎖代碼

public class DeadLockTest {
    private final static Object lock1 = new Object();
    private final static Object lock2 = new Object();
    public static void main(String[] args) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock1) {
                    try {
                        System.out.println(Thread.currentThread().getName() + ": get the lock1");
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (lock2) {
                        System.out.println(Thread.currentThread().getName() + ": get the lock2");
                    }
                }
            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                synchronized (lock2) {
                    try {
                        System.out.println(Thread.currentThread().getName() + ": get the lock2");
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    synchronized (lock1) {
                        System.out.println(Thread.currentThread().getName() + ": get the lock1");
                    }
                }
            }
        }).start();
    }
}

Java?JVM虛擬機調優的方法

"Thread-1" 線程名;prio=5 優先級=5; tid=0x0000000019aa9000線程id; nid=0x6c4線程對應的本地線程標識nid; java.lang.Thread.State: BLOCKED 線程狀態

啟動 jvisualvm命令選擇對應的進程即可查看到死鎖的線程

Java?JVM虛擬機調優的方法

Jstack分析CPU使用率高的線程堆棧信息

啟動一個while循環,使CPU一直工作

1、top -p /pid:查看進程占用資源情況

Java?JVM虛擬機調優的方法

顯而易見該進程導致CPU使用率幾乎100%。

2、按H查看進程內每個線程占用資源的情況

Java?JVM虛擬機調優的方法

3、找到CPU使用近100%的PID這列,表示線程tid為5027,通過轉換器轉為16進制為13a3,

4、通過jstack命令執行jstack 5026|grep -A 10 13a3,即可得到線程tid為13a3的堆棧信息,進而找到導致CPU占用100%的執行行號

Java?JVM虛擬機調優的方法

jinfo查看jvm系統參數

jinfo -flags /pid :查看jvm參數

Java?JVM虛擬機調優的方法

jinfo -sysprops /pid:查看java的系統參數

Java?JVM虛擬機調優的方法

Jstat查看堆內存使用和類加載的數量信息

jstat -gc /pid:垃圾回收統計

Java?JVM虛擬機調優的方法

S0C:第一個幸存區的大小,單位KB; S1C:第二個幸存區的大小; S0U:第一個幸存區的使用大小;S1U:第二個幸存區的使用大小; EC:伊甸園區的大小; EU:伊甸園區的使用大小; OC:老年代大小; OU:老年代使用大小; MC:方法區大小(元空間) ;MU:方法區使用大小; CCSC:壓縮類空間大小; CCSU:壓縮類空間使用大小; YGC:年輕代垃圾回收次數; YGCT:年輕代垃圾回收消耗時間,單位s; FGC:老年代垃圾回收次數; FGCT:老年代垃圾回收消耗時間,單位s; GCT:垃圾回收消耗總時間,單位s

jstat -gccapacity/pid: 堆內存統計

Java?JVM虛擬機調優的方法

NGCMN:新生代最小容量;NGCMX:新生代最大容量;NGC:當前新生代容量;S0C:第一個幸存區大小;S1C:第二個幸存區的大小;EC:伊甸園區的大小;OGCMN:老年代最小容量;OGCMX:老年代最大容量;OGC:當前老年代大小;OC:當前老年代大小;MCMN:最小元數據容量;MCMX:最大元數據容量;MC:當前元數據空間大小;CCSMN:最小壓縮類空間大小;CCSMX:最大壓縮類空間大小;CCSC:當前壓縮類空間大小;YGC:年輕代gc次數;FGC:老年代GC次數

jstat -gcnew /pid:查看新生代垃圾回收統計

Java?JVM虛擬機調優的方法

TT:對象在新生代存活的次數; MTT:對象在新生代存活的最大次數; DSS:期望的幸存區大小

jstat -gcnewcapacity/pid:查看新生代內存容量

Java?JVM虛擬機調優的方法

S0CMX:最大幸存1區大小;S1CMX:最大幸存2區大小;ECMX:最大伊甸園區大小

jstat -gcold /pid:查看老年代垃圾回收統計

Java?JVM虛擬機調優的方法

jstat -gcoldcapacity/pid:查看老年代內存容量

Java?JVM虛擬機調優的方法

jstat -gcmetacapacity/pid:查看元數據空間統計

Java?JVM虛擬機調優的方法

通過jstat gc -pid命令可以優化java應用的啟動參數,jstat -gc pid 1000 10 (每隔1秒執行1次命令,共執行10次)預估每秒Eden區會新增多少對象,可根據具體結果調整時間。優化思路其實簡單來說就是盡量讓每次Young GC后的存活對象小于Survivor區域的50%,都留存在年輕代里。盡量別讓對象進入老年代。盡量減少Full GC的頻率,避免頻繁Full GC對JVM性能的影響。

內存泄漏

對于一些老舊的數據,比如jvm級別的內存沒有及時清理,導致數據越堆越多,時間長了就會頻繁導致full gc,從而導致內存泄漏。可以使用成熟緩存架構ehcache,他們有實現LRU數據淘汰策略。

以上就是“Java JVM虛擬機調優的方法”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

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

AI

淅川县| 灵川县| 沁水县| 宁化县| 萝北县| 四川省| 锦屏县| 鄂托克前旗| 凤山市| 龙陵县| 沾化县| 额济纳旗| 景德镇市| 文昌市| 全椒县| 凉城县| 宁明县| 麻阳| 东海县| 黔江区| 苍南县| 大足县| 洛阳市| 广安市| 堆龙德庆县| 海林市| 柘城县| 赤壁市| 白银市| 定南县| 巴中市| 邹城市| 金阳县| 永顺县| 确山县| 盐城市| 大同市| 乐业县| 双牌县| 五峰| 垫江县|