Arthas学习笔记-程序员宅基地

技术标签: java  arthas  学习笔记  

关于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
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/durie_/article/details/112641152

智能推荐

Altium Designer导入3D模型_没有价值的生命的博客-程序员宅基地

Altium Designer导入3D模型进入3D图形下载网址:http://www.3dcontentcentral.cn/参考博客网址:https://blog.csdn.net/tq384998430/article/details/79584404(注:更详细的可以参考该地址)选择好对应的格式进行下载打开AD软件,并打开pcb库,界面如下所示:+按快捷键(P+O) 即 P...

VHDL——8位单向总线驱动器_364.99°的博客-程序员宅基地

1.逻辑元件图微型计算机的总线驱动中常常用到单线缓冲器,它由多个三态门组成2.VHDL语言library ieee;use ieee.std_logic_1164.all;entity trl_buf8 is port(en : in std_logic; din : in std_logic_vector(7 downto 0); dout : out std_logic_vector(7 downto 0));end trl_buf8;archite

菜鸟的数学建模之路(零):我的数学建模之路_菜鸟的数学建模之路一_最强菜鸟的博客-程序员宅基地

关于数学建模本人开始接触数学建模是在大二第一学期的期末,当时是实验室要求的,集训一两个星期, 不过当时什么都不懂,只能根据题目,去解读别人的数学建模论文,算是对数学建模有了初步了解。真正的有学习到数学建模知识是在大二第二学期之后的暑假集训,时间是2019/7/8-2019/8/10,也就是上个月,为期一个多月的暑假集训,让我真正学到了很多建模知识。本来想着在集训完后就做一个总结,把这个暑假集训的..._菜鸟的数学建模之路一

Socket网络编程判断客户端是否在线_socket 是否在线_鱼香Ross的博客-程序员宅基地

Linux环境下编写的 TCP 服务器,当客户端断开连接时,使用 select 函数的情况下,服务器仍然会接收到一个信号, select 函数会将这个设备描述符标记为可读/写,然后服务器端调用 recv 函数,若 recv 函数返回值为 0,则表示客户端已经断开,服务器需要将对应的 Socket 套接字关闭掉,让数据写回磁盘,并释放文件所占用的资源。..._socket 是否在线

python:序列的增量赋值_python增量赋值_弈鸣coding的博客-程序员宅基地

+=背后的特殊方法是__iadd__(用于就地加法),若a实现了iadd的方法就会调用这个方法,如果没实现,则a+=b这个表达式的效果就是a = a+b一样:首先计算a+b 得到一个性的对象,然后赋值给a也就是说在这个过程中,变量名会不会被关联到新的对象,完全取决于这个类型有没有实现__iadd__这个方法可变序列一般都实现了这个方法,也就是说+=就是就地加法。而不可序列不支持这个操作不可变序列l = (1, 2, 4)print(id(l))l = l*2print(id(l))l*=_python增量赋值

python基础 运算符和字符串_python运输符与字符串-程序员宅基地

#斜体表示不熟悉的知识点链式赋值x=y=123, x=123,y=123系列解包赋值a,b,c=4,5,6类型介绍(type)整数:10/浮点:3.14/布尔:True/字符串:“sxt”数字运算符:浮点除法:/,整除://,取余数:%,幂:**,同时取得商和余数:divmod,返回的是元组十进制转化为二进制:转化原理:|0|0||1|1||2|10| 2^1+0..._python运输符与字符串

随便推点

SpringBoot+Vue实现增删改查分页小案例(源码+数据库+视频讲解)_一个拥有视频增删改查的前端页面代码_小样yx的博客-程序员宅基地

一、效果展示与技术栈数据库:MySQL后端框架:SpringBoot+Spring Data JPA前端框架:Vue-ElementUI二、代码与讲解视频2.1 代码+数据库代码已开源至Giteehttps://gitee.com/yx5411648/crud_demo创建user数据库,再创建userinfo表sql语句如下:CREATE TABLE `userinfo`(`id` int(11) NOT NULL AUTO_INCREMENT, `username` varc_一个拥有视频增删改查的前端页面代码

arm-linux开发环境之(cramfs)文件系统制作_cramfs nandflash 只读_yl837的博客-程序员宅基地

busybox制作文件系统上面的链接是告知如何制作nfs的文件系统,通过NFS测试以后,就可以制作cramfs文件系统了具体如下:1、cramfs文件系统镜像制作由于系统提供制作cramfs文件系统的工具,则可以利用,具体操作如下:$ mkfs.cramfs rootfs rootfs.cramfs2、将rootfs.cramfs拷贝到/tftpboot目录下$ cp rootfs.cramfs /tftpboot3、将rootfs.cramfs 烧写到nand _cramfs nandflash 只读

超牛逼的脑图(思维导图、心电图)_异常心电图 思维导图_草根码农的博客-程序员宅基地

画脑图(mind-mapping)的软件有很多,用得最多的就应该属MindManager、freemind了。其它的还有:mindmeister、mindmapper等。 下面是我在网络中收集到的脑图,顺便整理记录分享一下,很好很强大的,由于太久了找不到出处了。见谅。_异常心电图 思维导图

M1 MacBook安装redis_小芬熊的博客-程序员宅基地

前往Redis官网https://redis.io/download下载.tar.gz的安装包以下以redis-6.2.0.tar.gz为例。_macbook安装redis

八年测试薪水被应届生倒挂,32岁裸辞了,闭关三个月拿到阿里Offer,定级 P7_32岁 p7_自动化软件测试的博客-程序员宅基地

测试技术更迭速度快,如果不想被淘汰,就要掌握主动权,而主动权只有两个字:进阶。所谓进阶,不仅是技术层面需要掌握当下像腾讯,阿里巴巴,字节跳动这些大厂看重和常用的技术,还要懂得底层原理。下面我将会根据这些来进行知识点的整理,和自己对作为一名高级测试需要掌握那些技能的笔记分享,希望能帮助到有心在技术这条道路上一路走到底的朋友!..._32岁 p7