登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
博客
发1篇日志+1圆
记录
发1条记录+2圆币
发帖说明
VIP申请
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
VIP申请
VIP网盘
网盘
联系我们
道具
勋章
任务
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
使用java代码获取JVM信息
使用java代码获取JVM信息
[ 复制链接 ]
接快背
2025-6-2 21:54:24
转载请注明出处:
最近在环境中定位服务问题,由于服务使用的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
相关帖子
首页屏蔽访客js代码
使用Java实现一个DNS服务
CMake构建学习笔记24-使用通用脚本构建PROJ和GEOS
Java版本兼容性:JDK 21的SDK在JDK 1.8使用
Rust中使用RocksDB索引进行高效范围查询的实践指南
Java线程池的几个常见问题
我一个写Java的,怎么就开始玩K8s和Jenkins了?!
突破层级壁垒:Java通过递归实现目录结构的扁平化解析
GitPod 使用 SpiceDB 实现权限管理
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
软件
首页屏蔽访客js代码
0
20
新程序
2025-09-03
安全
使用Java实现一个DNS服务
0
129
秦晓曼
2025-09-03
业界
CMake构建学习笔记24-使用通用脚本构建PROJ和GEOS
0
682
左丘平莹
2025-09-03
安全
Java版本兼容性:JDK 21的SDK在JDK 1.8使用
0
945
庇床铍
2025-09-03
安全
Rust中使用RocksDB索引进行高效范围查询的实践指南
0
683
聚怪闩
2025-09-03
业界
Java线程池的几个常见问题
0
356
郏琼芳
2025-09-04
业界
我一个写Java的,怎么就开始玩K8s和Jenkins了?!
0
567
役魅肋
2025-09-04
安全
突破层级壁垒:Java通过递归实现目录结构的扁平化解析
0
21
愆蟠唉
2025-09-04
业界
GitPod 使用 SpiceDB 实现权限管理
0
957
事值
2025-09-04
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
接快背
2025-6-2 21:54:24
关注
0
粉丝关注
7
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
敖可
9984
黎瑞芝
9990
杭环
9988
4
凶契帽
9988
5
氛疵
9988
6
猷咎
9986
7
接快背
9986
8
里豳朝
9986
9
肿圬后
9986
10
段干叶农
9986
查看更多