`
caoxudong818
  • 浏览: 45759 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Serviceability 简介 —— 概述

 
阅读更多

以下内容均已jdk1.7.0_04为准。

 

啥是 Serviceability ?

 

HotSpot Glossary of Terms 写道
Serviceability Agent (SA)
The Serviceablity Agent is collection of Sun internal code that aids in debugging HotSpot problems. It is also used by several JDK tools - jstack, jmap, jinfo, and jdb. See SA for more information.

 简单说,这部分是用来调试查看hotspot的。

 

子曰,学而时习之 不亦说乎。这里就先习之,有个直观印象之后,再学之。

平时用来查看hotspot内部信息的常用的工具都在$JAVA_HOME/bin目录下,其中一些工具就是用Serviceability开发的。这里要介绍的是HSDB(其命令版本是CLHSDB),启动方式如下:

 

java -classpath $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.HSDB

 

看到界面后,大家自己琢磨怎么玩吧,内容挺多。

 

类似的,启动CLHSDB的方式如下: 

 

java -classpath $JAVA_HOME/lib/sa-jdi.jar sun.jvm.hotspot.CLHSDB

 

 这里有一个简单的说明文档:http://hg.openjdk.java.net/hsx/hotspot-main/hotspot/raw-file/tip/agent/doc/clhsdb.html

 

另外,还有一个DebugServer类,功能差不多。

 

java -classpath %JAVA_HOME%/lib/sa-jdi.jar sun.jvm.hotspot.DebugServer

 

在sun.jvm.hotspot包下,有个HelloWorld类。我觉着此类是在蛋疼的紧,各位请看代码:

 

/*
 * Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
 *
 * This code is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 only, as
 * published by the Free Software Foundation.
 *
 * This code is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * version 2 for more details (a copy is included in the LICENSE file that
 * accompanied this code).
 *
 * You should have received a copy of the GNU General Public License version
 * 2 along with this work; if not, write to the Free Software Foundation,
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 *
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 * or visit www.oracle.com if you need additional information or have any
 * questions.
 *
 */

package sun.jvm.hotspot;

import java.lang.reflect.*;

public class HelloWorld {
  private static String helloWorldString = "Hello, world!";
  private static volatile int helloWorldTrigger = 0;
  private static final boolean useMethodInvoke = false;
  private static Object lock = new Object();

  public static void main(String[] args) {
    int foo = a();

    System.out.println("HelloWorld exiting. a() = " + foo);
  }

  private static int a() {
    return 1 + b();
  }

  private static int b() {
    return 1 + c();
  }

  private static int c() {
    return 1 + d("Hi");
  }

  private static int d(String x) {
    System.out.println("HelloWorld.d() received \"" + x + "\" as argument");
    synchronized(lock) {
      if (useMethodInvoke) {
        try {
          Method method = HelloWorld.class.getMethod("e");
          Integer result = (Integer) method.invoke(null, new Object[0]);
          return result.intValue();
        }
        catch (Exception e) {
          throw new RuntimeException(e.toString());
        }
      } else {

        int i = fib(10); // 89
        long l = i;
        float f = i;
        double d = i;
        char c = (char) i;
        short s = (short) i;
        byte b = (byte) i;

        int ret = e();

        System.out.println("Tenth Fibonacci number in all formats: " +
                           i + ", " +
                           l + ", " +
                           f + ", " +
                           d + ", " +
                           c + ", " +
                           s + ", " +
                           b);

        return ret;
      }
    }
  }

  public static int e() {
    System.out.println("Going to sleep...");

    int i = 0;

    while (helloWorldTrigger == 0) {
      if (++i == 1000000) {
        System.gc();
      }
    }

    System.out.println(helloWorldString);

    while (helloWorldTrigger != 0) {
    }

    return i;
  }

  // Tree-recursive implementation for test
  public static int fib(int n) {
    if (n < 2) {
      return 1;
    }
    return fib(n - 1) + fib(n - 2);
  }
}

 难道此类是用来硬件测性能的?

 

sa中的包主要分为以下几个部分:

asm,ci,code,debugger,gc,interpreter,jdi,livevm,memory,oops,opto,prims,runtine,tools,types。

后续的文章会进行介绍,可能会跳过一些(我不懂的)。

 

回到CLHSDB,这个只是一个壳,主要的功能都是靠sun.jvm.hotspot.HotSpotAgent和sun.jvm.hotspot.CommandProcessor完成的。

 

CommandProcessor.DebuggerInterface di = new CommandProcessor.DebuggerInterface() {
                public HotSpotAgent getAgent() {
                    return agent;
                }
                public boolean isAttached() {
                    return attached;
                }
                public void attach(String pid) {
                    attachDebugger(pid);
                }
                public void attach(String java, String core) {
                    attachDebugger(java, core);
                }
                public void detach() {
                    detachDebugger();
                }
                public void reattach() {
                    if (attached) {
                        detachDebugger();
                    }
                    if (pidText != null) {
                        attach(pidText);
                    } else {
                        attach(execPath, coreFilename);
                    }
                }
            };
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
CommandProcessor cp = new CommandProcessor(di, in, System.out, System.err);

构造CommandProcessor类的实例前时,会对其中的一个成员变量commandList进行初始化,其中存储的就是预先注册的可执行命令:

 

private final Command[] commandList = {
        new Command("reattach", true) {
            public void doit(Tokens t) {
                int tokens = t.countTokens();
                if (tokens != 0) {
                    usage();
                    return;
                }
                preAttach();
                debugger.reattach();
                postAttach();
            }
        },
        new Command("attach", "attach pid | exec core", true) {
            public void doit(Tokens t) {
                int tokens = t.countTokens();
                if (tokens == 1) {
                    preAttach();
                    debugger.attach(t.nextToken());
                    postAttach();
                } else if (tokens == 2) {
                    preAttach();
                    debugger.attach(t.nextToken(), t.nextToken());
                    postAttach();
                } else {
                    usage();
                }
            }
        },
......
        new Command("assert", "assert true | false", true) {
            public void doit(Tokens t) {
                if (t.countTokens() != 1) {
                    usage();
                } else {
                    Assert.ASSERTS_ENABLED = Boolean.valueOf(t.nextToken()).booleanValue();
                }
            }
        },
    };

 

这样,程序就可以接收并处理用户输入的命令。

 

HotSpotAgent类的主要功能是根据主机环境设置调试器(debugger),并将debugger attach(这词儿该咋表述)到目标上(目标可以通过PID或dump文件)。流程如下(以Windows为例):

attach($pid) -> setupDebugger() -> setupDebuggerWin32() -> attachDebugger()

在这期间会根据需要,判断是否建立一个远程调式服务器,以便于执行远程调试。

 

if (isServer) {
    RemoteDebuggerServer remote = null;
    try {
        remote = new RemoteDebuggerServer(debugger);
    }catch (RemoteException rem) {
        throw new DebuggerException(rem);
    }
    RMIHelper.rebind(serverID, remote);
}
 

 

to be continued...

分享到:
评论
1 楼 qiuboboy 2013-04-09  

相关推荐

    鸿蒙关于js与serviceAbility交互的Demo讲解

    接下来,我们转向Java端,创建`serviceAbility.java`文件,这里定义Service Ability的行为。我们需要实现`onRemoteRequest()`方法,根据接收到的动作来判断是订阅还是取消订阅的请求。在处理这些请求时,我们可以...

    Reliability, Availability and Serviceability on Linux.pdf

    在探讨Linux系统中的可靠性(Reliability)、可用性(Availability)和服务性(Serviceability),简称RAS特性时,首先需要明确RAS概念的由来及其在Linux环境下的应用。 RAS最初是IBM为衡量大型机(mainframe)的...

    IBM 小型机 P770 P780更换 I/O柜电源

    如果日志没有报出故障电源具体位置,可以从 Serviceability——Hardware-——Exchange FRU 中查找故障电源模块的信息。 五、结论 更换 I/O 柜电源是一个复杂的过程,需要经过详细的诊断和检查。在执行更换操作前,...

    ServiceAbilityDemo.zip

    ServiceAbilityDemo.zip是一个关于华为鸿蒙操作系统(HarmonyOS)中的ServiceAbility开发示例的压缩包。ServiceAbility是鸿蒙系统中的一种核心组件,用于实现应用程序间的后台服务交互。在这个示例中,开发者可以学习...

    服务器系统概述(全文).doc

    【服务器系统概述】 服务器,又称为伺服器,是提供计算服务的关键设备,它需要响应服务请求并进行处理,因此必须具备高效的服务承载能力和保障服务稳定性的能力。服务器的基本构成包括处理器、硬盘、内存、系统总线...

    Service实现通知,判断通知栏是否已打开

    在Android应用开发中,服务(Service)是一种在后台运行,不与用户交互的组件。它常用于执行长时间的任务,如播放音乐、网络通信等。在本主题中,我们将深入探讨如何利用Service来实现通知功能,并检测通知栏是否...

    Java Performance Companion(Addison,2016)

    Using HotSpot VM Serviceability Agent to analyze, triage, and resolve diverse HotSpot VM issues Troubleshooting out of memory errors, Java level deadlocks, and HotSpot VM crashes Extending the ...

    IBM 红皮书 for power 770/780

    这些服务器不仅具备卓越的性能和扩展能力,还拥有高度可靠性和可用性(Reliability, Availability, and Serviceability, RAS),特别适合于企业级应用环境。 ##### 2.2 运行环境 IBM Power 770 和 Power 780 支持...

    IBMSystemp5最新产品简介updateV35.pptx

    在"IBM System p5 最新产品简介updateV35.pptx"中,主要介绍了UNIX计算的发展趋势、IBM System p5的技术优势以及具体的产品家族和热点产品。 首先,UNIX计算经历了三个阶段:工作站阶段、单一服务器阶段和系统整合...

    IBM System p5最新产品简介--updateV35.pptx

    此产品系列是IBM在技术领域的创新体现,尤其是在RAS(Reliability, Availability, Serviceability)特性、性能优势以及服务器整合方面。 首先,我们来看UNIX计算的发展趋势。从第四页的内容可以看出,UNIX计算经历...

    Course AIX Student

    ### 课程概述 - **课程名称**:“AIX基础”(Course Code AU13) - **学生手册**:ERC9.0版本,IBM认证课程材料V3.1 - **版权信息**:版权所有 © International Business Machines Corporation 1995, 2005。所有...

    hllvm.借HSDB来探索HotSpot VM的运行时数据1

    【描述】:本篇文章旨在探讨Java内存模型中不同类型的变量——包括静态变量t1、实例变量t2和局部变量t3——在HotSpot VM中的存储位置。我们将借助HSDB(HotSpot Serviceability Agent的调试器)来探索实际运行时的...

    PPR(Post Package Repair)功能简介

    **RAS(Reliability, Availability, and Serviceability)**是一套旨在提升内存系统可靠性的技术体系。将PPR纳入RAS体系中,使其成为一种有效的修复手段,对于提高内存系统的整体可靠性至关重要。 - **修复策略**: ...

    System x3690 X5 7148 和 7149 型安装和用户指南

    - **可靠性、可用性和可维护性**:文档强调了RAI(Reliability, Availability, and Serviceability)的设计理念,确保系统稳定运行。 #### 四、IBM Systems Director - **管理工具**:IBM Systems Director是一款...

    NetApp EF560 用户操作手册

    《NetApp EF560 用户操作手册》是针对NetApp公司的一款高性能全闪存存储阵列——EF560的设计和操作进行详细阐述的技术报告。该文档旨在为销售工程师、合作伙伴、服务提供商以及最终用户提供一个了解EF560系统特性的...

    HPBCS产品介绍.pptx

    本文件主要介绍了HPBCS中的核心组件——下一代 Integrity 服务器(Next Generation Integrity Systems, NGIS)。NGIS是惠普基于Itanium处理器的高端服务器平台,它为运行关键业务应用提供了高可用性、可扩展性和安全...

    Fujitsu(富士通)发布全新SPARC64 Ⅶ4核处理器.pdf

    标题提及的"Fujitsu(富士通)发布全新SPARC64 Ⅶ4核处理器"是关于富士通公司推出的一款高性能处理器——SPARC64 Ⅶ4。这款处理器设计用于高端计算平台,拥有四个内核和八条线程,最大频率可达2.52GHz,相较于上一代...

    品质内涵、全面品质管理与ISO 9000品保系统简介(ppt 76页).pptx

    6. 服务性(Serviceability):服务的速度、价格竞争性和维修便利性。 7. 美学(Aesthetics):产品的外观、感觉和感官体验。 8. 意识到的品质(Perceived Quality):基于品牌、广告等无形因素对品质的主观评价。 ...

    HCIA-HarmonyOS Application Developer V1.0 学员用书.pdf

    知识点一:HarmonyOS概述 HarmonyOS是一套面向全场景分布式操作系统,其系统定义着眼于跨多种设备无缝协同工作。技术特性包括确定时延引擎和高性能IPC技术,可以有效解决现有系统性能不足的问题,为用户带来更加流畅...

Global site tag (gtag.js) - Google Analytics