9个最适合使用的Java分析器

Java分析器工具可以明显的提高问题定位、分析、处理的效率,下面会给大家简单的介绍几款日常工作过程中使用到的Java分析器。

0.什么是 Java 分析器?

Java 分析器是一种用于测量和检查 Java 应用程序性能的工具。它收集程序执行数据,包括每个函数所用的时间、内存使用情况和函数调用频率。

Java 分析有助于查明软件应用程序中的性能瓶颈。分析分析器收集的数据可让开发人员确定导致最明显延迟或资源消耗的代码部分。这些数据可以增强代码、提高性能并减少资源消耗。

因此,Java 分析器是一种在 JVM 级别检查 Java 字节码构造和操作的工具。这些编程结构和操作包括创建对象、重复进程(包括递归调用函数)、执行方法、运行线程和执行垃圾收集。

1.Java 分析器的分类

  • 采样分析器:这些分析器定期对正在运行的程序进行快照,并分析调用堆栈以识别热点。
  • 仪表分析器:这些分析器修改程序的代码以收集更详细的性能数据。

2.Java 分析器的使用场景

Java 分析工具基本上有三种使用方式:

  • 性能优化:开发人员可以利用 Java 分析器来精确定位导致性能问题的代码部分,例如函数调用缓慢或内存使用率过高。可以利用这些数据来增强代码以获得更好的性能。

  • 内存管理:Java 分析器可以帮助检测内存泄漏,即程序无法释放未使用的内存。这些泄漏可能导致内存不足,从而导致程序崩溃。通过精确定位内存泄漏,开发人员可以纠正代码以释放不再需要的内存。

  • 测试:Java 分析器可以评估各种场景下的程序性能,例如不同的输入大小或用户数量。这有助于在程序启动之前识别可能的性能问题。

3.Java 分析器如何工作?

JVM 允许 Java 开发人员将代理附加到正在运行的 JVM(Java 虚拟机)。当开发人员将代理附加到 JVM 时,JVM 将在加载类之前向代理提供一个类。然后,代理将转换该类。代理可以更改任何类的代码。

Java 分析器基本上是代理。它们在方法的开头和结尾添加检测代码,以跟踪它们花费的时间。它们还向每个类的构造函数和 finalize 方法添加代码,以跟踪使用了多少内存。

在 Java 中,可以通过一系列工具实现代码分析,包括内置工具和第三方工具。
一些广受欢迎的工具包括:

  • JVM 工具
  • Digma
  • VisualVM
  • YourKit
  • JProfiler
  • NetBeans Profiler
  • IntelliJ Profiler
  • Async Profiler
  • Arthas

OpenTelemetry 和 Java Flight Recorder (JFR) 涵盖了大多数基础。如果您想要自动检测,请使用 OpenTelemetry Java 代理;如果您想要进行自己的检测,则只需使用 API。

4.Java分析工具

4.1. JVM 工具

这些 Java 分析工具与标准 JDK 捆绑在一起,无需单独安装或设置。大约有五个:jstat、jmap、jcmp、jhat 和 hprof。

4.1.1. jstat

此内置命令行工具随标准 JDK 一起提供,无需安装或设置。通过命令行监控 JVM 内存、堆大小和垃圾收集活动非常有益。

此工具利用 JVM 中默认启用的内置检测功能,通过虚拟机标识符 (VMID) 识别目标 Java 进程,而无需任何特殊命令来启动 JVM。

  • 使用预定义的性能约束运行 Java 程序

java -Xmx125m -Xms25m -Xmn15m -XX:PermSize=30m -XX:MaxPermSize=30m
Demo

  • 您可以使用以下命令获取进程 ID:

ps aux | grep java

  • 要开始监控 JVM 堆内存使用情况,请在终端上使用 -gc 选项运行 jstat。

jstat -gc < vmid > < lines >

4.1.2. jmap

