最近做监控相关的事情,要把本地的所有JAVA应用管理起来,但这些应用的JDK1.4的,有1.5的,1.6的,而且在JDK1.5之前的应用提供的MBeanServer并不是PlatformMBeanServer,这就导致监控时获取堆的信息,线程,Runtime等一些属性的时候没法获取。本打算改造运行在JDK1.4上跑的应用,使其使用PlatFormMBeanServer,但JDK1.4好像并没有提供获取PlatFormMBeanServer的方式,大致想到了以下几个思路:
1.升级JDK,但可能会影响原来应用,因为JDK1.4的时候一些语法像enum这些都还不是关键字。
2.如果可以升级JDK,下面的几点才可以实现:
2.1 改造原应用,获取PlatFormMBeanServer,这样应用的监控数据和java.lang的监控数据就都可以获取
2.2 利用JDK attach 的方式,根据本地的vmid获取其jmxUrl,再获取属性,这个需要JDK1.6了。
JDK中部分Attach的代码:
// load the management agent into the target VM
private void loadManagementAgent() throws IOException {
VirtualMachine vm = null;
String name = String.valueOf(vmid);
try {
vm = VirtualMachine.attach(name);
} catch (AttachNotSupportedException x) {
IOException ioe = new IOException(x.getMessage());
ioe.initCause(x);
throw ioe;
}
String home = vm.getSystemProperties().getProperty("java.home");
// Normally in ${java.home}/jre/lib/management-agent.jar but might
// be in ${java.home}/lib in build environments.
String agent = home + File.separator + "jre" + File.separator +
"lib" + File.separator + "management-agent.jar";
File f = new File(agent);
if (!f.exists()) {
agent = home + File.separator + "lib" + File.separator +
"management-agent.jar";
f = new File(agent);
if (!f.exists()) {
throw new IOException("Management agent not found");
}
}
agent = f.getCanonicalPath();
try {
vm.loadAgent(agent, "com.sun.management.jmxremote");
} catch (AgentLoadException x) {
IOException ioe = new IOException(x.getMessage());
ioe.initCause(x);
throw ioe;
} catch (AgentInitializationException x) {
IOException ioe = new IOException(x.getMessage());
ioe.initCause(x);
throw ioe;
}
// get the connector address
Properties agentProps = vm.getAgentProperties();
address = (String) agentProps.get(LOCAL_CONNECTOR_ADDRESS_PROP);
vm.detach();
}
InputStream execute(String cmd, Object ... args)
throws AgentLoadException, IOException
{
assert args.length <= 3; // includes null
// create a pipe using a random name
int r = (new Random()).nextInt();
String pipename = "\\\\.\\pipe\\javatool" + r;
long hPipe = createPipe(pipename);
// check if we are detached - in theory it's possible that detach is invoked
// after this check but before we enqueue the command.
if (hProcess == -1) {
closePipe(hPipe);
throw new IOException("Detached from target VM");
}
try {
// enqueue the command to the process
enqueue(hProcess, stub, cmd, pipename, args);
// wait for command to complete - process will connect with the
// com
分享到:
相关推荐
接下来,我们将详细介绍如何使用xmanage来远程开启Jconsole,以及其背后的工作原理。 首先,我们需要确保已经安装了xmanage。xmanage是一款强大的SSH(X Window)管理工具,它支持多种协议,包括SSH、RDP、VNC等,...
在游戏开发领域,Minecraft作为一款备受欢迎的沙盒建造游戏,其背后的技术实现和问题解决是许多开发者和技术爱好者关注的焦点。本篇将主要探讨"Minecraft Error Pack",这是一个专门针对Minecraft游戏运行过程中可能...
Java提供了丰富的并发工具,如线程池、synchronized关键字、volatile、ThreadLocal、Lock等,学习者需了解它们的用法及背后的内存模型,以编写高效、安全的并发代码。 3. **Java虚拟机(JVM)**:JVM是Java程序运行...
通过这本书,你可以揭示Java语言的诸多细节,探索其背后的运行原理,从而提升你的编程技艺。 首先,我们要理解JVM、JDK和JRE的基本概念。JVM是Java的核心,它是负责执行Java字节码的平台独立的虚拟机。它允许Java...
本文将围绕HotSpot源码,探讨其背后的设计理念与实现细节,帮助读者深化对Java虚拟机的理解。 首先,HotSpot虚拟机的核心功能包括类加载、内存管理、执行引擎和垃圾收集器等。在源码层面,这些功能模块的实现都是...
总的来说,《Professional Java JDK 6 Edition》这本书将带你全面了解JDK 6的各项新特性,深入探讨其背后的原理和使用方法,无论是初学者还是经验丰富的开发者,都能从中受益匪浅。通过学习和掌握这些知识,你将能够...
【JVM 指南1】深入理解JVM...在进行JVM调优时,不仅要关注各项指标,还要理解它们背后的含义,结合业务逻辑和系统负载情况来制定优化策略。调优是一个持续的过程,需要不断监控、测试和调整,以达到最佳的系统性能。
Java提供了JConsole、VisualVM等工具,可以实时查看线程状态、CPU和内存使用情况,帮助我们定位和解决问题。另外,`jstack`命令行工具可以打印出Java进程的线程堆栈信息,这对于诊断死锁和其他线程问题非常有用。 ...
2. **同步机制**:讲述了Java中同步的基石——synchronized关键字,以及其背后的锁机制。此外,还包括wait()、notify()和notifyAll()方法的使用,以及死锁、活锁和饥饿现象的避免。 3. **并发工具类**:介绍了许多...
《深入JAVA虚拟机第二版》是一本专注于Java虚拟机(JVM)的权威指南,它为读者揭示了Java编程语言背后的运行机制。本书是Java开发者深入理解平台内部工作原理的必备读物,无论你是初学者还是经验丰富的开发人员,都...
Hotspot源码包含了丰富的性能监控和调试工具,如JConsole、VisualVM等,它们提供CPU、内存、线程等多方面的监控数据,帮助开发者定位问题和优化性能。 6. **多线程与同步**: Hotspot对Java多线程的支持体现在锁...
JDK8u262提供了如JConsole、VisualVM等强大的JVM监控和调优工具,它们的背后都与HotSpot虚拟机的源码紧密关联。通过源码,我们可以更深入地了解这些工具的工作原理,从而更有效地进行性能调优。 总结,深入研究JDK8...
Java虚拟机(JVM)是Java平台的核心组件,它是Java“一次编写,到处运行”特性背后的实现者。JVM负责解释和执行.class文件中的字节码,确保跨平台兼容性。每个操作系统都需要安装相应的JVM才能运行Java程序。 三、...
8. **并发性能分析与调试**:讲解如何使用Java性能监控工具(如JConsole、VisualVM等)进行并发程序的性能分析和故障排查,以及如何进行线程 Dump 分析,找出可能导致系统性能下降或不稳定的原因。 9. **JVM与并发*...
### JVM基础知识 #### 1. 什么是JVM? JVM(Java Virtual Machine)即Java虚拟机,是一种用于执行Java字节码的虚拟机环境。...在准备面试过程中,理解这些概念并能够深入探讨其背后的原理是非常重要的。
3. **编译器与工具**:Java的编译器(javac)将源代码转换为字节码,而JDK提供的其他工具,如javadoc(生成文档)、jconsole(监控JVM)、jmap(内存映射)等,都对开发和调试有重要作用。源代码分析有助于我们了解...
由于提供的文件列表中只有"day22",无法直接获取具体的内容,但根据标题和标签,我们可以推测这篇博客提供了关于JDBC_J3p0数据池使用过程中可能遇到的问题、其背后的原因以及相应的解决策略。对于正在使用或计划使用...
在学习和准备面试的过程中,重视思考和总结,不要仅限于记住知识点,更要理解其背后的原理。同时,选择合适的环境和导师能显著提升学习效率。学会在实际项目中运用所学知识,创造社会价值和经济价值,这才是真正的...
7. **工具使用**:关于"工具"的标签可能意味着博客中会介绍如何利用各种开发工具,如Maven或Ant进行构建,或者使用JConsole或VisualVM等监控工具对运行时性能进行分析。 这个博客文章对于初学者理解EJB和JBoss的...
这本书详尽地介绍了Java虚拟机(JVM)的工作原理,为读者揭示了Java程序运行背后的机制。以下是根据标题和描述提取的一些关键知识点: 1. **Java虚拟机(JVM)**: JVM是Java平台的核心组成部分,它负责执行字节码,...