使用JVMTI创建调试和监控代理
Java 虚拟机工具接口(JVMTI)提供了一个编程接口,允许你(程序员)创建software agent 来监视和控制你的Java应用。 JVMTI 代替了原来的Java Virtual Machine Profiling Interface(JVMPI)。
这里说一下JVMTI的应用,比如我们使用的Eclipse中的调试工具就是基于JDPA(包含了JVMTI)实现的。JDPA组成模块分为三个部分,最底层的JVMTI监控JVM,JDWP完成数据传输,JDI接收用户命令:(Java Platform Debugger Architecture, JVM Tool Interface, Java Debug Wire Protocol,Java Debug Interface)

一个Agent利用这些interface提供的功能,注册监听感兴趣的事件,当它们发生时收到通知,来查询和控制那些应用。JVMTI 的 文档在这里 here。一个JVMTI agent 对于debugging 和 程序调优 很有用。 它可以获取程序多方面的信息, 比如内存分配,CPU使用率和lock竞争。
官方强烈建议使用JVMTI,而不是JVMPI。 JVMTI在很多方面的功能性和效率相对于JVMPI都得到了提升。比如:
- JVMTI依赖于对每个事件的回调。这比JVMPI使用event structure并且需要编组和解编的设计更有效。
- JVMTI提供的功能是JVMPI的4倍(包括很多获取变量、域、方法、类信息的功能)。在 Function Index Page ,可以看到全部的JVMTI function。
- JVMTi提供了更多的不同类型事件的通知。 包括异常事件,域访问和修改事件,断点和单步调试事件。
- 一些JVMPI中的事件被降级,这些事件包括:JVMPI没有充分利用的 (比如 arena new and delete),或者 可以通过字节码增强更好实现的 ,或者JVMTI能更好完成的(比如堆转储和实例分配)。
- 对于相应的性能影响,JVMTI是基于容量(capabilitiy) 的,而JVMPI是 ”all or nothing“。
- JVMPI 的堆功能不具有伸缩性质(heap functionality did not scale )
- JVMPI 没有返回错误信息
- JVMPI深入影响了VM的实现,导致了维护问题和性能影响
- JVMPI是实验性质的,将很快被终止。
参考文章:
Oracle 官方tutorial Creating a Debugging and Profiling Agent with JVMTI
IBM java技术文章 深入Java调试体系
使用JVMTI创建调试和监控代理的更多相关文章
- 线程池的介绍和使用,以及基于jvmti设计非入侵监控
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 五常大米好吃! 哈哈哈,是不你总买五常大米,其实五常和榆树是挨着的,榆树大米也好吃, ...
- Oracle监控代理安装ITM(IBM Tivoli Monitoring)
1 监控代理安装 2 1.1 安装 2 1.1.1 解压安装包 2 1.1.2 安装 2 1.2 配置 5 1.2.1 给Agent授权 5 1.2.2 配置Oracle Agent 10 目录 1 ...
- zabbix监控代理zabbix-proxy
新公司监控用的zabbix,其中用到了zabbix-proxy,原先没有尝试弄过,现在先提前安装看看,以便后续使用查阅. Zabbix-proxy 是一个监控代理服务器,它收集监控到的数据,先存放在缓 ...
- C#报错:创建调试信息文件 ……obj\Debug\model.pdb: 拒绝访问
错误:创建调试信息文件“.......\obj\Debug\model.pdb”时发生错误 --“......\obj\Debug\model.pdb: 拒绝访问. 解决办法如下: 删除该项目下的 b ...
- Visual Studio2013创建、公布监控Windows Azure网站
原文 Visual Studio2013创建.公布监控Windows Azure网站 随着Visual Studio 2013的发布,现在我们可以在Visual Studio内部实现Windows A ...
- Ionic2开发环境搭建、项目创建调试与Android应用的打包、优化
Ionic2开发环境搭建.项目创建调试与Android应用的打包.优化. windows下ionic2开发环境配置步骤如下: 下载node.js环境,稳定版本:v6.9.5 下载android stu ...
- 04Spring_bean 后处理器(后处理Bean),BeanPostProcessor ,bean创建时序,动态代理
这篇文章很重要,讲解的是动态代理,以及bean创建前后的所发生的事情.介绍一个接口:在Spring构造Bean对象过程中,有一个环节对Bean对象进行 后处理操作 (钩子函数) ----- Sprin ...
- VS中调试时监控线程的最后错误代码
进行调试的时候,监控线程的最后错误代码是非常有用的. 在 Microsoft Visual studio 中,Microsoft 的调试程序支持一个非常有用的特性,即可以配置 Watch 窗口,以便始 ...
- 微信公众号本地断点调试(frp反向代理或Remote Debugger)
问题描述: 需要开发微信授权和订阅推送,但是感觉调试不方便,就试着几种方式.因为是用的C#开发,Visual Studio工具自带配套的远程工具 (Remote Debugger).但是感觉不稳定,容 ...
随机推荐
- 每天一个linux命令(1):ls命令
1. 命令格式: ls [选项] [目录名] 2. 命令功能: 列出目标目录中所有的子目录和文件. 4. 常用范例: 例一:列出/home/peidachang文件夹下的所有文件和目录的详细资料 命令 ...
- NIO与AIO,同步/异步,阻塞/非阻塞
1.flip(),compact(),与clear()的使用 flip()内部实现,先将limit设为当前位置,再将缓冲区的postion设为0,所以是为将缓冲区的数据写出到其它通道或者get()作准 ...
- 374&375. Guess Number Higher or Lower 1&2
做leetcode的题 We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You ...
- 尽量不要用ad,adv···,advertisement 这些关键词命名
html dom,文件夹名称,文件名称·······,都尽量不用ad,adv···,advertisement 这些关键词! 为嘛呢? 因为会被浏览器的广告插件自动给屏蔽掉. 我的网站中有一个广告管 ...
- OpenFlow:Enabling Innovation in Campus Networks
SDN领域,OpenFLow现在已经成为了广泛使用的南向接口协议.若想好好学习SDN,在这个领域有所进步,需要熟悉OpenFlow协议.我最近找了篇有关OpenFLow的论文,发现最早该协议是在Sig ...
- POJ1273Drainage Ditches[最大流]
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 71559 Accepted: 2784 ...
- MyBatis 智能标签
使用Where 只能标签 检索部门Y2162Dept 数据库已存在表Y2162Dept 实现动态查询 Deptno Deptname 赋值 不赋值 不赋值 赋值 赋值 赋值 不赋值 不赋值 <! ...
- [MVC]如何删除文章内容中的图片
1.实现代码 if (!string.IsNullOrWhiteSpace(entity.Content)) { var immgList = TextHelper.GetImgUrlList(ent ...
- java并发编程学习: 守护线程(Daemon Thread)
在正式理解这个概念前,先把 守护线程 与 守护进程 这二个极其相似的说法区分开,守护进程通常是为了防止某些应用因各种意外原因退出,而在后台独立运行的系统服务或应用程序. 比如:我们开发了一个邮件发送程 ...
- Golang gzip的压缩和解压
package src import ( "bytes" "compress/gzip" ) func GzipEncode(in []byte) ([]byt ...