此命令行工具也包含在标准 JDK 中。它显示实时 VM 或核心文件的内存相关数据(堆摘要、java 对象堆直方图、类加载器统计信息、最终化队列信息、以 hprof 二进制格式转储 Java 堆)。检查基本配置和算法特别有益。

我建议使用 JDK 8 中提供的较新的实用程序 jcmd,而不是 jmap 实用程序,以改进诊断并降低性能影响。

以下是如何在终端上使用 jmap

jhsdb jmap –-heap <JAVA_PID>

您还可以使用此命令创建堆转储

jcmd <JAVA_PID> GC.heap_dump filename=

4.1.3. jhat

此命令行工具随标准 JDK 预装(无需安装/设置)。它用于探索堆快照(也称为堆转储)中对象的结构。

此工具是堆分析工具 (HAT) 的替代品。它处理二进制格式的堆转储,例如由 jcmd 生成的转储。

此工具还可以帮助识别意外的对象连接(类似于 Java 中的内存泄漏 - 由于从根集引用而仍在使用的对象)

4.1.4. hprof

此内置命令行工具随标准 JDK 一起提供。它通过分析堆和 CPU 分析、锁争用、内存泄漏和其他问题来检查性能。它是一个通过 Java 虚拟机工具接口 (JVMTI) 与 JVM 通信的动态链接库 (DLL)。它以 ASCII 或二进制形式记录文件或套接字的分析数据。它可以提供有关堆分配统计信息、堆转储、CPU 使用率、JVM 中所有监视器和线程的状态以及争用配置文件的信息。

您可以使用以下命令使用 hprof 对类进行分析。

java –agentlib:hprof HelloWorld

使用以下命令,您可以使用 hprof 获取堆分配配置文件。

javac –J-agentlib:hprof=heap=dump HelloWorld.java

4.2.Digma持续反馈

Digma 依赖于使用 OTEL 自动收集的可观察性数据。与其他分析工具一样,其目的是分析代码在运行时的工作方式并发现问题;唯一的区别是 Digma 会自行持续发现问题。

让我们看几个例子:

  • 查找哪些代码/查询对应用程序的损害最大(性能影响)

您可以在 Assets 选项卡中找到对性能影响最大的代码,并按性能影响对它们进行排序。
此视图对开发人员来说非常有价值,因为它可以快速概览哪些端点可能由于性能问题而需要优化。执行时间和性能影响的结合可以实现优先故障排除和开发重点,从而帮助提高应用程序的整体性能和可靠性。

打开仪表板并使用客户端跨度性能影响小部件:
此小部件可帮助开发人员快速识别其应用程序中的哪一部分可能导致性能问题。他们可以优先考虑调试和优化工作,从标记为对性能影响较大的端点开始。

  • 识别最近提交中的性能下降(持续时间变化)

跟踪代码性能最近变化的另一种方法是持续时间洞察。它以可视化方式呈现特定跨度的调用持续时间分布。

上次调用性能:小部件显示最近调用的持续时间(91.95 毫秒),可以立即将其与典型性能进行比较,以确定其是否在预期范围内或异常值。

中位持续时间:中位持续时间最近已更改(16.19 毫秒)。红色表示最近发生了变化,这可能表明性能下降或提高。

性能分布:直方图本身显示调用持续时间的频率,使开发人员可以快速查看各种性能时间的共性。它显示了某些范围的调用持续时间发生的频率。

最慢的 5%:直方图中代表最慢的 5% 调用的部分会突出显示。这对于识别可能从平均或中位数统计数据中不明显的长尾性能问题至关重要。

使用此洞察,开发人员可以跟踪代码随时间的性能。可视化有助于识别趋势,例如延迟增加,这可能表示潜在问题,例如内存泄漏、低效的数据库查询或其他资源争用问题。表示最近更改的红色块特别有用,因为它可以将性能变化与最近的代码更改或部署更新关联起来,从而促使更立即的调查。

  • 通过分析发现扩展问题(扩展洞察)
    Digma 提供对代码可扩展性的洞察,识别可能阻碍应用程序扩展能力的潜在问题。

