4

您如何构建一个 AppDynamic 或 New Relic 类型的系统,仅通过在运行应用程序的服务器上安装软件来收集应用程序的性能指标,包括详细的调用树统计信息?

甚至可以在不使用调试信息编译您的应用程序的情况下收集此类指标吗?

构建此类服务时要考虑哪些性能权衡?此类软件如何最大限度地减少它们本身可能对应用程序产生的性能影响。

4

2 回答 2

10

AppDynamics 和 New Relic 都使用标准 BCI 来监控开发人员用来构建应用程序的通用接口(入口和出口点)(例如 Servlet、struts、SOAP、JMS、JDBC,...)。这提供了代码执行的基本框架(调用图),其中包含不到 5% 的已执行代码的时序信息。

秘诀是在减速期间发现剩余 95% 代码执行的时间,而不会在生产 JVM 中产生太多开销。AppDynamics 结合使用内存代理分析和 Java API 调用,然后实时提取剩余的代码执行。这意味着不需要自定义检测或明确声明您希望监控解决方案检测哪些类/方法。

AppDynamics 的数据收集与 New Relic 的数据收集非常不同。例如,使用 AppDynamics,您可以获得针对特定用户请求的跨多个 JVM 的完整分布式调用图,而不是请求的聚合。

如今,BCI 是一种商品,不同之处在于供应商使用的分析和算法触发诊断/调用图信息,因此您最终在正确的时间获得正确的可见性来解决问题。

史蒂夫。

于 2013-07-02T05:52:04.220 回答
6

这些产品通常的工作方式是对常用的库和方法进行字节码注入/函数插入/猴子补丁。例如,您可能会连接到 JDBC 查询方法、servlet 基类和 HTTP 客户端库。当请求进入应用程序时,跟踪它所做的所有重要方法/调用,并以某种方式记录它们。获取数据并将其加工成分析、图表和警报。

最重要的是,您可以开始添加统计分析或其他选项。

棘手的事情是跨流程边界跟踪请求并处理您将收集的大量性能数据。(我在 AppNeta 解决这个问题)

要检查的一件事是 Twitter Zipkin ( https://github.com/twitter/zipkin ),它不支持太多且相当早期但有趣的项目。

于 2013-07-02T02:56:59.617 回答