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

用JMX调试Java应用程序

 
阅读更多
如果不用jconsole,我们也可以直接用JMX来编程实现jconsole的所有功能。
1. Java应用启动时增加下面的参数:
-Dcom.sun.management.jmxremote.port=6789
-Dcom.sun.management.jmxremote.authenticate=false 
-Dcom.sun.management.jmxremote.ssl=false
这样Java程序起来后会多起一个"JMX server connection timeout"线程和一些RMI线程。

2.写代码连到6789端口,得到所有线程的堆栈信息。
import java.lang.management.ManagementFactory;
import java.lang.management.MemoryMXBean;
import java.lang.management.MemoryUsage;
import java.lang.management.ThreadInfo;
import java.lang.management.ThreadMXBean;
import javax.management.MBeanServerConnection;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;


/**
* @author fanrey
*
*/
public class JMXRemoteTest {

/**
* @param args
*/
public static void main(String[] args) {
String hostName = "127.0.0.1";
String portNum = "6789";
JMXServiceURL u;
try {
u = new JMXServiceURL(
  "service:jmx:rmi:///jndi/rmi://" + hostName + ":" + portNum +  "/jmxrmi");
JMXConnector c = JMXConnectorFactory.connect(u);

MBeanServerConnection conn = c.getMBeanServerConnection();
MemoryMXBean memoryMXBean = ManagementFactory.newPlatformMXBeanProxy(conn, ManagementFactory.MEMORY_MXBEAN_NAME, MemoryMXBean.class);
MemoryUsage heap = memoryMXBean.getHeapMemoryUsage();
    MemoryUsage nonheap = memoryMXBean.getNonHeapMemoryUsage();
    System.out.println(heap);
    System.out.println(nonheap);

    ThreadMXBean tb = ManagementFactory.newPlatformMXBeanProxy(conn, ManagementFactory.THREAD_MXBEAN_NAME, ThreadMXBean.class);
    System.out.println("Thread count: "+tb.getThreadCount());
    long[] ct = tb.getAllThreadIds();
    for (int i = 0; i < ct.length; i++) {
        ThreadInfo ti = tb.getThreadInfo(ct[i], Integer.MAX_VALUE);
        if (ti != null) {
          System.out.println("Thread name and ID:........" + ti.getThreadName() + " (" + ct[i] + ")");
          System.out.println("Thread state:.............." + ti.getThreadState().toString());
          System.out.print("Lock:......................Name=" + ti.getLockName());
          System.out.print(" OwnerID=" + ti.getLockOwnerId());
          System.out.println(" OwnerName=" + ti.getLockOwnerName());
          System.out.println("Thread blocked:............" + ti.getBlockedCount() + " times / " + ti.getBlockedTime());
          System.out.println("Thread waited:............." + ti.getWaitedCount() + " times / " + ti.getWaitedTime());

          StackTraceElement[] ste = ti.getStackTrace();
          if (ste.length > 0) {
            for (int j = 0; j < ste.length; j++) {
              System.out.println("\t" + ste[j]);
            }
          }
          System.out.println("- - - - - -");
        } else {
          System.out.println("Thread name and ID:........(" + ct[i] + ") (Thread has died.)");
        }
      }
} catch (Exception e) {
e.printStackTrace();
}
 


}

}
分享到:
评论

