当前位置:网站首页>使用mbean 自动执行heap dump
使用mbean 自动执行heap dump
2022-04-23 20:50:00 【weixin_40455124】
记录下如何查看mbean的使用方法和自动进行heap dump。
import java.io.File;
import java.lang.management.ManagementFactory;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.MBeanException;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
public class HeapDump {
//https://docs.oracle.com/javase/8/docs/jre/api/management/extension/com/sun/management/DiagnosticCommandMBean.html
public static final String DIAGNOSTIC_COMMAND = "com.sun.management:type=DiagnosticCommand";
private static final String HEAP_COMMAND = "gcClassHistogram";
//can be useful for dumping heaps in binary format
//https://docs.oracle.com/javase/8/docs/jre/api/management/extension/com/sun/management/HotSpotDiagnosticMXBean.html
public static final String HOTSPOT_DIAGNOSTIC = "com.sun.management:type=HotSpotDiagnostic";
private static final String DUMP_COMMAND = "dumpHeap";
private static final String DUMP_FILE_NAME = "heap";
private static final String DUMP_FILE_ENDING = ".hprof";
private static final boolean DUMP_DEAD_OBJECTS = false;
private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
public static void dumpHeap(String dumpFolder)
throws MalformedObjectNameException, InstanceNotFoundException, MBeanException, ReflectionException {
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
ObjectName hotspotBean = ObjectName.getInstance(HOTSPOT_DIAGNOSTIC);
String timeSuffix = '-' + dateFormat.format(new Date());
File dumpFile = new File(dumpFolder, DUMP_FILE_NAME + timeSuffix + DUMP_FILE_ENDING);
//it needs to be with a system dependent path seperator
mBeanServer.invoke(hotspotBean, DUMP_COMMAND
, new Object[]{
dumpFile.getAbsolutePath(), DUMP_DEAD_OBJECTS}
, new String[]{
String.class.getName(), Boolean.TYPE.getName()});
}
/** * 打印mbean 使用方式 * HeapDump.getMBeanInfo(HeapDump.DIAGNOSTIC_COMMAND); * HeapDump.getMBeanInfo(HeapDump.HOTSPOT_DIAGNOSTIC); * @param mbeanName * @throws MalformedObjectNameException * @throws NullPointerException * @throws IntrospectionException * @throws InstanceNotFoundException * @throws ReflectionException */
public static void getMBeanInfo(String mbeanName) throws MalformedObjectNameException, NullPointerException, IntrospectionException, InstanceNotFoundException, ReflectionException {
MBeanServer server = ManagementFactory.getPlatformMBeanServer();
ObjectName hotspotBean = ObjectName.getInstance(mbeanName);
javax.management.MBeanInfo mbeanInfo = server.getMBeanInfo(hotspotBean);
MBeanOperationInfo[] operations = mbeanInfo.getOperations();
for (int i=0;i<operations.length;i++) {
System.out.println(operations[i].toString());
}
}
public static void getHeap()
throws MalformedObjectNameException, InstanceNotFoundException, MBeanException, ReflectionException {
ObjectName diagnosticObjectName = ObjectName.getInstance(DIAGNOSTIC_COMMAND);
MBeanServer mBeanServer = ManagementFactory.getPlatformMBeanServer();
String reply = (String) mBeanServer.invoke(diagnosticObjectName, HEAP_COMMAND
, new Object[]{
new String[]{
}}, new String[]{
String[].class.getName()});
System.out.println(reply);
}
}
以上代码核心来源:
https://gist.githubusercontent.com/munendrasn/2b67831b7a62d4db90c12467466a9736/raw/0679a2bb54f56a416b71912b8890a2473b336a75/HeapDump.java
版权声明
本文为[weixin_40455124]所创,转载请带上原文链接,感谢
https://radishgz.blog.csdn.net/article/details/124366174
边栏推荐
- Explore ASP Net core read request The correct way of body
- "Meta function" of tidb 6.0: what is placement rules in SQL?
- 2021-06-29 C escape character cancellation and use
- Send email to laravel
- MySQL进阶之数据的增删改查(DML)
- Reentrant function
- Solution: NPM err! code ELIFECYCLE npm ERR! errno 1
- Recommended usage scenarios and production tools for common 60 types of charts
- Express③(使用Express编写接口、跨域有关问题)
- MySQL进阶之表的增删改查
猜你喜欢
随机推荐
Case of the third day of go language development fresh every day project - news release system II
Learn to C language fourth day
PHP的Laravel与Composer部署项目时常见问题
GO语言开发天天生鲜项目第三天 案例-新闻发布系统二
管道和xargs
Win 11K in 100 days, super complete learning guide for job transfer test
Singleton mode
Fastdfs mind map
电脑越用越慢怎么办?文件误删除恢复方法
Unity Odin ProgressBar add value column
Preliminary understanding of cache elimination algorithm (LRU and LFU)
Bracket matching -- [implementation of one-dimensional array]
C knowledge
Awk print special characters
Recommended usage scenarios and production tools for common 60 types of charts
一些接地气的话儿
阿里云回应用户注册信息泄露事件
Send email to laravel
Prim、Kruskal
go reflect