竹子网站建站,专用车网站建设,中国建设银行网站评价,流程做网站jvm开源众所周知 #xff0c;大多数现有的采样Java Profiler都必须在安全的地方进行堆栈跟踪收集。 诸如采样探查器之类的探查器就是这种情况#xff0c;它使用SUN / Oracle管理代理来收集其堆栈跟踪。 这种方法的问题在于#xff0c;由于不是程序中的每个点都不是安全点大多数现有的采样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.htmljvm开源