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

如何使用java代碼獲取JVM信息

 更新時(shí)間:2025年04月14日 09:00:53   作者:香吧香  
這篇文章主要介紹了使用java代碼獲取JVM信息的相關(guān)操作代碼,代碼簡(jiǎn)單易懂,感興趣的朋友一起看看吧

轉(zhuǎn)載請(qǐng)注明出處:

最近在環(huán)境中定位服務(wù)問(wèn)題,由于服務(wù)使用的docker部署的,且使用的docker鏡像,在啟動(dòng)之后,容器內(nèi)沒(méi)有jdk相關(guān)的工具【jstat、jmap等等】;于是采用 在項(xiàng)目中使用java類獲取jvm相關(guān)信息,以下是測(cè)試的示例:

import java.lang.management.ManagementFactory;  
import java.lang.management.MemoryMXBean;  
import java.lang.management.MemoryUsage;  
import java.lang.management.GarbageCollectorMXBean;  
import java.lang.management.MemoryPoolMXBean;  
import java.lang.management.ThreadMXBean;  
import java.util.List;  
public class GCInfoDemo {  
    public static void main(String[] args) {  
        // 獲取內(nèi)存管理 bean  
        MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();  
        MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();  
        MemoryUsage nonHeapMemoryUsage = memoryMXBean.getNonHeapMemoryUsage();  
        // 打印內(nèi)存信息  
        System.out.println("Heap Memory Usage:");  
        System.out.println("  Init: " + heapMemoryUsage.getInit() / (1024 * 1024) + " MB");  
        System.out.println("  Used: " + heapMemoryUsage.getUsed() / (1024 * 1024) + " MB");  
        System.out.println("  Committed: " + heapMemoryUsage.getCommitted() / (1024 * 1024) + " MB");  
        System.out.println("  Max: " + heapMemoryUsage.getMax() / (1024 * 1024) + " MB");  
        System.out.println("\nNon-Heap Memory Usage:");  
        System.out.println("  Init: " + nonHeapMemoryUsage.getInit() / (1024 * 1024) + " MB");  
        System.out.println("  Used: " + nonHeapMemoryUsage.getUsed() / (1024 * 1024) + " MB");  
        System.out.println("  Committed: " + nonHeapMemoryUsage.getCommitted() / (1024 * 1024) + " MB");  
        System.out.println("  Max: " + nonHeapMemoryUsage.getMax() / (1024 * 1024) + " MB");  
        // 獲取垃圾回收回收器 bean 的列表  
        List<GarbageCollectorMXBean> gcBeans = ManagementFactory.getGarbageCollectorMXBeans();  
        System.out.println("\nGarbage Collectors:");  
        for (GarbageCollectorMXBean gcBean : gcBeans) {  
            System.out.println("  Name: " + gcBean.getName());  
            System.out.println("  Number of collections: " + gcBean.getCollectionCount());  
            System.out.println("  Total time spent in collections: " + gcBean.getCollectionTime() + " ms");  
        }  
        // 打印內(nèi)存池信息  
        System.out.println("\nMemory Pools:");  
        for (MemoryPoolMXBean memoryPool : ManagementFactory.getMemoryPoolMXBeans()) {  
            System.out.println("  Name: " + memoryPool.getName());  
            System.out.println("  Usage: " + memoryPool.getUsage());  
        }  
        // 獲取線程管理 bean  
        ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean();  
        // 獲取所有線程 ID  
        long[] threadIds = threadMXBean.getAllThreadIds();  
        System.out.println("\nThreads Information:");  
        for (long threadId : threadIds) {  
            System.out.println("  Thread ID: " + threadId);  
            System.out.println("  Thread Name: " + threadMXBean.getThreadInfo(threadId).getThreadName());  
            System.out.println("  Thread State: " + threadMXBean.getThreadInfo(threadId).getThreadState());  
        }  
        // 檢查死鎖線程  
        long[] deadlockedThreads = threadMXBean.findDeadlockedThreads();  
        if (deadlockedThreads != null) {  
            System.out.println("\nDeadlocked Threads:");  
            for (long deadlockedThreadId : deadlockedThreads) {  
                System.out.println("  Deadlocked Thread ID: " + deadlockedThreadId);  
                System.out.println("  Thread Name: " + threadMXBean.getThreadInfo(deadlockedThreadId).getThreadName());  
            }  
        } else {  
            System.out.println("\nNo deadlocked threads found.");  
        }  
    }  
}
  • 獲取GC信息

    • 通過(guò)ManagementFactory.getGarbageCollectorMXBeans()獲取所有垃圾回收器的監(jiān)控Bean。

    • 每個(gè)GarbageCollectorMXBean提供:

      • getName():GC算法名稱(如G1 Young Generation

      • getCollectionCount():回收次數(shù)

      • getCollectionTime():累計(jì)耗時(shí)(毫秒)

2.打印當(dāng)前線程信息:

    • 使用 ThreadMXBean 獲取當(dāng)前線程的所有 ID,并通過(guò) getThreadInfo 方法獲取每個(gè)線程的信息,包括線程名字和狀態(tài)。

3.檢查死鎖線程:

    • 使用 findDeadlockedThreads 方法檢查 JVM 中的死鎖情況。如果有死鎖線程,則輸出這些線程的 ID 和名稱。如果沒(méi)有,則輸出相應(yīng)的消息。
Heap Memory Usage:
  Init: 508 MB
  Used: 10 MB
  Committed: 487 MB
  Max: 7205 MB
Non-Heap Memory Usage:
  Init: 2 MB
  Used: 4 MB
  Committed: 7 MB
  Max: 0 MB
Garbage Collectors:
  Name: PS Scavenge
  Number of collections: 0
  Total time spent in collections: 0 ms
  Name: PS MarkSweep
  Number of collections: 0
  Total time spent in collections: 0 ms
Memory Pools:
  Name: Code Cache
  Usage: init = 2555904(2496K) used = 1235968(1207K) committed = 2555904(2496K) max = 251658240(245760K)
  Name: Metaspace
  Usage: init = 0(0K) used = 3597432(3513K) committed = 4980736(4864K) max = -1(-1K)
  Name: Compressed Class Space
  Usage: init = 0(0K) used = 392584(383K) committed = 524288(512K) max = 1073741824(1048576K)
  Name: PS Eden Space
  Usage: init = 133169152(130048K) used = 10914704(10658K) committed = 133169152(130048K) max = 2789212160(2723840K)
  Name: PS Survivor Space
  Usage: init = 22020096(21504K) used = 0(0K) committed = 22020096(21504K) max = 22020096(21504K)
  Name: PS Old Gen
  Usage: init = 355467264(347136K) used = 0(0K) committed = 355467264(347136K) max = 5666504704(5533696K)
Threads Information:
  Thread ID: 6
  Thread Name: Monitor Ctrl-Break
  Thread State: RUNNABLE
  Thread ID: 5
  Thread Name: Attach Listener
  Thread State: RUNNABLE
  Thread ID: 4
  Thread Name: Signal Dispatcher
  Thread State: RUNNABLE
  Thread ID: 3
  Thread Name: Finalizer
  Thread State: WAITING
  Thread ID: 2
  Thread Name: Reference Handler
  Thread State: WAITING
  Thread ID: 1
  Thread Name: main
  Thread State: RUNNABLE
No deadlocked threads found.
Process finished with exit code 0

到此這篇關(guān)于使用java代碼獲取JVM信息的文章就介紹到這了,更多相關(guān)使用java代碼獲取JVM信息內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Cloud根據(jù)服務(wù)名獲取服務(wù)的ip端口問(wèn)題

    Spring Cloud根據(jù)服務(wù)名獲取服務(wù)的ip端口問(wèn)題

    這篇文章主要介紹了Spring Cloud根據(jù)服務(wù)名獲取服務(wù)的ip端口,本篇示例我就以Nacos注冊(cè)中心為例了,下面是我注冊(cè)的兩個(gè)服務(wù),需要的朋友可以參考下
    2022-09-09
  • Java中如何判斷線程池任務(wù)已執(zhí)行完成

    Java中如何判斷線程池任務(wù)已執(zhí)行完成

    這篇文章主要介紹了Java中如何判斷線程池任務(wù)已執(zhí)行完成,文章圍繞主題展開詳細(xì)相關(guān)資料,具有一定的參考價(jià)值需要的小伙伴可以參考以參考一下
    2022-05-05
  • java實(shí)現(xiàn)ftp文件上傳下載功能

    java實(shí)現(xiàn)ftp文件上傳下載功能

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)ftp文件上傳下載功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Spring@Value使用獲取配置信息為null的操作

    Spring@Value使用獲取配置信息為null的操作

    這篇文章主要介紹了Spring@Value使用獲取配置信息為null的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java8 Optional原理及用法解析

    Java8 Optional原理及用法解析

    這篇文章主要介紹了Java8 Optional原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 談?wù)凷pring 注入properties文件總結(jié)

    談?wù)凷pring 注入properties文件總結(jié)

    本篇談?wù)凷pring 注入properties文件總結(jié),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-01-01
  • SpringBoot超詳細(xì)講解事務(wù)管理

    SpringBoot超詳細(xì)講解事務(wù)管理

    事務(wù)的作用就是為了保證用戶的每一個(gè)操作都是可靠的,事務(wù)中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就 回退到事務(wù)開始未進(jìn)行操作的狀態(tài)。事務(wù)管理是Spring框架中最為常用的功能之一,我們?cè)谑褂肧pring Boot開發(fā)應(yīng)用時(shí),大部分情況下也都需要使用事務(wù)
    2022-08-08
  • MybatisPlus實(shí)現(xiàn)對(duì)象嵌套關(guān)聯(lián)查詢一對(duì)多List集合查詢

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

    這篇文章主要介紹了MybatisPlus實(shí)現(xiàn)對(duì)象嵌套關(guān)聯(lián)查詢一對(duì)多List集合查詢,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • java中獲取類加載路徑和項(xiàng)目根路徑的5種方式分析

    java中獲取類加載路徑和項(xiàng)目根路徑的5種方式分析

    本篇文章介紹了,java中獲取類加載路徑和項(xiàng)目根路徑的5種方式分析。需要的朋友參考下
    2013-05-05
  • Java的Hibernate框架中的基本映射用法講解

    Java的Hibernate框架中的基本映射用法講解

    映射是Hibernate框架操作數(shù)據(jù)庫(kù)數(shù)據(jù)的重要特性之一,這里我們來(lái)看一下Java的Hibernate框架中的基本映射用法講解,包括最基本的單向一對(duì)一與多對(duì)一映射關(guān)系等:
    2016-07-07

最新評(píng)論