例如,借助 Scaling 问题洞察,开发人员可以快速发现与并发处理和请求处理时间相关的性能瓶颈。

性能下降指标有助于确定性能下降的负载级别。此指标可以指导开发人员检查这些事务期间执行的代码路径,以发现效率低下或资源争用。

并发信息通知开发人员系统在处理并发进程或线程时遇到问题。这可能表明应用程序处理并行处理的方式存在问题,或者为应用程序分配的资源不足,无法在此并发级别上实现最佳性能。

时间持续时间:广泛的范围表明响应时间在某些情况下可能会显著增加,这可能是由于处理瓶颈、算法效率低下、数据库查询性能或其他系统限制造成的。

通过综合这些信息,开发人员可以了解应用程序需要注意的方面,并可以开始形成关于可能导致问题的假设,例如代码效率低下、数据库瓶颈、硬件资源不足或架构决策不理想。目标是调查和解决这些领域以提高应用程序的可扩展性。

4.3.VisualVM

此工具在 JDK 8 之前一直是 Java 开发工具包 (JDK) 的一部分,但在 JDK 9 中被删除,目前作为单独的工具提供。

此 Java 分析器可方便地用于 CPU 采样、内存采样、运行垃圾收集、分析堆错误、拍摄快照以及使用图形用户界面。

此 Java 分析器支持本地和远程分析,但不支持通过 SSH 隧道进行分析;您需要配置 JMX 端口以进行远程分析。

VisualVM 允许拍摄分析会话的快照以供以后分析。

VisualVM 依赖于 JDK 附带的其他独立工具,例如 JConsole、jstat、jinfo、jstack 和 jmap。

以下是使用 VisualVM 的三种方式:

  • 使用预定义的性能约束运行 Java 程序

  • java -Xmx125m -Xms25m -Xmn15m -XX:PermSize=30m -XX:MaxPermSize=30m Demo
    在终端上运行 jvisualvm 并开始监控 JVM 堆内存使用情况

  • jvisualvm
    接下来,Java VisualVM 程序将启动。导航至“工具”>“插件”并下载 Visual GC 插件(还将显示其他插件的选择。您可以根据需要使用它们。)。

4.4.YourKit

YourKit Java Profiler 与各种平台兼容,并为每个支持的操作系统(如 Windows、MacOS、Linux、Solaris 和 FreeBSD)提供不同的安装。

与 JProfiler 一样,YourKit 还包括显示线程、垃圾收集、内存使用情况和内存泄漏的基本功能。它支持通过 SSH 隧道进行本地和远程分析。

YourKit 提供商业用途的付费许可证,包括免费试用版和个人用途的折扣或免费许可证。

YourKit 还有助于分析抛出的异常。识别抛出的异常及其频率非常简单。

YourKit 提供了独特的 CPU 分析功能,专注于代码的特定部分,例如方法或线程内的分支。此功能非常有用,因为它允许通过其假设功能进行条件分析。

YourKit 还允许分析 SQL 和 NoSQL 数据库调用。

4.5.JProfiler

JProfiler 是由 ej-technologies 创建的 Java 应用程序分析工具。JProfiler 提供了用于监控内存使用情况、系统性能、潜在内存泄漏和线程分析的接口,并且用户界面友好。

有了这些信息,我们可以轻松识别系统基础中的优化、删除或修改区域。

JProfiler 是由 ej-technologies 创建的 Java 应用程序分析工具。JProfiler 提供了用于监控内存使用情况、系统性能、潜在内存泄漏和线程分析的接口,并且用户界面友好。

有了这些信息,我们可以轻松识别系统基础中的优化、删除或修改区域。

此 Java Profiler 需要购买许可证,但提供免费试用。主要重点是解决四个关键领域:

方法调用:分析方法调用可以深入了解应用程序的功能并帮助提高其整体性能。

分配:通过检查存储在堆中的项目、引用连接和管理废物收集,此功能允许您解决内存泄漏并提高内存效率。

