性能诊断工具Arthas

最近在做项目的微服务性能优化,快结尾了,做一下总结,里面关于使用到阿里巴巴的arthas的地方和心得

官方教程:Arthas教程 github

Bootstrap Arthas

EXAMPLES:
  java -jar arthas-boot.jar <pid>
  java -jar arthas-boot.jar --target-ip 0.0.0.0
  java -jar arthas-boot.jar --telnet-port 9999 --http-port -1
  java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws'
  java -jar arthas-boot.jar --tunnel-server 'ws://192.168.10.11:7777/ws'
--agent-id bvDOe8XbTM2pQWjF4cfw
  java -jar arthas-boot.jar --stat-url 'http://192.168.10.11:8080/api/stat'
  java -jar arthas-boot.jar -c 'sysprop; thread' <pid>
  java -jar arthas-boot.jar -f batch.as <pid>
  java -jar arthas-boot.jar --use-version 3.1.4
  java -jar arthas-boot.jar --versions
  java -jar arthas-boot.jar --session-timeout 3600
  java -jar arthas-boot.jar --attach-only
  java -jar arthas-boot.jar --repo-mirror aliyun --use-http
WIKI:
  https://alibaba.github.io/arthas

Options and Arguments:
 -h,--help                      Print usage
    --target-ip <value>         The target jvm listen ip, default 127.0.0.1
    --telnet-port <value>       The target jvm listen telnet port, default 3658
    --http-port <value>         The target jvm listen http port, default 8563
    --session-timeout <value>   The session timeout seconds, default 1800
                                (30min)
    --arthas-home <value>       The arthas home
    --use-version <value>       Use special version arthas
    --repo-mirror <value>       Use special maven repository mirror, value is
                                center/aliyun or http repo url.
    --versions                  List local and remote arthas versions
    --use-http                  Enforce use http to download, default use https
    --attach-only               Attach target process only, do not connect
 -c,--command <value>           Command to execute, multiple commands separated
                                by ;
 -f,--batch-file <value>        The batch file to execute
    --height <value>            arthas-client terminal height
    --width <value>             arthas-client terminal width
 -v,--verbose                   Verbose, print debug info.
    --tunnel-server <value>     The tunnel server url
    --agent-id <value>          The agent id register to tunnel server
    --stat-url <value>          The report stat url
 <pid>  
基本命令
  • help : 查看命令帮助信息
  • cat : 打印文件内容
  • echo : 打印参数
  • grep : 匹配查找
  • tee : 复制标准输入到标准输出和指定的文件
  • pwd : 返回当前的工作目录
  • cls : 清空当前屏幕区域
  • session : 查看当前绘话的信息
  • reset : 重置增强类,将被arthas增强过的类全部还原,arthas服务端关闭时会重置所有增强过的类
  • version : 输出当前目标java进程所加载的arthas版本号
  • history : 打印命令历史
  • quit : 退出当前arthas客户端,其他arthas客户端不受影响
  • stop : 关闭arthas服务端,所有arthas客户端全部退出
  • keymap : arthas快捷键列表及自定义快捷键
jvm相关命令
  • dashboard : 当前系统的实时数据面板
  • thread : 查看当前jvm的线程堆栈信息
  • jvm : 查看当前jvm信息
  • sysprop : 查看和修改jvm的系统属性
  • sysenv : 查看jvm的环境变量
  • vmoption : 查看和修改jvm里诊断相关的option
  • perfcounter : 查看当前jv,的perf counter信息
  • logger : 查看和修改logger
  • getstatic : 查看类的静态属性
  • ognl : 执行ognl表达式
  • mbean : 查看Mbean的信息
  • heapdump : dump java heap,类似jmap命令的heap dump功能
class/classloader相关
  • sc : 查看JVM已加载的类信息
  • sm : 查看已加载类的方法信息
  • jad : 反编译指定已加载类的源码
  • mc : 内存编译器,内存编译.java文件为.class文件
  • redefine : 加载外部的.class文件,redefine到JVM里
  • dump : dump 已加载类的 byte code 到特定目录
  • classloader : 查看classloader的继承树,urls,类加载信息,使用classloader去getResource
monitor/watch/trace相关

请注意,这些命令,都通过字节码增强技术来实现的,会在指定类的方法中插入一些切面来实现数据统计和观测,因此在线上、预发使用时,请尽量明确需要观测的类、方法以及条件,诊断结束要执行 stop 或将增强过的类执行 reset 命令。

  • monitor : 方法执行监控
  • watch : 方法执行数据观测
  • trace : 方法内部调用路径,并输出方法路径上的每个节点耗时
  • stack : 输出当前方法被调用的调用路径
  • tt : 方法执行数据的时空隧道,记录下指定方法每次调用的入参和返回信息,并能对这些不同的时间下调用进行观测
profile/火焰图
  • profiler : 使用async-profiler对应用采样,生成火焰图
  • options : 查看或者设置arthas全局开关
管道

Arthas支持使用管道对上述命令的结果进行进一步的处理,如sm java.lang.String * | grep 'index'

  • grep : 搜索满足条件的结果
  • plaintext : 将命令的结果去除ANSI颜色
  • wc : 按行统计输出结果
后台异步任务

当线上出现偶发的问题,比如需要watch某个条件,而这个条件一天可能才会出现一次时,异步后台任务就派上用场了

  • 使用 > 将结果重写向到日志文件,使用 & 指定命令是后台运行,session断开不影响任务执行(生命周期默认为1天)
  • jobs——列出所有job
  • kill——强制终止任务
  • fg——将暂停的任务拉到前台执行
  • bg——将暂停的任务放到后台执行
web console

通过 websocket连接arthas
Arthas目前支持Web Console,用户在attach成功之后,可以直接访问:http://127.0.0.1:3658/。
可以填入IP,远程连接其它机器上的arthas。
默认情况下,arthas只listen 127.0.0.1,所以如果想从远程连接,则可以使用 --target-ip参数指定listen的IP,更多参考-h的帮助说明。 注意会有安全风险,考虑下面的tunnel server的方案。

使用arthas tunnel server连接远程arthas

Arthas tunnel server是一个spring boot fat jar应用,直接java -jar启动:

java -jar  arthas-tunnel-server.jar

默认情况下,arthas tunnel server的web端口是8080arthas agent连接的端口是7777

以java agent 方式启动
用户数据回报

3.1.4版本后,增加了用户数据回报功能,方便统一做安全或者历史数据统计。

在启动时,指定stat-url,就会回报执行的每一行命令,比如: ./as.sh --stat-url 'http://192.168.10.11:8080/api/stat'

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值