`

通过JMX取本地JVM内存使用信息

 
阅读更多
import java.io.BufferedWriter;
import java.io.FileWriter;

import javax.management.openmbean.CompositeData;
import javax.management.remote.JMXServiceURL;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;

import com.sun.tools.attach.VirtualMachine;
import com.sun.tools.attach.VirtualMachineDescriptor;
import com.sun.tools.attach.spi.AttachProvider;

public class JVMRuntimeClient {
	public static void main(String[] args) throws Exception {

		try {
			final AttachProvider attachProvider = AttachProvider.providers()
					.get(0);

			VirtualMachineDescriptor descriptor = null;
			for (VirtualMachineDescriptor virtualMachineDescriptor : attachProvider
					.listVirtualMachines()) {
				if (pickThisOne(virtualMachineDescriptor)) {
					descriptor = virtualMachineDescriptor;
					break;
				}
			}

			if (descriptor == null)
				throw new RuntimeException("You didn't pick one");

			final VirtualMachine virtualMachine = attachProvider
					.attachVirtualMachine(descriptor);
			virtualMachine
					.loadAgent(
							"/Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre/lib/management-agent.jar",
							"com.sun.management.jmxremote");
			final Object portObject = virtualMachine.getAgentProperties().get(
					"com.sun.management.jmxremote.localConnectorAddress");

			final JMXServiceURL target = new JMXServiceURL(portObject + "");
			JMXConnector connector = JMXConnectorFactory.connect(target);
			MBeanServerConnection remote = connector.getMBeanServerConnection();

			int c = remote.getMBeanCount();

			System.out.println(c);

			
			BufferedWriter bfw = new BufferedWriter(new FileWriter("/home/ec2-user/jmx/heap.csv"));
			while (true) {
				CompositeData composite = (CompositeData) remote.getAttribute(
						new ObjectName("java.lang:type=Memory"),
						"HeapMemoryUsage");

				StringBuffer sb = new StringBuffer(composite.get("committed")
						.toString());

				sb.append(",").append(composite.get("init")).append(",")
						.append(composite.get("max"))
						.append(composite.get("used"));
				
				
				
				bfw.write(sb.toString());
				bfw.newLine();
				System.out.println(composite.get("committed"));
				System.out.println(composite.get("init"));
				System.out.println(composite.get("max"));
				System.out.println(composite.get("used"));

			}

			// connector.close();
		} catch (Exception e) {
			e.printStackTrace();
			System.exit(0);
		}
	}

	private static boolean pickThisOne(
			VirtualMachineDescriptor virtualMachineDescriptor) {
		System.out.println(virtualMachineDescriptor.displayName());
		if (virtualMachineDescriptor.displayName().equals(
				"org.codehaus.plexus.classworlds.launcher.Launcher test")
				|| virtualMachineDescriptor
						.displayName()
						.equals("org.codehaus.plexus.classworlds.launcher.Launcher -B test"))
			return true;
		// TODO
		return false;
	}
}

 

分享到:
评论

相关推荐

    jmx-jvm配置

    1. **JVM监控**: JMX可以通过MBeans提供JVM的性能指标,如内存使用情况、线程状态、类加载统计等。 2. **Garbage Collection调优**: 使用JMX,可以监视垃圾收集器的运行情况,甚至动态调整GC参数。 3. **类加载...

    java -jvm 内存分配和jvm调优

    Java JVM(Java虚拟机)内存分配与调优是Java...通过理解JVM内存模型,选择合适的垃圾收集器和设置合理的内存参数,可以有效提升Java应用的性能和稳定性。在实践中,不断学习和试验,才能找到最适合应用的内存配置。

    推荐一些JVM原理,JVM调优,JVM内存模型,JAVA并发 电子书1

    内存管理涉及JVM内存区域,包括堆、栈、方法区、程序计数器和本地方法栈,每部分都有其特定的用途和管理方式。 2. JVM内存模型:JVM内存模型定义了内存中各个部分的关系,以及在多线程环境下如何共享和分配内存。...

    JVM内存设置与调优指南

    本指南将深入探讨JVM内存模型,以及如何通过调整相关参数来优化性能。 首先,我们需要理解JVM的内存结构。JVM内存主要分为以下几个区域: 1. **堆(Heap)**:这是Java对象的主要存储区域,分为年轻代(Young ...

    JVM监控工具使用入门

    jconsole是一款轻量级的监控工具,主要功能包括查看JVM的状态信息、线程信息、内存使用情况等。虽然它的功能相对较少,但对于初级用户来说已经足够使用。通过jconsole,用户可以直观地看到JVM的CPU使用率、堆内存...

    JVM 内存管理及调优.zip_JVM内存_java_memory

    JVM内存分为多个区域,包括堆内存、方法区、程序计数器、虚拟机栈和本地方法栈。理解这些区域的工作原理以及如何优化它们对于提升Java应用程序的性能至关重要。 1. **堆内存**:堆内存是Java对象的主要存储区域,...

    堆内存及JVM内存设置参数 小笔记

    4. **内存监控**:内存监控是通过Java管理扩展API(JMX)提供的Runtime/MemoryMXBean和MemoryPoolMXBean来实现,可以监控整个堆内存和各个内存池的使用情况。 接着,文档介绍了堆内存的监控和设置参数: 1. **堆...

    JVM内存管理、调优与监控考据

    监控工具如JConsole、VisualVM和JMX(Java Management Extensions)提供了查看JVM状态、内存使用情况、线程信息等功能,帮助开发者识别性能瓶颈和内存泄漏。例如,通过监控内存使用情况,可以及时发现长期存活的对象...

    JMX配置与使用

    - 监控和调整应用程序的性能,例如内存使用、线程状态、类加载等。 - 实时查看和修改应用程序的配置。 - 收集日志和跟踪信息,用于故障排查。 - 管理数据库连接池、MQ服务等资源。 ### 阅读材料推荐 压缩包中的`...

    JVM内存调优

    在进行JVM调优时,需要结合监控工具(如VisualVM、JConsole或JMX)来观察内存使用情况,分析垃圾收集日志,找出内存泄漏或性能瓶颈。对于频繁Full GC的情况,可能需要增大堆内存或优化对象分配策略。对于长期存活的...

    JVM 监控 调优 工具

    通过理解JVM内存结构,熟练运用监控工具,并结合实际应用情况进行调优和GC优化,可以有效提升Java应用程序的性能和稳定性。在实践中,应根据应用特点和资源限制进行细致的测试和调整,以达到最佳运行效果。

    JVM TI监控JAVA执行过程

    首先,创建一个本地代理,注册内存使用相关的事件监听器,当内存分配、释放或垃圾收集发生时,记录相关信息。然后,通过分析这些数据,我们可以发现长时间未被释放的对象,从而定位潜在的内存泄漏问题。 五、JVM TI...

    使用Jconsole对java的内存使用情况(JVM)进行监控.doc

    它能够帮助开发者和系统管理员深入了解Java虚拟机(JVM)的状态,包括内存使用、线程活动、类装载、MBeans(Managed Beans)以及虚拟机的各种信息。此外,Jconsole还支持执行MBean公开的方法,以及强制进行垃圾回收...

    深入理解JVM性能调优和内存模型,垃圾回收,虚拟机原理,经典视频教程

    JVM内存模型主要分为堆内存、栈内存、方法区、程序计数器和本地方法栈五个部分。其中,堆内存用于存储对象实例,栈内存则处理方法调用,方法区存储类的信息,程序计数器记录下一条指令的地址,而本地方法栈服务于...

    visualvm监控jvm及远程jvm监控方法

    - **堆内存分析**:"Memory"选项卡用于查看堆内存使用情况,包括对象分配、GC活动和内存泄漏检测。 - **类加载**:"Classes"选项卡展示类加载情况,包括已加载的类数量、类加载和卸载的详细信息。 - **线程分析**...

    深入jvm 内核-原理,诊断于优化视频教程

    通过它可以直接查看内存使用情况、CPU使用率、线程状态等信息。 **4.2 JConsole** JConsole也是JDK自带的一款监控工具,它可以显示运行时的各种统计数据,如类装载信息、内存使用情况、线程信息等,并且支持远程...

    实战Hot Spot JVM GC

    这些工具可以帮助开发者监控JVM的运行状态,包括GC的次数和时间、内存使用情况等。 jstat命令提供了一个强大的工具用于监控Java虚拟机中的堆使用情况和GC的状态。使用例如"-gccapacity"、"-gccause"、"-gcutil"等...

    jvisualvm来JVM监控

    它能够实时显示JVM的运行信息,包括内存使用情况、线程状态、类加载、垃圾收集、CPU使用率等,为开发者提供了一个直观的界面,方便快速定位问题。 二、jvisualvm的主要功能 1. **内存监控**:jvisualvm可以展示堆...

    JVM学习资料+笔记

    3. 内存模型:JVM内存分为堆、栈、方法区、本地方法栈、程序计数器等几部分。其中,堆是对象存储的地方,栈处理方法调用,方法区存储类信息。 4. 垃圾收集:JVM的自动内存管理关键在于垃圾收集,包括可达性分析、...

Global site tag (gtag.js) - Google Analytics