相关推荐

    Java理论与实践:用JMX检测应用程序

    总的来说,JMX提供了一种标准化、灵活且强大的方式来管理Java应用程序,使得开发者能够在不破坏现有调试工具的情况下,深入了解应用程序的运行状态。通过使用JMX,即使没有特定的管理需求,也能增加对应用程序运行...

    如何用JMX检测应用程序[归纳].pdf

    总的来说,JMX提供了一种标准化的方法来集成管理和监控功能到Java应用程序中,使得开发者能够深入了解应用程序的运行状态,及时发现并解决问题,而无需依赖复杂的调试工具。通过JMX,开发者可以构建出具有自我监控...

    基于Java JMX框架的Prometheus指标导出器.zip

    调试和分析Java应用程序的JMX指标 目标 提供一个可配置的JMX到Prometheus的导出器 支持多种运行模式,包括Java Agent和独立HTTP服务器 提供详细的配置选项,以适应不同的监控需求 支持多种Java版本,包括Java...

    Java调试体系及协议

    Java调试体系及协议是开发和优化Java应用程序的关键组成部分。它为开发者提供了深入理解代码执行流程、定位和修复问题的能力。本文将深入探讨Java Platform Debugger Architecture (JPDA),这是Java调试的基础,以及...

    java jmx操作示例源码

    通过JMX,我们可以远程监控和操作Java应用,以便于调试、性能优化和故障排除。 在这个"java jmx操作示例源码"中,我们可以期待看到如何在实际的Java项目中应用JMX技术。源码通常会包含以下几个关键部分: 1. **...

    Java 分布式应用程序设计

    10. **监控与日志**:通过JMX(Java Management Extensions)和各种日志框架(如Log4j、Logback),开发者可以监控系统状态并记录运行时信息,这对于调试和优化分布式系统至关重要。 以上各点涵盖了Java分布式应用...

    jmx测试包用于检查zabbix的监控项是否正常

    4. **调试**:如果发现不匹配,可以通过JMX客户端进行更深入的调试,查找问题的根源,可能是Zabbix配置错误,也可能是Java应用的MBean配置问题。 总结起来,这个JMX测试包是为了确保Zabbix能够有效地利用JMX接口...

    cmdline-jmxclient-0.10.3.jar

    总的来说,`cmdline-jmxclient-0.10.3.jar` 是一个强大的工具,可以帮助开发者和运维人员便捷地监控和调试Java应用程序,尤其是在Zabbix环境中,它可以提供详尽的Java进程监控数据,确保系统的稳定性和高效运行。...

    Java程序设计实践

    Java程序设计实践是一门深入探讨Java编程技术的课程,它涵盖了广泛的实践应用,旨在帮助学习者掌握编写高效、可靠的Java程序的技能。本课程通过一系列实际项目,如文件传输、远程监控、图书管理系统以及温度检测语言...

    cmdline-jmxclient.zip

    这对于监控和调试Java应用程序至关重要,特别是对于那些需要确保高性能和稳定性的服务器环境。通过JMX,开发者可以获取到如CPU使用率、堆内存分配、垃圾回收日志、线程池状态等关键指标,有助于识别和解决问题。 ...

    jmxtool.jar+jmxri.jar

    标题中的"jmxtool.jar+jmxri.jar"指的是Java Management Extensions (JMX) 工具相关的两个Java档案,它们在Maven仓库中...同时,理解如何使用JMX和相关工具(如jconsole)对于优化和调试Java应用程序具有极大的价值。

    jmx三种访问方式

    Java Management Extensions(JMX)是Java平台中用于管理和监控应用程序、操作系统、网络设备等资源的一种标准框架。通过JMX,开发者可以创建管理代理(MBeans),这些代理暴露了各种管理特性,使得系统管理员可以...

    05-VIP-JVM调优工具详解(预习资料)1

    JVM调优工具是Java虚拟机(JVM)中的一组工具,用于优化和调试Java应用程序。这些工具可以帮助开发者和运维人员更好地了解JVM的运行情况,诊断和解决性能问题。 Jmap命令是JVM调优工具之一,用于查看内存信息。Jmap...

    jmx 入门文档,附有开发实例文档

    总之,JMX是一个强大的工具,它使得开发者能够轻松地为Java应用程序添加管理功能,并与其他管理系统进行集成,提高了应用程序的可管理和可维护性。通过理解MBean的类型和工作原理,以及如何利用MBean服务器和MBean...

    jmx学习资料

    JMX(Java Management Extensions)是Java平台上的一个...结合源码学习和使用工具,JMX可以帮助我们更好地理解和控制我们的Java应用程序。无论是开发人员还是运维人员,熟悉和掌握JMX都将对日常工作带来极大的便利。

    Jmx实例demo下载

    此外,了解JMX还可以帮助你整合其他Java应用服务器的管理功能,如Tomcat、JBoss等,因为这些服务器都支持JMX来暴露其内部状态和配置。熟悉JMX还可以让你更容易地使用各种开源工具,如VisualVM、JConsole等进行性能...

    一个jmx的小例子

    4. **客户端代码**:可能包含用于连接到JMX服务器并操作MBeans的代码,这可以是另一个Java程序或使用图形工具如JConsole。 5. **测试脚本**:如果`jmxtest`包含了测试用例,那么它可能包含了JUnit或其他测试框架的...

    java利用JMX做出不一样的的JVM.docx

    Java Management Extensions (JMX) 是Java平台上的一个标准,它允许开发者管理和监控Java应用程序,包括JVM自身。JMX能够帮助我们获取JVM内存状态、CPU利用率、线程信息以及垃圾收集情况等关键指标。此外,它还支持...

    很好的JMX资料

    7. **最佳实践**:分享如何有效利用JMX来优化和调试Java应用程序,避免常见的陷阱和误区。 总之,这个JMX资料包对于想要深入了解和利用JMX来提升Java服务器管理效率的人员来说,将是一份宝贵的资源。通过学习和实践...

Global site tag (gtag.js) - Google Analytics