Java|3种不同Java分析器,以及为什么需要它们

Java|3种不同Java分析器,以及为什么需要它们

在生产环境中调试性能问题可能是一件痛苦的事情 , 在某些情况下 , 如果没有正确的工具是不可能的 。 Java分析器已经存在了很久 , 但是大多数开发人员想到的分析器只有一种类型 。
1.标准JVM分析器
【Java|3种不同Java分析器,以及为什么需要它们】VisualVM、JProfiler、YourKit和Java任务控制等产品 。
标准Java分析器当然提供了最多的数据 , 但不一定提供了最有用的信息 。 这取决于调试任务的类型 。 这些分析器将跟踪所有方法调用和内存使用情况 。 这允许开发人员以他们选择的任何角度深入研究调用结构 。
优势:
标准探查器非常适合跟踪内存泄漏 , 它详细说明了JVM使用的所有内存以及哪些类/对象负责 。 手动运行垃圾收集 , 然后检查内存消耗的能力可以很容易地将焦点放在错误地保留内存的类和进程上 。
Java探查器通常提供一个CPU采样功能 , 用于按类和方法跟踪和聚合CPU时间 , 以帮助关注热点 。
劣势:
需要直接连接到受监控的JVM;在大多数情况下 , 这最终限制了对开发环境的使用 。 (注意:某些探查器可以以有限的方式进行线程外转储和内存转储 。 )
它们会减慢您的应用程序;提供高水平的细节需要大量的处理能力 。

2.轻量级Java事务分析器
XRebel和StackifyPrefix等产品 。
轻量级分析器通过将自身注入代码中 , 在跟踪应用程序时采用不同的方法 。
方面分析器使用面向方面编程(AOP)将代码注入指定方法的开始和结束 。 注入的代码可以启动计时器 , 然后在方法完成时报告经过的时间 。 这些分析器的设置很简单 , 但您需要知道要评测什么 。 有关示例 , 请参见SpringAOP方法评测 。
Java代理探查器使用JavaInstrumentationAPI将代码注入到应用程序中 。 由于代码是在字节码级别重写的 , 因此此方法可以更好地访问应用程序 。 这允许检测应用程序中运行的任何代码 , 无论是您编写的代码还是您的应用程序所依赖的第三方库 。 查看Java代理简介 , 了解这一切是如何工作的 。
AspectProfiler非常容易设置 , 但在监视内容方面受到限制 , 并且由于详细列出了要跟踪的所有内容而受到阻碍 。 Java代理在跟踪深度方面有很大优势 , 但编写起来要复杂得多 。
3.低开销 , 生产中的JavaJVM评测(APM)
APM工具 , 如NewRelic、AppDynamics、StackifyRetrace、Dynatrace 。
到目前为止 , 所有的探查器都非常适合开发 , 但是跟踪系统在生产中的性能是至关重要的 。 生产始终是一个不同的环境-开发和阶段设置通常不具有相同的数据集和负载 。
JavaAPM工具通常使用Java代理探查器方法 , 但使用不同的检测规则 , 以允许它们在不影响生产性能的情况下运行 。 这些分析器的诀窍是以智能的方式提供正确的信息 , 以避免占用CPU周期 。
为什么有些Java分析器如此昂贵?
APM解决方案的最大问题肯定是它们的定价 。 传统上 , 它们非常昂贵 , 只有最大的企业才能负担得起 。 每月花100美元在Azure或AWS的服务器上 , 然后再每月花200美元购买NewRelic这样的产品 , 这没有多大意义 。
监控工具的成本不应该超过服务器!