ChenZhen 搜索
首页 标签 归档 留言板 友链 ChatGPT 提示库 AI工具导航网 🚇开往 关于我

Java线上接口耗时分析神器 Arthas

# 介绍 程序员的日常,总是离不开“调优”和“排查”。尤其当线上环境出现问题,性能瓶颈把人逼疯。这时候,你就需要一款像 **Arthas** 这样的神器来救场。 ## 什么是 Arthas? 简单来说,`Arthas` 是阿里巴巴开源的 `Java` 诊断工具,号称“线上问题终结者”。通过它,我们可以在线上环境下实时监控和分析 `Java` 应用的性能问题。无论是耗时长的接口,还是奇怪的 `CPU` 使用率,都能一网打尽。

ChenZhen 2024-07-06T20:19:32

Java线上接口耗时分析神器 Arthas

介绍

程序员的日常,总是离不开“调优”和“排查”。尤其当线上环境出现问题,性能瓶颈把人逼疯。这时候,你就需要一款像 Arthas 这样的神器来救场。

什么是 Arthas?

简单来说,Arthas 是阿里巴巴开源的 Java 诊断工具,号称“线上问题终结者”。通过它,我们可以在线上环境下实时监控和分析 Java 应用的性能问题。无论是耗时长的接口,还是奇怪的 CPU 使用率,都能一网打尽。

github地址

官网文档地址:

如何使用 Arthas?

Arthas的功能有什么?

你可以通过 Arthas 实现线程分析、内存泄漏检测、CPU 分析、类加载信息查看等一系列高级功能。

这里的说明引用官方文档,有不懂的可以自己去看官方文档,但本文今天要介绍的重点是他的线上接口耗时分析。

首先,确保你的环境满足要求,然后按照如下步骤操作:

1.下载 Arthas:从官方 GitHub 仓库下载 Arthas 的 zip 包并解压。

2.启动 Arthas:进入解压目录,运行 java -jar arthas-boot.jar 。Arthas 会自动找到当前运行的 Java 进程,并提示你选择要诊断的进程。

3.开始诊断:选择相应的进程后,你可以输入各种命令来分析问题。比如:

查看线程状态thread -n 3,显示当前消耗 CPU 最多的 3 个线程。

分析方法调用trace <class-name> <method-name>,跟踪指定方法的调用链,找出瓶颈。 - 比如我要分析类FileDownloadTaskApi中的fileDownload方法的耗时,我们使用如下命令

trace  com.dekeinfo.personnel.controller.filedownloadtask.web.FileDownloadTaskApi fileDownload -n 1

如果方法调用的次数很多,那么可以用-n参数指定捕捉结果的次数。比如上面的例子里,捕捉到一次调用就退出命令

到这里就是等待方法被调用。然后我们调用接口,让接口调用该方法,之后Arthas就会自动记录所有方法的调用时间了

在这里插入图片描述 可以看到listPackageByCondition()这个方法是比较耗时的

默认情况下,trace不会包含jdk里的函数调用,如果希望trace jdk里的函数,需要显式设置--skipJDKMethod false

上面的命令就变成如下方式了

trace --skipJDKMethod false com.test.query.OrderApplicationQueryService listPackage -n 1

其次也可以使用时间筛选命令,比如我们只展示方法调用耗时为>10ms的,则上面的命令变成如下方式

trace com.test.query.OrderApplicationQueryService listPackage '#cost > 10' -n 1

使用#cost > 10'即可

希望这篇文章能帮到你,祝你早日成为调优达人!

如何在docker中使用arthas

有时候我们的项目运行在docker环境中,这就必须把arthas复制到容器内部启动才可以

docker cp arthas-boot.jar xxxxx:/appdata/arthas-boot.jar

然后正常启动就可以了

java -jar arthas-boot.jar
© 版权声明
😀😃😄😁😆😅🤣😂🙂🙃😉😊😇🥰😍🤩😘😗😚😙😋😛😜🤪😝🤑🤗🤭🤫🤔🤐🤨😐😑😶😏😒🙄😬🤥😌😔😪🤤😴😷🤒🤕🤢🤮🤧🥵🥶🥴😵🤯🤠🥳😎🤓🧐😕😟🙁☹️😮😯😲😳🥺😦😧😨😰😥😢😭😱😖😣😞😓😩😫🥱😤😡😠🤬