`
ayufox
  • 浏览: 276210 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[Java性能剖析]Sun JVM Attach API

    博客分类:
  • JVM
阅读更多

     Sun JVM Attach API是Sun JVM中的一套非标准的可以连接到JVM上的API,从JDK6开始引入,除了Solaris平台的Sun JVM支持远程的Attach,在其他平台都只允许Attach到本地的JVM上。
      一、Sun JVM Attach API功能上非常简单,仅提供了如下几个功能:

  • 列出当前所有的JVM实例描述(知道JDK工具jps吗,列出所有的java进程的pid)
  • Attach到其中一个JVM上,建立通信管道
  • 让目标JVM加载Agent(还记得JVM TI吧,运行后加载的Agent)

      二、通过几个实例简单地了解一下如上的几个功能
      1.列出当前所有的JVM实例描述

List<VirtualMachineDescriptor> list = VirtualMachine.list();
for (VirtualMachineDescriptor vmd : list)
{
    System.out.println("pid:" + vmd.id() + ":" + vmd.displayName());
}

     JConsole的连接界面中的本地部分就是通过这个API来做的
 
    2.Attach到特定进程的JVM上,并加载Agent,我们看看jconsole是怎么做的(见sun.tools.jconsole. LocalVirtualMachine)
    1)首先是Attach到JVM上

VirtualMachine virtualmachine = VirtualMachine.attach(pid);

    2)然后是加载Agent

String javaHome = virtualmachine.getSystemProperties().getProperty("java.home");
String agentPath = javaHome + File.separator + "jre" + File.separator + "lib" + File.separator + "management-agent.jar");
File file = new File(agentPath);
if(!file.exists())
{
     agentPath = javaHome + File.separator + "lib" + File.separator + "management-agent.jar";
      file = new File(agentPath);
      if(!file.exists())
          throw new IOException("Management agent not found");
      }
}

agentPath = file.getCanonicalPath();
try
{
     virtualmachine.loadAgent(agentPath, "com.sun.management.jmxremote");
}
catch(AgentLoadException e)
{
     throw new IOException(e);
}
catch(AgentInitializationException agentinitializationexception)
{
     throw new IOException(e);
}
Properties properties = virtualmachine.getAgentProperties();
address = (String)properties.get("com.sun.management.jmxremote.localConnectorAddress");
virtualmachine.detach();

    三、我们来看一下底层是如何处理Attach的,不同的平台处理方式当然是不一样的,我们看看Windows平台是如何处理的
    首先Attach API定义了AttachProvider,我们当然可以通过实现不同的    AttachProvider来提供不同的Attach方式,当然这不是一件简单的事情,因为实际上是需要JVM支持的。以Windows平台为例,实现了WindowsAttachProvider,我们看看其中最主要的attach方法

public VirtualMachine attachVirtualMachine(String vmid)
        throws AttachNotSupportedException, IOException
{
    checkAttachPermission();
    testAttachable(vmid);
    return new WindowsVirtualMachine(this, vmid);
}

     WindowsVirtualMachine在构造函数中先连接上目标JVM

WindowsVirtualMachine(AttachProvider attachprovider, String s)
        throws AttachNotSupportedException, IOException
{
        super(attachprovider, s);
        …
        hProcess = openProcess(i);
        …
}

     WindowsVirtualMachine继承HotSpotVirtualMachine,先看看HotSpotVirtualMachine的loadAgent方法

private void loadAgentLibrary(String s, boolean flag, String s1)
        throws AgentLoadException, AgentInitializationException, IOException
{
        InputStream inputstream = execute("load", new Object[] {
            s, flag ? "true" : "false", s1
        });
        ...
 }

   再看看WindowsVirtualMachine的execute,基本上调用的各种方法都是native方法,只能大概地猜测与JVM进程之间使用管道进行了一个通信

transient InputStream execute(String s, Object aobj[])
        throws AgentLoadException, IOException
 {
        int i = (new Random()).nextInt();
        String pipe ="\\\\.\\pipe\\javatool" + i;
        long l = createPipe(pipe);
        …
        try
        {
            enqueue(hProcess, stub, s, pipe, aobj);
            connectPipe(l);
            PipedInputStream pipedinputstream = new PipedInputStream(l);
            …
        }
        catch(IOException ioexception)
        {
            closePipe(l);
            throw ioexception;
        }
}

 

 

4
4
分享到:
评论
1 楼 sswh 2013-12-02  
非常不错,感谢分享!!

相关推荐

    java jvm及性能优化_javajvm优化_Java性能分析_

    以下是对"Java JVM及性能优化"和"Java性能分析"的详细阐述: 一、JVM结构与工作原理 1. 类装载器:负责加载类文件,确保在运行时能找到对应的类。 2. 运行数据区:包括方法区、堆、栈、本地方法栈和程序计数器。...

    Java语言规范和JVM规范官网文档

    Java语言规范和JVM规范是理解Java编程基础和高级特性的关键参考资料,它们定义了Java程序的语法、语义以及虚拟机的行为。本压缩包包含了Java6至Java9的版本,涵盖了一系列重要的语言和虚拟机改进,对于Java开发者来...

    JAVA8虚拟机(jvm)规范_Chinese version.rar

    《JAVA8虚拟机(jvm)规范_Chinese version》提供了关于JVM的详细中文指南,对于理解Java程序的运行机制、优化性能以及深入学习Java技术体系至关重要。下面我们将探讨一些重要的JVM知识点: 1. **内存模型**:JVM内存...

    实战Java虚拟机——JVM故障诊断与性能优化 pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...

    深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理).zip

    《深入理解Java虚拟机》是一本深度探讨Java虚拟机(JVM)的著作,涵盖了JVM性能调优、内存模型以及虚拟机原理等多个关键领域。本文将基于这些主题,详细阐述其中的重要知识点。 首先,我们要了解Java虚拟机(JVM)...

    阿里巴巴Java性能调优实战(2021-2022华山版)+Java架构核心宝典+性能优化手册100技巧.rar

    性能优化手册是一套java性能学习研究小技巧,包含内容:Java性能优化、JVM性能优化、服务器性能优化、数据库性能优化、前端性能优化等。 内容包括但不限于: String 性能优化的 3 个小技巧 HashMap 7 种遍历方式...

    java11-jvm白皮书

    这份白皮书主要关注JVM的内部工作原理,包括垃圾收集、内存管理、类加载机制、性能优化等方面,是Java开发者深入理解Java运行环境的重要参考资料。 一、JVM概述 Java虚拟机(JVM)是Java平台的核心组成部分,它负责...

    实战Java虚拟机——JVM故障诊断与性能优化

    《实战Java虚拟机——JVM故障诊断与性能优化》是一本深入探讨Java开发人员和运维人员必备技能的书籍。本书作者葛一鸣以其丰富的实战经验,详细阐述了JVM(Java Virtual Machine)的工作原理,以及如何有效地进行故障...

    揭秘Java虚拟机-JVM设计原理与实现

    10. **性能优化**:通过分析JVM的各种监控工具(如JConsole、VisualVM等),学习如何定位性能瓶颈并进行调优,包括堆大小调整、垃圾收集器选择、JVM参数设置等。 通过阅读这本书,开发者不仅能理解JVM的基本运作...

    sunJVM的源代码9

    sunJVM的源代码9

    实战JAVA虚拟机 JVM故障诊断与性能优化

    《实战JAVA虚拟机—JVM故障诊断与性能优化》是一本深入探讨Java虚拟机(JVM)技术的书籍,旨在帮助开发者和系统管理员诊断并优化JVM相关的性能问题。本书内容丰富,涵盖了大量的实践案例,使得即便是初学者也能理解...

    sunJVM的源代码2

    sunJVM的源代码

    java性能调优-jvm创建对象和-performance-createobj-allocationmemory.zip

    在Java性能调优中,JVM(Java Virtual Machine)创建对象和内存分配是至关重要的环节。这直接影响到程序的运行速度、内存占用以及整体系统的稳定性。本篇文章将深入探讨Java中对象创建的过程、内存分配机制,以及...

    实战JAVA虚拟机 JVM故障诊断与性能优化.pdf

    实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送) 实战JAVA虚拟机 JVM故障诊断与性能优化.pdf (无书签.低分放送)

    Java性能优化指南:JVM调优技巧与实践

    Java虚拟机(JVM)的性能调优是确保Java应用程序高效运行的关键。通过合理配置JVM参数和采用一些调优技巧,开发者可以显著提高应用程序的性能。本文将探讨一些常用的JVM性能调优技巧,并提供代码示例来展示这些技巧...

    jvmjava,java实现的JVM。.zip

    理解JVM的工作机制对于优化Java应用程序性能至关重要。 二、开源项目的意义 开源项目“jvmjava”为开发者提供了一种学习JVM内部运作方式的途径。通过阅读和分析源代码,我们可以了解JVM的各个组件,如类加载器、...

    实战JAVA虚拟机++JVM故障诊断与性能优化.pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    实战Java虚拟机——JVM故障诊断与性能优化.pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》是一本深入探讨Java开发中的关键环节——Java虚拟机(JVM)的专著。本书聚焦于实际应用中的问题解决和性能调优,对于Java开发者和系统管理员来说,是提升技术水平的重要...

    JVM系列之性能调优参考手册(实践篇).pdf

    标题《JVM系列之性能调优参考手册(实践篇)》涉及的知识点主要集中在Java虚拟机(JVM)性能调优的实践操作。JVM作为Java程序运行的基础环境,对程序性能有着决定性影响。本手册的目的是指导开发者如何对JVM进行性能...

    JAVA_API1.6文档(中文)

    java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供...

Global site tag (gtag.js) - Google Analytics