利用PAPI接口监测Java程序的硬件执行特征 - 编程入门网
是线程,特别是多线程的 Java 程序在当前更有着广泛的应用 。因为同一 Java 程序的线程共享处理器的硬件性能计数器,线程的交替执行会导致事件计数的混乱,所 以如果用户要对 Java 程序的硬件执行特征进行监测就必须以 Java 线程为粒度,只有这样才能准确记录 下每个线程的真实数据。因此,在利用 PAPI 接口监测 Java 程序的硬件执行特征时,除了前文表 1 列 出的 PAPI 底层接口,用户还需要用到一些和程序线程监测相关的接口,如表 2 所示。
利用PAPI接口监测Java程序的硬件执行特征(4)时间:2011-10-02 ibm 王峰表 2. 与 程序线程监测相关的 PAPI 底层接口
为了获得 PAPI 对程序线程监测的支持,用户需要在初始化 PAPI 接口库之 后调用 PAPI_thread_init 函数。在被监测线程创建后,用户通过调用 PAPI_thread_id 可以获得线程的 标识符,并利用 PAPI_attach 函数将一个已经创建好的事件组和该标识符代表的线程进行绑定,这样可 以保证在该事件组上进行监测所得的事件计数都是由该线程在运行时产生的,从而准确地获得单个线程的 硬件执行特征而消除了其它线程的干扰。在线程监测完成后,用户需要通过调用 PAPI_detach 函数释放 相关的资源。 用户在利用 C 语言实现的 PAPI 接口监测 Java 程序运行过程中的硬件执行特征时 ,最容易想到的做法就是通过 JNI 接口在 Java 程序中调用本地语言编写的接口和函数。PAPI 的开发者 也试图为用户提供这样的方便,在源文件的 jni 目录下提供了本地方法的封装,但是这部分工作并没有 完成,相关代码没有经过测试并且可能无法使用。另外,JNI 方法需要用户改写被监测 Java 程序的源代 码,这提高了 PAPI 使用的复杂度。针对于此,本文提出了一种更便捷的基于 Java Virtual Machine Tool Interface(JVMTI)的方法利用 PAPI。 JVMTI 提供了一种编程接口,允许用户创建代理程 序(Agent)以监测和控制虚拟机和 Java 应用程序。代理程序可以向运行时的虚拟机订阅其感兴趣的事 件,例如虚拟机和 Java 应用程序执行状态的改变等等。这些虚拟机事件在其发生时会以调用事件回调函 数的方式激活代理程序并被回调函数进行相应的处理。代理程序可以使用任何支持 C 语言标准的本地语 言编写,它以动态链接库的方式存在并在 Java 应用程序启动时被加载。 采用基于 JVMTI 的方法 利用 PAPI 接口监测 Java 程序的硬件执行特征,在设计代理程序时至少需要关注虚拟机启动、虚拟机停 止、应用线程启动、应用线程结束等虚拟机事件并在事件对应的回调函数中调用相关的 PAPI 接口函数。 一般的,在实现过程中,各个虚拟机事件对应的回调函数功能如表 3 所示。 表 3. 虚拟机事件对 应的回调函数功能
|
||||||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |