`

通过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_exporter:一个通过HTTP公开JMX Bean以供Prometheus使用的过程

    它也可以作为独立的HTTP服务器运行,并刮擦远程JMX目标,但这有许多缺点,例如难以配置和无法公开过程指标(例如,内存和CPU使用率)。 因此,强烈建议将导出程序作为Java代理运行。 跑步 要作为javaagent运行,请...

    java开源包8

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    JAVA上百实例源码以及开源项目源代码

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    java开源包1

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包11

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包2

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包3

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包6

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包5

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包10

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包4

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包7

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包9

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    java开源包101

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

    Java资源包01

    MyBatchFramework 是一个开源的轻量级的用以创建可靠的易管理的批量作业的Java包,主要特点是多线程、调度、JMX管理和批量执行报表,执行历史等。 SIP协议包 jSIP.tar jSIP这个Java包目标是用Java实现SIP(SIP:...

Global site tag (gtag.js) - Google Analytics