java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java获取JVM信息

如何使用java代码获取JVM信息

作者:香吧香

这篇文章主要介绍了使用java代码获取JVM信息的相关操作代码,代码简单易懂,感兴趣的朋友一起看看吧

转载请注明出处:

最近在环境中定位服务问题,由于服务使用的docker部署的,且使用的docker镜像,在启动之后,容器内没有jdk相关的工具【jstat、jmap等等】;于是采用 在项目中使用java类获取jvm相关信息,以下是测试的示例:

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) {  
        // 获取内存管理 bean  
        MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();  
        MemoryUsage heapMemoryUsage = memoryMXBean.getHeapMemoryUsage();  
        MemoryUsage nonHeapMemoryUsage = memoryMXBean.getNonHeapMemoryUsage();  
        // 打印内存信息  
        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");  
        }  
        // 打印内存池信息  
        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.");  
        }  
    }  
}

2.打印当前线程信息:

3.检查死锁线程:

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

到此这篇关于使用java代码获取JVM信息的文章就介绍到这了,更多相关使用java代码获取JVM信息内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文