众所周知 ,大多数现有的采样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许可。 我将欢迎代码贡献者以及人们的任何反馈。 目前尚处于起步阶段,但我坚信公开开放代码有助于快速提高其质量。

参考: Insightful Logic博客上的JCG合作伙伴 Richard Warburton提供的开源JVM Sampling Profiler 。

翻译自: https://www.javacodegeeks.com/2014/03/an-open-source-jvm-sampling-profiler.html

开源JVM Sampling Profiler相关推荐

  1. jvm开源_开源JVM Sampling Profiler

    jvm开源 众所周知 ,大多数现有的采样Java Profiler都必须在安全的地方进行堆栈跟踪收集. 诸如采样探查器之类的探查器就是这种情况,它使用SUN / Oracle管理代理来收集其堆栈跟踪. ...

  2. JVM CPU Profiler技术原理及源码深度解析

    本文介绍了JVM平台上CPU Profiler的实现原理,希望能帮助读者在使用类似工具的同时也能清楚其内部的技术实现. 引言 研发人员在遇到线上报警或需要优化系统性能时,常常需要分析程序运行行为和性能 ...

  3. Eclipse Open J9:Eclipse OMR项目提供的开源JVM

    \ 看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料! \ \\ 自1997年以来,IBM一直致力于开发自己的JVM产品J9 JVM.J9构建为一种闭源的(自 ...

  4. [开源JVM] yvm - 自制Java虚拟机

    中文 | English | | | YVM是用C++写的一个Java虚拟机,现在支持Java大部分功能,以及一个基于标记清除算法的并发垃圾回收器. 不过还有很多bug等待修复. 感兴趣的朋友pull ...

  5. JVM Profiler介绍

    开篇  过去的几周把java多线程相关部分的源码粗粗的看了一遍基本上也算告一段落了,后面应该会聚焦看下dubbo.mycat.datax以及剩下部分的mybatis.  应该是周一的时候公众号推了一篇 ...

  6. openj9下载_Eclipse OpenJ9:IBM开源自己的JVM

    openj9下载 刺激您的Java应用程序 OpenJ9现在是一个Eclipse Incubator项目. 对于那些不知道的人,J9是IBM自己的JVM. Oracle的JVM和IBM的JVM有什么区 ...

  7. capsule 安装_Capsule:开源的 JVM 应用部署工具

    [编者按]本文作者 Ron Pressler 是 Parallel Universe 公司的创始人,拥有着丰富的高性能开发经验.通过这篇文章,Ron 向大家详细介绍了全新的开源 JVM 部署工具--C ...

  8. Java开源 J2EE框架(二)

    Java开源 J2EE框架(二) 2007-01-06 12:34 Jofti [Java开源 其它开源项目] Jofti可对在缓存层中(支持EHCache,JBossCache和OSCache)的对 ...

  9. java 开源项目(大汇总)

    Spring Framework [Java开源 J2EE框架] Spring是一个解决了许多在J2EE开发中常见的问题的强大框架. Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而 ...

最新文章

  1. 使用NAT实现TCP负载均衡
  2. AI安检:北航提出安检场景下的危险品检测基准和去遮挡注意力模块
  3. 引用另一个Android工程的方法详解
  4. 解析Infopath生成的XSN结构
  5. AOP五大通知注解详解
  6. 基于容器服务的持续集成与云端交付(四)- 多种发布方式
  7. Flink 小贴士 (7): 4个步骤,让 Flink 应用达到生产状态
  8. Linux基础和常用命令
  9. 如何正确看待LeCun工作调整?听听FAIR研究员们现身说法
  10. 托福考试前你需要知道哪些事情
  11. SQL server 数据迁移到mysql
  12. 为什么程序员大多数都会脱发?( ConcurrentHashMap 并发)
  13. linux应用层获取鼠标坐标
  14. ctf:xls加密_加密:爱丽丝和鲍勃的故事
  15. Initializationfailedforhttps://start.spring.ioPleasecheckURLnetwor的解决方法本人亲测
  16. 解决百度网盘下载慢的方案
  17. win10的开机启动目录(文件夹)位置
  18. 线性回归 原理及公式推导
  19. 系统清道夫 android2.1,安卓系统清道夫国际版
  20. C++时间与日期及相关操作

热门文章

  1. java凯撒密码_JAVA凯撒密码 选择问题
  2. Java秒杀系统实战系列~RabbitMQ死信队列处理超时未支付的订单(转)
  3. wxpay-api:pay_J2Pay – API响应
  4. idea 切换java11_Java 11就在这里,您准备好进行切换了吗?
  5. maven 父maven_Maven神秘化
  6. tomee_Apache TomEE + JMS。 从未如此简单。
  7. 关于Jakarta EE软件包名称更改的思考
  8. 引入我们全新的YouTube频道进行视频课程编程
  9. spring预加载与懒加载_通过Spring将继承树加载到List中
  10. 通过Main的Checkpoint Restore加快Java启动速度