线程和锁:JProfiler 提供线程和锁的各种分析视角,以帮助您识别多线程问题。

高级子系统:许多性能问题出现在更高的语义级别。对于 Java 数据库连接中的 JDBC 调用,识别最慢的 SQL 语句至关重要。JProfiler 允许对这些子系统进行综合检查。

JProfiler 可以与 IntelliJ IDEA、Eclipse 和 NetBeans 等知名 IDE 集成。甚至可以从快照转到实际源代码。

4.6.NetBeans Profiler

尽管 NetBeans 主要因其出色的调试功能而受到认可,但它也出人意料地成为顶级 Java 分析器之一。Apache NetBeans IDE 将 NetBeans Profiler 作为其软件包的一部分。它也是轻松开发和分析的绝佳选择。

结合分析器和调试器的功能,可以监控代码执行时间和运行时行为,并提高多线程等调试方法的效率。Netbeans 分析器可提高应用程序的速度,从而提高内存效率。您可以从他们的网站免费下载它,这真是太好了。

虽然 Java VisualVM 和 Netbeans Profiler 的功能相似,而且都是免费的,但 Netbeans 脱颖而出,在一个带有 IDE 的捆绑程序中提供所有功能。

4.7.IntelliJ Profiler

IntelliJ Profiler 是一款简单但功能强大的工具,用于分析 CPU 和内存分配。它融合了两个著名的 Java 分析器的功能:JFR 和 Async 分析器。

虽然有一些高级功能可用,但主要重点是简单性。IntelliJ Profiler 提供了一种无需设置的简单入门方法,并为我们的日常开发任务提供了有价值的工具。

在 IntelliJ IDEA Ultimate 中,IntelliJ Profiler 可以轻松连接到 Java 进程,从而实现快照与源代码之间的无缝导航。其他方面,例如清晰的火焰图,使我们能够直观地评估各种方法的有效性,并及时有效地了解运行时进程。

4.8.Async Profiler

此 Java 分析工具开销极小,可避免 Safepoint 偏差问题。它包含特定于 HotSpot 的 API,用于收集堆栈跟踪和监控内存分配。分析器与 OpenJDK 和其他使用 HotSpot JVM 的 Java 运行时兼容。

async-profiler 能够监控各种类型的事件。

  • 中央处理单元操作
  • 性能计数器(如缓存未命中、分支未命中、页面错误和上下文切换)监控硬件和软件性能。
  • Java 堆中的内存分布

内容锁定试验,包括 Java 对象监视器和 ReentrantLocks 的内容锁定试验。
在撰写本文时,Async Profiler 仅支持 Linux 和 Mac 操作系统。如果您使用 IntelliJ IDEA,则无需安装任何其他程序。集成是预安装的,包括:

  • 启动和终止分析会话
  • 连接到已在进行的进程
  • 检查配置文件评估。

4.9.Arthas

阿里巴巴 Arthas 是一款诊断 Java 应用程序的工具,提供跟踪、分析和解决问题的功能。使用 Arthas 的一个主要优点是无需修改代码或重新启动受监控的 Java 服务。

如果您在生产中遇到问题,则无法使用 IDE 远程调试应用程序。此外,在生产环境中进行调试是一种不好的做法,因为它会暂停所有线程,进而会暂停业务服务。

作为开发人员,您可以即时排除生产问题故障:无需额外更改代码,无需重新启动 JVM。Arthas 将作为观察者工作,并且不会暂停您现有的线程。

使用单个命令,您可以在 Unix、Linux 和 Mac 上安装 Arthas。

curl -L https://arthas.aliyun.com/install.sh | sh

上面的命令将引导脚本 as.sh 下载到当前目录。然后,您可以将其移动到您想要的任何目录或将其位置放在 $PATH 中。

4.10.其他可靠的 Java 分析器

值得一提的是 Java Mission Control、New Relic、Glowroot、JMH、Arthas、XRebel/JRebel、JProbe、Pinpoint 和 Stackify Prefix。虽然它们占据的市场份额较小,但无疑值得认可。

