使用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.");
}
}
}
获取GC信息
通过
ManagementFactory.getGarbageCollectorMXBeans()获取所有垃圾回收器的监控Bean。每个
GarbageCollectorMXBean提供:getName():GC算法名称(如G1 Young Generation)getCollectionCount():回收次数getCollectionTime():累计耗时(毫秒)
2.打印当前线程信息:
- 使用
ThreadMXBean获取当前线程的所有 ID,并通过getThreadInfo方法获取每个线程的信息,包括线程名字和状态。
- 使用
3.检查死锁线程:
- 使用
findDeadlockedThreads方法检查 JVM 中的死锁情况。如果有死锁线程,则输出这些线程的 ID 和名称。如果没有,则输出相应的消息。
- 使用
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信息
一.JAVA中获取JVM的信息 原理,利用JavaSDK自带的ManagementFactory类来获取. 二.获取信息 1.获取进程ID @Test public void test1() { Ru ...
- 可以获取JVM信息的一些管理工具类
一些可以获取JVM信息的java工具类 BufferPoolMXBean.class ClassLoadingMXBean.class CompilationMXBean.class GarbageC ...
- 用JAVA代码获取Weblogic配置的JNDI 数据源连接
第一步:生成与JDK版本对应的weblogicjar,利用cmd 进入到weblogic_home 路径下进入到server/lib目录,然后运行 JDK 1.6 命令 "java -j ...
- java代码获取客户端的真实ip
java代码获取客户端的真实ip protected String getIpAddr(HttpServletRequest request) { String ip = request.getHea ...
- 通过编写Java代码让Jvm崩溃
在书上看到一个作者提出一个问题"怎样通过编写Java代码让Jvm崩溃",我看了之后也不懂.带着问题查了一下,百度知道里面有这样一个答案: 1 package jvm; 2 3 pu ...
- java sigar获取本地信息以及org.hyperic.sigar.SigarException: The device is not ready报错解决
window下,使用java sigar 获取磁盘使用率,cpu使用率以及内存使用情况等信息时. 一:首先需要下载jar包和相关文件 sigar-1.6.4.zip 如果想了解更多可以去 sigar官 ...
- 通过Java代码获取系统信息
在开发中,我们需要获取JVM中的信息,以及操作系统信息,内存信息,CPU信息,磁盘信息,网络信息等,通过Java的API不能获取内存等信息,需要sigar的第三方依赖包. ①:加入依赖 <dep ...
- Java代码获取NTP服务器时间
apache的commons-net包下面有ntp相关的实现类,主要类有: 1 org.apache.commons.net.ntp.NTPUDPClient ? 1 org.apache.com ...
- Java接口获取系统配置信息
Java获取当前运行系统的配置信息 接口:System.getProperty() 参数 描述 java.version Java运行时环境版本 java.vendor Java运行时环境供应商 ja ...
- java反射-获取方法信息
例子代码如下: package com.reflect; import java.lang.reflect.Method; public class ClassUtill { /* * 打印类的信息, ...
随机推荐
- 【分享】 100+ 套开源大数据可视化大屏Html5模板,全网最炫!
今天给大家分享 100+ 套开源大数据可视化炫酷大屏Html5模板,全网最新.最多.最全.最酷.最炫的大数据可视化模板! 项目介绍 BigDataView提供了100+套大数据可视化炫酷大屏Html5 ...
- c代码部分封装为lib
需求:将一个C工程中的核心代码封装为静态文件:lib. 环境 工具:VC6.0++ 语言:c 以封装一个DES工程为例 封装 (1)新建一个静态工程 (2)新建c文件和h文件 (3)挑选封装内容 在原 ...
- APSI - 1
最近在看[Labeled PSI from Homomorphic Encryption with Reduced Computation and Communication]的论文,看完后头大,现结 ...
- 0415-File类和FileFilter接口
package demoFile; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; imp ...
- VMware常用操作
VMware常用操作 VMware作为一款功能强大的虚拟化软件,为用户提供了一个灵活.高效的虚拟环境.在日常使用中,掌握VMware的常用操作对于提高工作效率.优化资源配置至关重要.以下将详细介绍VM ...
- Q: 远程ssh登录不上
1.密码没有问题 .2.防火墙没有禁用端口.3.ssh服务已安装且开启一般是ssh配置文件问题打开ssh配置文件 vim /etc/ssh/sshd_config ################## ...
- Yarn角色
一.ResourceManager ResourceManager中的调度器负责资源的分配 二.NodeManager NodeManager则负责资源的供给和隔离 ResourceManager将某 ...
- mybatis之配置优化
属性优化 properties 外部配置文件[db.properties] driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/m ...
- python接入百度智能云API实现ai对话
python接入百度智能云API实现ai对话 千帆大模型平台-百度智能云千帆 代码段: import requests import json # 获取访问令牌的函数 def get_access_t ...
- 万字调研——AI生成内容检测
数据集 TweepFake 地址 摘要:深度伪造(deepfakes).合成或篡改媒体的威胁正变得越来越令人担忧,尤其是对于那些已经被指控操纵公众舆论的社交媒体平台而言.即使是最简单的文本生成技术(例 ...