快速业务通道

基于JVMTI实现Java线程的监控 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
 insertElem(&ctx_head,&ctx_tail,thr_hash_code,hash_code,name);       }     }   } }

测试监控代理

线程监控代理可以用任何 C 语言编译器编译,并以动态连接库的形式加载到 Java 虚拟机中,监控正在运行的 Java 程序。使用下列命令行加载代理库并运行目标 Java 应用程序:

java -agentlib:ThreadMonitor JavaThreadPoolApp

或者:

java -agentpath:/<Path>/ThreadMonitor JavaThreadPoolApp

为了演示对线程切换的监控,JavaThreadPoolApp 这个样例程序实现了一个 Java 线程池,其中涉及到大量的线程状态的切换。这个应用启动的时候会初始化一个线程池,池内初始化两个子线程,并让它们处于 wait 状态;当有客户端程序需要使用线程池中的某个线程时,使用 notify 将池内的某个线程唤醒;使用完毕后,该线程重新进入 wait 状态等待下一次调度。这些线程切换活动都可以被监控代理所监控,并产生如下输出。结合应用程序的相关信息,可以进一步得出 JavaThreadPoolApp 客户端应用程序使用了线程池中的 Thread-60934352 线程并执行了 3068 毫秒。

Thread-32452561, start, Thread-60934352 Thread-32452561, start, Thread-89877242 Thread-60934352, wait, Thread-60934352, active 8 ms Thread-89877242, wait, Thread-89877242, active 9 ms Thread-32452561, notify, Thread-60934352 Thread-60934352, wait, Thread-60934352, active 3068 ms

使用线程监控代理可以实时监控 JVM 中线程运行情况,帮助开发人员诊断多线程应用中可能存在的线程调度问题。

总结

多线程应用程序的开发存在着诸多挑战,例如线程死锁、资源竞争等。因此,开发人员需要一种运行时线程监控工具来协助诊断和跟踪 Java 线程状态的切换。Sun 公司在 JDK 1.5.0 版本中引进了 JVMTI 接口用于实时监控和分析 JVM 运行状态。

本文首先介绍了 JVMTI接口;然后详细分析了 Java 线程模型,并提出了 Java 线程的监控模型;最后基于 JVMTI 接口实现了 Java 线程监控代理,以协助诊断多线程应用中可能存在的线程调度问题。

本文配套源码

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号