开源JVM Sampling Profiler
众所周知 ,大多数现有的采样Java Profiler都必须在安全的地方进行堆栈跟踪收集。 诸如采样探查器之类的探查器就是这种情况,它使用SUN / Oracle管理代理来收集其堆栈跟踪。 这种方法的问题在于,由于不是程序中的每个点都不是安全点,因此会引入样本偏差,还会引入JVM达到安全点所需时间的开销。
不久前,杰里米·曼森(Jeremy Manson) 开源了一些概念验证代码,在该代码中对AsyncGetCallTrace JVMPI方法进行了调用,从而避免了线程到达安全点以读取其调用跟踪的需要。 该代码在后台注册了一个处理程序函数,该函数在发生sigprof时被调用。 因此,它避免了其他采样分析器遭受的许多分析器精度问题。 使用此方法的缺点是异步回调中的代码对其具有可怕的限制,例如无法堆分配内存。 概念证明代码显示出了很大的独创性,但是作为概念证明,它缺少有用的功能,例如用户界面或对查看程序运行时正在更新的概要分析数据的支持。
我已经完成了此代码转储,并开始将其转换为可用的开源项目。 该程序有两个主要部分。 有一个小型的C ++ jvmti代理,它写出一个日志文件来描述已附加到该应用程序的配置文件。 然后,Java 8应用程序可以基于此日志呈现/显示配置文件。 读写代码基于内存映射文件,因此,如果要将日志文件移动到tmpfs文件系统,它也可以用作共享内存IPC系统。 我还添加了一个GUI,虽然不是一个很好的GUI,但这只是一个开始。
生成日志文件意味着可以离线或追溯分析配置文件。 例如,您可以从性能测试运行中转出日志文件,然后如果发现生产中存在回归,则可以查看历史差异。 通过将当前堆栈跟踪复制到无阻塞,多生产者,单使用者循环队列中,此事件探查器可避免在异步回调中执行的严格限制,该队列预先分配了固定大小的内存块。 然后,另一个线程将这些堆栈跟踪信息写入日志文件中。 另一个线程还需要查找有关诸如方法名称之类的有用信息,因为JVMTI调用查找方法名称信息并不安全。
目前,该代码库尚未准备好投入生产 -我不完全信任很多错误和大量C / C ++代码。请记住,如果JVMTI代理中存在错误,则可能会出现段错误您的JVM。 您已被警告! 源代码位于github上,并且已获得Apache许可。 我将欢迎代码贡献者以及人们的任何反馈。 目前尚处于起步阶段,但我坚信公开开放代码有助于快速提高其质量。
翻译自: https://www.javacodegeeks.com/2014/03/an-open-source-jvm-sampling-profiler.html
开源JVM Sampling Profiler相关推荐
- jvm开源_开源JVM Sampling Profiler
jvm开源 众所周知 ,大多数现有的采样Java Profiler都必须在安全的地方进行堆栈跟踪收集. 诸如采样探查器之类的探查器就是这种情况,它使用SUN / Oracle管理代理来收集其堆栈跟踪. ...
- JVM CPU Profiler技术原理及源码深度解析
本文介绍了JVM平台上CPU Profiler的实现原理,希望能帮助读者在使用类似工具的同时也能清楚其内部的技术实现. 引言 研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能 ...
- Eclipse Open J9:Eclipse OMR项目提供的开源JVM
\ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 自1997年以来,IBM一直致力于开发自己的JVM产品J9 JVM.J9构建为一种闭源的(自 ...
- [开源JVM] yvm - 自制Java虚拟机
中文 | English | | | YVM是用C++写的一个Java虚拟机,现在支持Java大部分功能,以及一个基于标记清除算法的并发垃圾回收器. 不过还有很多bug等待修复. 感兴趣的朋友pull ...
- JVM Profiler介绍
开篇 过去的几周把java多线程相关部分的源码粗粗的看了一遍基本上也算告一段落了,后面应该会聚焦看下dubbo.mycat.datax以及剩下部分的mybatis. 应该是周一的时候公众号推了一篇 ...
- openj9下载_Eclipse OpenJ9:IBM开源自己的JVM
openj9下载 刺激您的Java应用程序 OpenJ9现在是一个Eclipse Incubator项目. 对于那些不知道的人,J9是IBM自己的JVM. Oracle的JVM和IBM的JVM有什么区 ...
- capsule 安装_Capsule:开源的 JVM 应用部署工具
[编者按]本文作者 Ron Pressler 是 Parallel Universe 公司的创始人,拥有着丰富的高性能开发经验.通过这篇文章,Ron 向大家详细介绍了全新的开源 JVM 部署工具--C ...
- Java开源 J2EE框架(二)
Java开源 J2EE框架(二) 2007-01-06 12:34 Jofti [Java开源 其它开源项目] Jofti可对在缓存层中(支持EHCache,JBossCache和OSCache)的对 ...
- java 开源项目(大汇总)
Spring Framework [Java开源 J2EE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而 ...
最新文章
- 使用NAT实现TCP负载均衡
- AI安检:北航提出安检场景下的危险品检测基准和去遮挡注意力模块
- 引用另一个Android工程的方法详解
- 解析Infopath生成的XSN结构
- AOP五大通知注解详解
- 基于容器服务的持续集成与云端交付(四)- 多种发布方式
- Flink 小贴士 (7): 4个步骤,让 Flink 应用达到生产状态
- Linux基础和常用命令
- 如何正确看待LeCun工作调整?听听FAIR研究员们现身说法
- 托福考试前你需要知道哪些事情
- SQL server 数据迁移到mysql
- 为什么程序员大多数都会脱发?( ConcurrentHashMap 并发)
- linux应用层获取鼠标坐标
- ctf:xls加密_加密:爱丽丝和鲍勃的故事
- Initializationfailedforhttps://start.spring.ioPleasecheckURLnetwor的解决方法本人亲测
- 解决百度网盘下载慢的方案
- win10的开机启动目录(文件夹)位置
- 线性回归 原理及公式推导
- 系统清道夫 android2.1,安卓系统清道夫国际版
- C++时间与日期及相关操作
热门文章
- java凯撒密码_JAVA凯撒密码 选择问题
- Java秒杀系统实战系列~RabbitMQ死信队列处理超时未支付的订单(转)
- wxpay-api:pay_J2Pay – API响应
- idea 切换java11_Java 11就在这里,您准备好进行切换了吗?
- maven 父maven_Maven神秘化
- tomee_Apache TomEE + JMS。 从未如此简单。
- 关于Jakarta EE软件包名称更改的思考
- 引入我们全新的YouTube频道进行视频课程编程
- spring预加载与懒加载_通过Spring将继承树加载到List中
- 通过Main的Checkpoint Restore加快Java启动速度