关于Arthas

Arthas 是一款开源在线 Java 诊断工具,采用命令行交互模式,支持 web 端在线诊断,同时提供丰富的 Tab 自动补全功能,进一步方便进行问题的定位和诊断。得益于 Arthas 强大且丰富的功能,让 Arthas 能做的事情超乎想象。

它可以帮你解决这些问题:

  1. 这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?
  2. 我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?
  3. 遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?
  4. 线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!
  5. 是否有一个全局视角来查看系统的运行状况?
  6. 有什么办法可以监控到 JVM 的实时运行状态?
  7. 怎么快速定位应用的热点,生成火焰图?

arthas文档:
arthas官网
技术文档

怎样使用Arthas

使用arthas-boot(推荐)

curl -O https://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar

输入序号,进入对应的jvm监控

[INFO] arthas-boot version: 3.4.0
[INFO] Found existing java process, please choose one and input the serial number of the process, eg : 1. Then hit ENTER.
* [1]: 33552 ApacheJMeter.jar
  [2]: 6128 org.apache.zookeeper.server.quorum.QuorumPeerMain
  [3]: 17188
  [4]: 43812
  [5]: 59272 org.jetbrains.jps.cmdline.Launcher
  [6]: 10732 org.jetbrains.idea.maven.server.RemoteMavenServer
  [7]: 19260 org/netbeans/Main

Arthas进入界面
在启动arthas后,直接在浏览器中输入,http://127.0.0.1:3658/ 进入web端的控制台(Windows下推荐使用,在web版可以有更多的命令补全可以使用)

基础命令

help——查看命令帮助信息

cls——清空当前屏幕区域

session——查看当前会话的信息

reset——重置增强类,将被 Arthas 增强过的类全部还原,Arthas 服务端关闭时会重置所有增强过的类

version——输出当前目标 Java 进程所加载的 Arthas 版本号

history——打印命令历史

quit——退出当前 Arthas 客户端,其他 Arthas 客户端不受影响

stop——关闭 Arthas 服务端,所有 Arthas 客户端全部退出

keymap——Arthas快捷键列表及自定义快捷键

telnet localhost 3658 ——另起一个窗口进入arthas

如何用arthas监控多个jvm进程

每个arthas启动时,会占用两个端口,一个telnet端口,一个http端口,端口默认是3658
可以通过浏览器中输入http://127.0.0.1:3658/ 直接访问arthas控制台
web端

用arthas监控多个jvm程序时,启动会报错,因为每个arthas程序启动后会有自己的telnet port和http port,端口会冲突
在这里插入图片描述
可以通过以下方式启动,指定其他端口作启动
java -jar arthas-boot.jar --telnet-port 10000 --http-port 10001

如何监控jvm内接口性能

trace 命令可以监控到方法执行的堆栈及耗时

    +---[10.8659ms] com.rkhd.sns.dal.dao.cache.client.JedisOperation:hscanKeyValues() #637

如果方法执行多次,会输出执行的最大值时间、最小时间,执行总时长,循环次数等信息

   +---[min=0.0014ms,max=0.0443ms,total=5.3685ms,count=3255] com.rkhd.paas.metarepo.repository.model.metadata.xobject.Pickoption:getItemId() #346
trace 类名 方法名
eg : trace com.rkhd.restapi.controller.v2.metadata.xobject.impl.ItemControllerImpl getItemList

arthas默认只输出两级堆栈,我想看慢接口的更多信息怎么办

同一个类中内部方法调用,可以通过正则匹配查询多个方法:
trace -E 类名 方法名1|方法名2|方法名3
eg : 
trace -E com.rkhd.ienterprise.base.dbcustomize.service.impl.ItemServiceImpl getAllItemWithCache|loadGlobalPickOptionValue -n 2
后面拼 -n 2 ,指的是查看最近两次的请求
不同类路径的方法深层查看,可以通过追加监听的方式,在一个新的窗口下,对trace命令增强,以达到查看方法内部详情。listenerId为前一个窗口打开监听时的listenerId
eg :
trace com.rkhd.platform.customize.service.PickoptionService getPickOptionByItemIdList --listenerId 15
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