编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

开发运维:8类需要知道的Java性能工具

wxchong 2024-10-09 21:09:24 开源技术 11 ℃ 0 评论

8类需要知道的Java性能工具

原址:https://stackify.com/java-performance-tools-8-types-tools-need-know/

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

本篇文章只是简单引介,有兴趣的读者可以对各个专题进一步深究。

1.Java Profilers(Java分析器)

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

流行工具有: VisualVM, JProfiler, YourKit and Java Mission Control.

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

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

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

2.跟踪Java Web请求和事务

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

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

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

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

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

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

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

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

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

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

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

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

4.真实用户监控(RUM)

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

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

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

5. JVM性能度量

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

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

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

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

阅读更多:Java虚拟机:您需要跟踪的关键指标(https://stackify.com/jvm-metrics/)

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

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

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

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

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

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

桌面工具:AWStats和Apache Viewer

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

阅读更多:13种在Windows上备份日志文件的方法& Linux(https://stackify.com/13-ways-to-tail-a-log-file-on-windows-unix/)

7.跟踪所有Java异常

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

阅读更多:GWB如何发现隐藏的异常和应用程序性能问题(https://stackify.com/finding-hidden-exceptions-application-performance-problems-apm/)

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

缺点:没有

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

8.内存分析

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

-XX:HeapDumpOnOutOfMemoryError

堆转储文件可以加载到分析器 - Eclipse MAT(https://www.eclipse.org/mat/)中。 您可以深入了解Overview或Leaks Suspects报告,以帮助确定内存异常的原因。

Java性能工具的结论

最重要的是,使用所有这些工具创建和维持Java应用程序性能比以往更容易。 不要被你应该做的所有事情所淹没。 首先从低处开始,如异常跟踪。 至少知道哪些选项可供有效使用是真的很好,我希望您发现此列表很有用。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表