关闭

在Java SE 6中监视和诊断性能问题(上)

发表于:2010-6-11 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

  使用 MBeanServer 接口进行间接访问

  平台 MBeanServer 接口使用 MXBeanServerConnection,使您能够连接到远程 JVM 并访问运行在这些平台上的 MXBean。您可以使用 ManagementFactory 类的 getPlatformMBeanServer 方法访问平台 MBean 服务器。清单 2 演示了如何获得运行在远程 JVM 上的 RuntimeMXBean 并获得 VmVendor 属性的值:

  清单 2. 间接访问 MXBean

MBeanServerConnection serverConn;
try {
//connect to a remote VM using JMX RMI
JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://");
JMXConnector jmxConnector = JMXConnectorFactory.connect(url);
serverConn = jmxConnector.getMBeanServerConnection();
ObjectName objName = new
ObjectName(ManagementFactory.RUNTIME_MXBEAN_NAME);
// Get standard attribute "VmVendor"
String vendor =
(String) serverConn.getAttribute(objName, "VmVendor");
} catch (...) { }

  有关 MXBeans 和 java.lang.management API 的更详细信息,请参阅 参考资料 。

  Java SE 6 中的 API 增强

  Java SE 5 引入了 java.util.concurrent.locks 包,它为锁定和等待条件提供了一种框架。这种框架有别于 Java 的内置同步支持并允许更加灵活地使用锁。

  Java SE 6 为 java.lang.management 包的 java.util.concurrent.locks 添加了支持。这包括可提供锁信息的新类以及对 ThreadInfo、ThreadMXBean 和 OperatingSystemMXBean 接口的增强。

  Java SE 6 引入了两个新类:

  LockInfo 包含有关锁的信息。
  MonitorInfo 扩展了 LockInfo 并包含有关对象监视锁的信息。

  ThreadInfo 类利用了这些新的对象以及引入的三种新方法:

  getLockInfo() 返回 LockInfo 对象,给定线程将被阻塞以等待该对象。
  getLockedMonitors() 返回当前被给定线程锁定的 MonitorInfo 对象。
  getLockedSynchronizers() 返回 LockInfo 对象,提供当前由给定线程锁定的可拥有的同步程序。

  在 Java SE 5 中,ThreadMXBean.getThreadInfo 方法只报告线程正在等待获取的对象监视器或是被阻塞的监视器。Java SE 6 对这些方法进行了增强,从而可以报告线程正在等待获取的 AbstractOwnableSynchronizer。

  4 个新的方法被添加到 ThreadMXBean 接口中:

  isObjectMonitorUsageSupported() 将测试虚拟机是否支持对对象监视器的使用情况进行监视。
  isSynchronizerUsageSupported() 测试虚拟机是否对可拥有的同步程序使用情况进行监视。
  findDeadlockedThreads() 返回处于死锁状态的线程的 ID 数组。死锁线程被阻塞,防止进入对象监视器或同步程序。
  dumpAllThreads() 为所有活动线程返回堆栈跟踪和同步信息。

  最后,OperatingSystemMXBean 接口将进行更新,以包括 getSystemLoadAverage() 方法,它可以返回前一分钟的系统负载平均值。

  除了提供编程支持以外,Java SE 6 还包括了一些诊断和故障排除工具,可用来检测问题并监视 JVM 资源使用情况。接下来两节将介绍并演示其中几个可用的诊断工具。

  Java 监视和管理控制台(JConsole)

  Java SE 6 提供了对 JConsole 的正式支持,这是 Java 5 SE 中引入的监视和管理控制台。JConsole 使您能够在运行时监视各种 JVM 资源统计信息。这种特性特别适用于检测死锁、锁竞争、内存泄漏和循环线程。它可以连接到一个本地或远程 JVM 并可用来进行监视:

  线程状态(包括相关的锁)
  内存使用情况
  垃圾收集
  运行时信息
  JVM 信息

  以下小节将介绍 Java SE 6 对 JConsole 做出的增强。有关如何启动和使用 JConsole 的更多信息,请参阅 参考资料。

42/4<1234>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号