科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件JROCKIT 5.0——轻松玩转JVM

JROCKIT 5.0——轻松玩转JVM

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  BEA JRockit Java虚拟机(JVM)所带来的不仅仅是性能的提升。本文探讨了JRockit 5.0 R26版本可用的一些管理和使用方面的特性

作者:中国IT实验室 来源:中国IT实验室 2007年8月24日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

  用户动作是可以与JRockit Management Console上的一组连接进行交互的插件类,同样使用控制台配置文件来存储配置数据。用户动作显示在JRockit控制台图形用户界面的Plugins菜单下,headless模式中也可用。随控制台提供了两个默认用户动作:jrarecording用户动作,对连接的JRockit启动JRA记录;ctrlbreak用户动作,向连接的JRockit发送Ctrl-Break命令(参见本文中关于Ctrl-Break Handler和JRockit运行时分析器的小节)。要指定特定用户动作的参数,可以使用GUI进行配置,也可以编辑Management Console配置文件,后者可以在<user.home>/ManagementConsole/ManagementConsole/consolesettings.<version>.xml文件中找到。

  编写自己的用户动作很容易。首先创建一个AbstractUserAction的子类。该示例演示了如何创建一个从所有连接的JRockit获取线程堆栈转储的用户动作。

package com.example.useractions;
import java.io.IOException;
import java.util.List;
import com.jrockit.console.rjmx.CommonRJMXNames;
import com.jrockit.console.rjmx.RJMXConnectorModel;
import com.jrockit.console.useractions.AbstractUserAction;

/**
 * This is a simple user action, getting stackdumps from 
 * the selected JRockits and printing them on stdout.
 * 
 * @author Marcus Hirt
 */

public class MyUserAction extends AbstractUserAction
{
  public void executeAction(List connections)
  {
    for (RJMXConnectorModel connection : connections)
    {
      if (connection.isConnected())
      {
        try
        {
          System.out.println(CommonRJMXNames.getThreadMXBean(connection).getThreadStackDump());
        }
        catch (IOException e)
        {          
          e.printStackTrace();
        }
      }
    }
  }
}

  接下来,需要在consolesettings.xml文件中配置部属描述符,以便用户动作对于控制台可用。可以在配置文件中发现user_actions元素,它已经填充了一些user_action元素。示例动作的部署描述符应当以相同的样式输入。描述符看起来会是这样:

<user_action>
  <user_action_class>com.example.useractions.MyUserAction</user_action_class>
  <user_action_name>stackdump</user_action_name>
  <user_action_menu_name>Stack Dump on stdout</user_action_menu_name>
  <user_action_description>Gets a stack dump from the selected JRockit(s), and dumps it on stdout.</user_action_description>
</user_action>

  这也使得用户动作在Plugins菜单下的用户界面中可见。

  当控制台启动或退出时,如果有设置/状态需要从配置文件加载/保存,只需重写exportToXml()/importFromXml()方法,如示例中所示:

/**
 * @see com.jrockit.console.util.XmlEnabled
 * #exportToXml(org.w3c.dom.Element)
 */

public void exportToXml(Element parentNode)
{
  super.exportToXml(parentNode);
  XmlToolkit.setSetting(parentNode, MY_PROPERTY, m_myVal);
}
/**
 * @see com.jrockit.console.util.XmlEnabled
 * #initializeFromXml(org.w3c.dom.Element)
 */
 
 public void initializeFromXml(Element parentNode) 
 {
   super.initializeFromXml(parentNode);
   m_myVal = XmlToolkit.getSetting(parentNode,
     MY_PROPERTY, DEFAULT_MY_VALUE));
}

  注意,用户动作的名称是使用launcher启动参数时将引用的用户动作名称,菜单名是会在GUI菜单中显示的名称。更多的信息请参见user action docs和JLMEXT docs。注意,这只是一个试验性的功能,提供的文档还相当简单,编写定制的通知动作和约束的方式与此类似。更多信息请参见Management Console User Guide。

JRockit发现协议(JDP)
  JDP(JRockit发现协议)是个简单且有效的协议,用于允许JRockit管理服务器向Management Console组播它的存在。下面的两个表分别列出了在服务器端和客户端控制JDP行为的系统属性。

管理服务器的JDP属性

系统属性 描述 默认值
jrockit.managementserver.autodiscovery 启用JRockit发现协议 False
jrockit.managementserver.discovery.period 在两个ping之间需要等待多久(以毫秒为单位) 5000
jrockit.managementserver.discovery.ttl 活跃的跃点数 1
jrockit.managementserver.discovery.address 所使用的组播地址 232.192.1.212
jrockit.managementserver.discovery.port 所使用的组播端口 7095

Management Console的JDP属性

系统属性 描述 默认值
com.jrockit.console.preferences.jdp.port 用于JRockit发现协议的端口 7095
com.jrockit.console.preferences.jdp.address 所使用的组播地址 232.192.1.212

  这里给出了在服务器端启用JDP的情况下,启动JRockit需要最少参数的示例。

java -Xmanagement -Djrockit.managementserver.autodiscovery=true<your program>

  Ctrl-Break Handler

  您是否曾经希望在JVM启动后可以使用一种轻松的方式与其交互?假如说您忘记添加-Xmanagement选项来启动管理服务器,或者您想改变运行系统中GC的冗余级别。这些现在很容易通过重新配置Ctrl-Break Handler来完成,而且它不只是打印堆栈跟踪。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章