5.总结

因此,我们发现将 YourKit 和 Digma 结合起来可以获得最佳优化结果:Grafana 用于可视化应用程序日志,YourKit 用于分析应用程序以发现潜在的瓶颈,而 Digma 可以无缝洞察潜在的有问题的代码片段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言 ——— 输入两个正整数,求出最小公倍数

目录 何为最小公倍数 题目要求 代码实现 方法一&#xff1a;暴力求解法&#xff08;不推荐&#xff09; 方法二&#xff1a;递乘试摸法&#xff08;推荐&#xff09; 何为最小公倍数 最小公倍数是指两个或者多个正整数&#xff08;除了0以外&#xff09;的最小的公共倍数…

【LeetCode】205. 同构字符串

认真地分类讨论&#xff0c;评判复杂度&#xff0c;再决定是否要写代码执行。整套流程干净利落&#xff0c;不存在主观臆想&#xff0c;也不会有对事实结果计算的巨大偏差。 1. 题目 2. 分析 这里提供一版可以解题的思路。 定义两个词典&#xff0c;这两个词典分别记录s字符串…

DHC2-2多时段电子式时间继电器 带底座 约瑟JOSEF

DHC2多时段电子式时间继电器 DHC2-H多时段电子式时间继电器 DHC2-1多时段电子式时间继电器 DHC2-2多时段电子式时间继电器 DHC2-3多时段电子式时间继电器 一、特点 超小型面板尺寸DIN 36X36mm(DHC1)、DIN 48X48m(DHC2) 有延时吸合、延时释放、等周期循环三种规格 可替代…

kibana连接elasticsearch(版本8.11.3)

前言 elasticsearch在8版本之后就出现了很大变化&#xff0c;由于kibana版本需要需elasticsearch进行版本对象&#xff0c;kibana连接方式也出现了很大变化。我在这里记录下自己的踩坑记录。 服务部署 本文中的服务都是在docker环境中部署的。其中elasticsearch版本和kibana版…

5G-A通感融合赋能低空经济-RedCap芯片在无人机中的应用

1. 引言 随着低空经济的迅速崛起&#xff0c;无人机在物流、巡检、农业等多个领域的应用日益广泛。低空飞行器的高效、安全通信成为制约低空经济发展的关键技术瓶颈。5G-A通感一体化技术通过整合通信与感知功能&#xff0c;为低空网络提供了强大的技术支持。本文探讨了5G-A通感…

OpenCV 寻找棋盘格角点及绘制

目录 一、概念 二、代码 2.1实现步骤 2.2完整代码 三、实现效果 一、概念 寻找棋盘格角点&#xff08;Checkerboard Corners&#xff09;是计算机视觉中相机标定&#xff08;Camera Calibration&#xff09;过程的重要步骤。 OpenCV 提供了函数 cv2.findChessboardCorners…

什么? CSS 将支持 if() 函数了?

CSS Working Group 简称 CSSWG, 在近期的会议中决定将 if() 添加到 CSS Values Module Level 5 中。 详情可见&#xff1a;css-meeting-bot 、[css-values] if() function 当我看到这个消息的时候&#xff0c;心中直呼这很逆天了&#xff0c;我们知道像 less 这些 css 这些预…

用Speedtest-Tracker跟踪上网速度(续)

什么是 Speedtest Tracker ? Speedtest Tracker 是一款自托管互联网性能跟踪应用程序&#xff0c;可针对 Ookla 的 Speedtest 服务运行速度测试检查。 之前老苏介绍的另一个 https://github.com/henrywhitaker3/Speedtest-Tracker 已被放弃。现在这个是积极维护的替代品&#…

STM32编写代码之嵌入式常用位操作

在单片机编程的过程中&#xff0c;经常会遇到位操作进行赋值&#xff0c;例如 //程序1 int a 0,b 0x5b,c 0; //1 for (i 0; i < 8; i ) { //2a b & (0x80 >> i)); //3 c | (0x80 >> i); //4 } 这些位操作是什么意思呢&#xff1f…

