如果不用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();
}
}
}
分享到:
相关推荐
总的来说,JMX提供了一种标准化、灵活且强大的方式来管理Java应用程序,使得开发者能够在不破坏现有调试工具的情况下,深入了解应用程序的运行状态。通过使用JMX,即使没有特定的管理需求,也能增加对应用程序运行...
总的来说,JMX提供了一种标准化的方法来集成管理和监控功能到Java应用程序中,使得开发者能够深入了解应用程序的运行状态,及时发现并解决问题,而无需依赖复杂的调试工具。通过JMX,开发者可以构建出具有自我监控...
调试和分析Java应用程序的JMX指标 目标 提供一个可配置的JMX到Prometheus的导出器 支持多种运行模式,包括Java Agent和独立HTTP服务器 提供详细的配置选项,以适应不同的监控需求 支持多种Java版本,包括Java...
Java调试体系及协议是开发和优化Java应用程序的关键组成部分。它为开发者提供了深入理解代码执行流程、定位和修复问题的能力。本文将深入探讨Java Platform Debugger Architecture (JPDA),这是Java调试的基础,以及...
通过JMX,我们可以远程监控和操作Java应用,以便于调试、性能优化和故障排除。 在这个"java jmx操作示例源码"中,我们可以期待看到如何在实际的Java项目中应用JMX技术。源码通常会包含以下几个关键部分: 1. **...
10. **监控与日志**:通过JMX(Java Management Extensions)和各种日志框架(如Log4j、Logback),开发者可以监控系统状态并记录运行时信息,这对于调试和优化分布式系统至关重要。 以上各点涵盖了Java分布式应用...
4. **调试**:如果发现不匹配,可以通过JMX客户端进行更深入的调试,查找问题的根源,可能是Zabbix配置错误,也可能是Java应用的MBean配置问题。 总结起来,这个JMX测试包是为了确保Zabbix能够有效地利用JMX接口...
总的来说,`cmdline-jmxclient-0.10.3.jar` 是一个强大的工具,可以帮助开发者和运维人员便捷地监控和调试Java应用程序,尤其是在Zabbix环境中,它可以提供详尽的Java进程监控数据,确保系统的稳定性和高效运行。...
Java程序设计实践是一门深入探讨Java编程技术的课程,它涵盖了广泛的实践应用,旨在帮助学习者掌握编写高效、可靠的Java程序的技能。本课程通过一系列实际项目,如文件传输、远程监控、图书管理系统以及温度检测语言...
这对于监控和调试Java应用程序至关重要,特别是对于那些需要确保高性能和稳定性的服务器环境。通过JMX,开发者可以获取到如CPU使用率、堆内存分配、垃圾回收日志、线程池状态等关键指标,有助于识别和解决问题。 ...
标题中的"jmxtool.jar+jmxri.jar"指的是Java Management Extensions (JMX) 工具相关的两个Java档案,它们在Maven仓库中...同时,理解如何使用JMX和相关工具(如jconsole)对于优化和调试Java应用程序具有极大的价值。
Java Management Extensions(JMX)是Java平台中用于管理和监控应用程序、操作系统、网络设备等资源的一种标准框架。通过JMX,开发者可以创建管理代理(MBeans),这些代理暴露了各种管理特性,使得系统管理员可以...
JVM调优工具是Java虚拟机(JVM)中的一组工具,用于优化和调试Java应用程序。这些工具可以帮助开发者和运维人员更好地了解JVM的运行情况,诊断和解决性能问题。 Jmap命令是JVM调优工具之一,用于查看内存信息。Jmap...
总之,JMX是一个强大的工具,它使得开发者能够轻松地为Java应用程序添加管理功能,并与其他管理系统进行集成,提高了应用程序的可管理和可维护性。通过理解MBean的类型和工作原理,以及如何利用MBean服务器和MBean...
JMX(Java Management Extensions)是Java平台上的一个...结合源码学习和使用工具,JMX可以帮助我们更好地理解和控制我们的Java应用程序。无论是开发人员还是运维人员,熟悉和掌握JMX都将对日常工作带来极大的便利。
此外,了解JMX还可以帮助你整合其他Java应用服务器的管理功能,如Tomcat、JBoss等,因为这些服务器都支持JMX来暴露其内部状态和配置。熟悉JMX还可以让你更容易地使用各种开源工具,如VisualVM、JConsole等进行性能...
4. **客户端代码**:可能包含用于连接到JMX服务器并操作MBeans的代码,这可以是另一个Java程序或使用图形工具如JConsole。 5. **测试脚本**:如果`jmxtest`包含了测试用例,那么它可能包含了JUnit或其他测试框架的...
Java Management Extensions (JMX) 是Java平台上的一个标准,它允许开发者管理和监控Java应用程序,包括JVM自身。JMX能够帮助我们获取JVM内存状态、CPU利用率、线程信息以及垃圾收集情况等关键指标。此外,它还支持...
7. **最佳实践**:分享如何有效利用JMX来优化和调试Java应用程序,避免常见的陷阱和误区。 总之,这个JMX资料包对于想要深入了解和利用JMX来提升Java服务器管理效率的人员来说,将是一份宝贵的资源。通过学习和实践...