适用于Java的8款性能工具

适用于Java的性能工具

跟踪应用程序的性能是一项持续的任务,因此拥有合适的工具非常重要。在开发中起作用的东西在生产环境中可能不那么有用。在这里,我将介绍一些很棒的工具和使用它们的最佳时间。目标是帮助您尽快制作可靠且高性能的应用程序。

1. Java Profilers

JVM配置文件通过跟踪所有方法调用提供大量原始数据,允许您查找CPU和内存消耗热点。一个好的扩展测试是设置一个Apache JMeter作业,以便在链接到分析器时命中你正在开发几千次的端点。这允许您指定生产的内存和CPU要求。

H@4LC4@2KQQMF`FT[JW3MM.png

VISUALVM CPU和堆大小的屏幕截图

优点:非常适合追踪内存泄漏,手动运行垃圾收集然后查看内存消耗的能力可以轻松地突出显示存储错误的类和进程。

缺点:需要直接连接到受监控的JVM; 在大多数情况下,这最终限制了对开发环境的使用。(注意:某些分析器可以以有限的方式处理线程和内存转储。)

常用工具:VisualVM,JProfiler,YourKit和Java Mission Control。

 

2.跟踪Java Web请求和事务

标准分析器专注于整个应用程序中所有方法的性能。这些工具专注于单个Web请求或事务的性能。

Prefix提供有关您的应用的深层次性能详细信息。包括带有生成的SQL的ORM调用,SOAP / REST API调用以及来自最常用的第三方库和框架的跟踪详细信息。

在Web应用程序的容器上使用Java代理设置XRebel,并在应用程序上提供覆盖,提供有关当前请求的详细信息。

像 Prefix 这样的工具可以提供代码正在做的非常详细的跟踪:

ZYI5WG7GLJFWFT7J_C0~`ZV.png

前缀WEB请求跟踪的屏幕截图

优点:这些工具可以为JVM概要分析器中的大量数据提供订单。通过帮助您跟踪请求流,您可以看到哪些类型的方法调用负责您的响应时间。

缺点:仅适用于开发周期。质量保证和生产环境将需要APM解决方案。

 

3. Java应用程序性能管理(APM)

应用程序性能管理(APM)工具承担跟踪生产系统上所有请求的任务。这些分析器的技巧是以智能方式提供正确的信息,以免影响生产性能。这是通过聚合时序统计和采样跟踪来完成的。这为您在生产中运行的代码提供了方法级别的可见性。

B@PEKV168~H3O_WFBI0ZH%1.png

屏幕截图:RETRACE ACTION OVERVIEW

优点:监控最关键环境的能力:生产。通过监控质量保证/暂存来确定生产前的问题。通过分析跟踪和异常来实时调试生产。汇总摘要以查看高度使用的请求,以帮助集中开发时间。

缺点:在所有QA / Staging和Production服务器上运行通常很昂贵。某些工具不支持异步查询,或者未正确调整并降低应用程序速度。

热门工具:New Relic,Microsoft,Stackify,AppDynamics,Dynatrace等

注意:某些提供商(包括Stackify)提供免费试用版,可用于帮助识别即时问题。

比较Retrace和New Relic

比较Retrace和App Insights

 

4.真实用户监控(RUM)

webapps在客户端非常沉重的情况并不少见; 提供交互式体验可能需要大量依赖性,例如Javascript / CSS框架,Web字体和图像。

RUM通过提供资产下载和页面呈现时间的可见性,提供对应用程序依赖性的深入了解。

一些APM产品将此作为附加功能。还有独立的产品,例如Google PageSpeed。

HI6%CQHBWT)~4PP9A@~@XZO.png

屏幕截图:GOOGLE PAGESPEED概述

 

5. JVM性能指标

JVM提供了大量有价值的信息,例如垃圾收集,内存使用和线程计数。该数据可通过JMX获得。

1F60QAMD7WIKHC}TTPHF8HN.png

屏幕截图:JCONSOLE监控堆内存使用情况

 

Stackify Retrace通过App Monitors提供JVM指标监控,并根据发现的应用程序类型自动应用智能默认值。

0G0GVP4S96A(((H[F3AX{CB.png

STACKIFY JVM智能默认监视器的屏幕截图

 

H`NV4(5(WUG4[8`GH`3GRUQ.png

STACKIFY RETRACE JVM指标仪表板的屏幕截图

 

优点:适用于在JVM上运行的任何应用程序,并且易于与JConsole等应用程序连接。

缺点:在登台和生产环境中很难连接。聚合和比较数据可能非常耗时。仅在监视器连接到JVM时收集统计信息。

阅读更多: Java虚拟机:您需要跟踪的关键指标

 

6. Web服务器(Apache / Nginx)访问日志

如果您将Apache或Nginx代理请求发送到Java应用程序服务器,则可以监视访问日志。这是查看请求需要多长时间的快速方法。您可以聚合访问日志以查看最流行/最快/最慢的端点。但是,通过命令行执行此操作可能非常耗时。

对于小型数据集,您可以使用Apache Viewer之类的桌面工具,但对于登台和生产环境,托管日志记录解决方案是理想的选择。

跟踪失败的请求也非常有用,可以通过聚合HTTP响应代码来完成。

优点:通过拖尾访问日志快速获取一些简单的统计数据,或者 – 如果需要更多信息 – 推入日志分析器。

缺点:没有详细说明请求为什么需要的时间。缺少可能有助于指出性能问题原因的POST数据和响应内容。

桌面工具:AWStats和Apache Viewer

托管工具:ELK堆栈,Stackify,Splunk,LogEntries

 

7.跟踪所有Java异常

性能问题的最大原因之一可能是应用程序异常。抛出异常时,会导致线程在收集堆栈跟踪时暂停。即使处理似乎无害的异常也会在服务器负载过重的情况下导致巨大的性能瓶颈。汇总和监控所有异常以发现关键问题,新错误以及随时监控错误率非常重要。

优点:如果您使用Log4j或Logback等日志框架,则易于设置。

缺点:没有

热门工具:APM提供商,Raygun,Stackify

 

8.记忆分析

崩溃后的应用程序内存分析有助于确定内存泄漏的原因。您可以通过将以下参数添加到JVM来指示JVM将堆转储到OutOfMemoryError异常:

-XX:+ HeapDumpOnOutOfMemoryError

堆转储文件可以加载到分析器 – Eclipse MAT中。您可以深入了解Overview或Leaks Suspects报告,以帮助确定内存异常的原因。

WQ1A9FG{O]5}09F5CP_AB]9.png

ECLIPSE MAT的屏幕截图:保留大小的最大对象

 

Java性能工具的结论

最重要的是,使用所有这些工具制作和保持Java应用程序性能比以往更容易。不要被你应该做的所有事情所淹没。首先从低挂果开始,如异常跟踪。至少知道哪些选项对你来说真的很好,我希望你发现这个列表很有帮助。