GuLi商城-商品服务-API-品牌管理-JSR303自定义校验注解

自定义注解规则: 可以参考@NotNull注解 package com.nanjing.common.valid;import javax.validation.Constraint; import javax.validation.Payload; import java.lang.annotation.Documented; import java.lang.annotation.Retention; import java.lang.annotation.Target;i…

跨域解决方案

跨域 当发起请求的协议号、域名、端口号中有一个不一样时就会导致跨域 跨域解决方案 分为两个方面&#xff0c;是否可以修改服务器端。 可以修改服务器端&#xff1a;cors方案、jsonp方案 不可以修改服务器端&#xff1a; 使用代理&#xff1a; 因为跨域主要是针对浏览器…

T113-i系统启动速度优化方案

背景: 硬件:T113-i + emmc 软件:uboot2018 + linux5.4 + QT应用 分支:longan 问题: 全志T113-i的官方系统软件编译出的固件,开机启动时间10多秒,启动时间太长,远远超过行业内linux系统的开机速度,需要进一步优化。 T113-i 优化后启动速度实测数据 启动阶段启动时间(…

Fastgpt本地使用Docker Compose 快速部署

使用 Docker Compose 快速部署 FastGPT 部署架构图 MongoDB:用于存储除了向量外的各类数据 PostgreSQL/Milvus:存储向量数据 OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验) 推荐配置 PgVector版本 体验测试首选 环境最低配置(单…

MySql性能调优04-[MySql事务与锁机制原理]

MySql事务与锁机制原理 从undo与redo日志&#xff0c;理解事务底层ACID底层原理事务四大隔离级别事务底层锁机制和MVCC并发优化机制串行化底层实现机制读已提交和可重复读底层实现MVCC机制详解脏写问题(重要)读已提交&#xff1f;实现机制 BufferPool缓存与redo日志是如何提升事…

海康相机GrabImage

#include <stdio.h> #include <Windows.h> #include <process.h> #include <conio.h> #include "MvCameraControl.h"bool g_bExit false;// ch:等待按键输入 | en:Wait for key press void WaitForKeyPress(void) {while(!_kbhit()){Sleep(…

6.S081的Lab学习——Lab11: Network

文章目录 前言Network提示&#xff1a;实现e1000_transmit的一些提示&#xff1a;实现e1000_recv的一些提示&#xff1a; 解析 总结 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招。打算尝试6.S081&#xff0c;将它的Lab逐一实现&#xff0c;并记录期间心酸历程。 代码下…

STM32MP135裸机编程:支持内存非对齐访问

0 前言 使用stm32官方可视化初始化代码生成工具STM32CubeMX生成的工程GCC编译选项默认不支持非对齐访问&#xff0c;在我们进行非对齐的访问时就会进入数据异常中断DAbt中。为了解决这一问题&#xff0c;我们需要在GCC编译选项中加上一处配置。 1 操作方法 右键STM32CubeIDE…

【Linux】:重定向和缓冲区

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家带来关于重定向和缓冲区的相关知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…

Paddle 打包部署

PaddleOCR 打包部署exe 心酸历程 PaddleOCR部署exe模式PaddleOCR安装到本地(稍后有时间再写)PaddleOCR打包过程异常问题记录&#xff01;&#xff01;&#xff01;&#xff01;No such file or directory: D:\\py_project\\paddleOCR\\dist\\paddleOCR\\_internal\\paddleocr\\…

Excel自动化工具-工作簿中sheet页合并-可自行选择需要处理的工作簿

宝子们可以选择直接下载文章顶部资源包【Excel自动化工具-工作簿中sheet页合并.xlsm】&#xff08;或者在博主的资源里下载&#xff09;&#xff0c;该资源功能为&#xff1a;合并sheet页 或者也可以自己编写宏代码&#xff0c;文章最后有附上源代码 没有office excel 的宝子…