`
fanrey
  • 浏览: 252192 次
  • 性别: 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();
}
 


}

}
分享到:
评论

相关推荐

    bosun-jmx:将JMX统计信息输入到Bosunopentsdb

    主机和端口与JMX调试端口所在的位置有关。 app-under-test是一个字符串字段,可用于区分输出中的特定java进程(在收集器输出中生成“ appname”的标签/ v。)如果使用属性文件,则需要指定它作为bosun-jmx.jar文件...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同) 1.4.12 JCA(Java连接器体系) 1.5 小结 第二章 MVC模式介绍 2.1 MVC模式概述 2.1.1 MVC模式的设计思想 2.1.2 MVC模式的处理过程 2.2 Model规范 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同) 1.4.12 JCA(Java连接器体系) 1.5 小结 第二章 MVC模式介绍 2.1 MVC模式概述 2.1.1 MVC模式的设计思想 2.1.2 MVC模式的处理过程 2.2 Model规范 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同) 1.4.12 JCA(Java连接器体系) 1.5 小结 第二章 MVC模式介绍 2.1 MVC模式概述 2.1.1 MVC模式的设计思想 2.1.2 MVC模式的处理过程 2.2 Model规范 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    1.4.10 JMX(Java分布式管理) 1.4.11 JACC(Java容器授权合同) 1.4.12 JCA(Java连接器体系) 1.5 小结 第二章 MVC模式介绍 2.1 MVC模式概述 2.1.1 MVC模式的设计思想 2.1.2 MVC模式的处理过程 2.2 Model规范 ...

    Hadoop权威指南(中文版)2015上传.rar

    Java管理扩展(JMX) 维护 日常管理过程 委任节点和解除节点 升级 第11章 Pig简介 安装与运行Pig 执行类型 运行Pig程序 Grunt Pig Latin编辑器 示例 生成示例 与数据库比较 PigLatin 结构 语句 表达式 1.4.4 类型 ...

    Hadoop权威指南 第二版(中文版)

     Java管理扩展(JMX)  维护  日常管理过程  委任节点和解除节点  升级 第11章 Pig简介  安装与运行Pig  执行类型  运行Pig程序  Grunt  Pig Latin编辑器  示例  生成示例  与数据库比较  PigLatin  ...

    MySQL5.1参考手册官方简体中文版

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

    MySQL 5.1参考手册

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

    mysql官方中文参考手册

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

    MYSQL中文手册

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE...

    MySQL 5.1参考手册中文版

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法...

    springboot参考指南

    改变应用程序外部配置文件的位置 iii. 63.3. 使用'short'命令行参数 iv. 63.4. 使用YAML配置外部属性 v. 63.5. 设置生效的Spring profiles vi. 63.6. 根据环境改变配置 vii. 63.7. 发现外部属性的内置选项 iii. 64....

    MySQL 5.1参考手册 (中文版)

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

    mysql5.1中文手册

    在多服务器环境中使用客户端程序 5.13. MySQL查询高速缓冲 5.13.1. 查询高速缓冲如何工作 5.13.2. 查询高速缓冲SELECT选项 5.13.3. 查询高速缓冲配置 5.13.4. 查询高速缓冲状态和维护 6. MySQL中...

    MySQL 5.1官方简体中文参考手册

    12.10. 与GROUP BY子句同时使用的函数和修改程序 12.10.1. GROUP BY(聚合)函数 12.10.2. GROUP BY修改程序 12.10.3. 具有隐含字段的GROUP BY 13. SQL语句语法 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 ...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ │ 深入理解Java内存模型.pdf │ │ │ └─课后资料 │ ├─笔记 │ │ 淘淘商城_day20_课堂笔记.docx │ │ │ └─视频 │ 07-使用Jedis连接集群操作.avi │ 00-今日大纲.avi │ 01-RDB持久化方式.avi │ 02...

Global site tag (gtag.js) - Google Analytics