位置: IT常识 - 正文

Arthas-trace命令查看方法性能开销耗时、追踪方法调用路径(arthas常用命令)

编辑:rootadmin
Arthas-trace命令查看方法性能开销耗时、追踪方法调用路径

推荐整理分享Arthas-trace命令查看方法性能开销耗时、追踪方法调用路径(arthas常用命令),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:arthas 命令,arthas查看代码,arthas 查看变量内容,arthas 查看变量内容,arthas trace命令,arthas常用命令,arthas 命令,arthas常用命令,内容如对您有帮助,希望把文章链接给更多的朋友!

trace 命令能主动搜索 class-pattern/method-pattern 对应的方法调用路径,渲染和统计整个调用链路上的所有性能开销和追踪调用链路。

参数说明参数名称-- 参数说明class-pattern类名表达式匹配method-pattern方法名表达式匹配condition-express条件表达式[E]开启正则表达式匹配,默认为通配符匹配[n:]命令执行次数#cost方法执行耗时

这里重点要说明的是观察表达式,观察表达式的构成主要由 ognl 表达式组成,所以你可以这样写"{params,returnObj}",只要是一个合法的 ognl 表达式,都能被正常支持。

观察的维度也比较多,主要体现在参数 advice 的数据结构上。Advice 参数最主要是封装了通知节点的所有信息。

Arthas-trace命令查看方法性能开销耗时、追踪方法调用路径(arthas常用命令)

很多时候我们只想看到某个方法的 rt 大于某个时间之后的 trace 结果,现在 Arthas 可以按照方法执行的耗时来进行过滤了,例如trace *StringUtils isBlank '#cost>100’表示当执行时间超过 100ms 的时候,才会输出 trace 的结果。

trace 函数$ trace demo.MathGame runPress Q or Ctrl+C to abort.Affect(class-cnt:1 , method-cnt:1) cost in 28 ms.`---ts=2019-12-04 00:45:08;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[0.617465ms] demo.MathGame:run() `---[0.078946ms] demo.MathGame:primeFactors() #24 [throws Exception]`---ts=2019-12-04 00:45:09;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[1.276874ms] demo.MathGame:run() `---[0.03752ms] demo.MathGame:primeFactors() #24 [throws Exception]

提示:结果里的 #24,表示在 run 函数里,在源文件的第24行调用了primeFactors()函数。=

trace 次数限制

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

$ trace demo.MathGame run -n 1Press Q or Ctrl+C to abort.Affect(class-cnt:1 , method-cnt:1) cost in 20 ms.---ts=2019-12-04 00:45:53;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[0.549379ms] demo.MathGame:run() +---[0.059839ms] demo.MathGame:primeFactors() #24 `---[0.232887ms] demo.MathGame:print() #25Command execution times exceed limit: 1, so command will exit. You can set it with -n option.包含 jdk 的函数–skipJDKMethod skip jdk method trace, default value true. 默认情况下,trace 不会包含 jdk 里的函数调用,如果希望 trace jdk 里的函数,需要显式设置–skipJDKMethod false。$ trace --skipJDKMethod false demo.MathGame runPress Q or Ctrl+C to abort.Affect(class-cnt:1 , method-cnt:1) cost in 60 ms.`---ts=2019-12-04 00:44:41;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[1.357742ms] demo.MathGame:run() +---[0.028624ms] java.util.Random:nextInt() #23 +---[0.045534ms] demo.MathGame:primeFactors() #24 [throws Exception] +---[0.005372ms] java.lang.StringBuilder:<init>() #28 +---[0.012257ms] java.lang.Integer:valueOf() #28 +---[0.234537ms] java.lang.String:format() #28 +---[min=0.004539ms,max=0.005778ms,total=0.010317ms,count=2] java.lang.StringBuilder:append() #28 +---[0.013777ms] java.lang.Exception:getMessage() #28 +---[0.004935ms] java.lang.StringBuilder:toString() #28 `---[0.06941ms] java.io.PrintStream:println() #28`---ts=2019-12-04 00:44:42;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 `---[3.030432ms] demo.MathGame:run() +---[0.010473ms] java.util.Random:nextInt() #23 +---[0.023715ms] demo.MathGame:primeFactors() #24 [throws Exception] +---[0.005198ms] java.lang.StringBuilder:<init>() #28 +---[0.006405ms] java.lang.Integer:valueOf() #28 +---[0.178583ms] java.lang.String:format() #28 +---[min=0.011636ms,max=0.838077ms,total=0.849713ms,count=2] java.lang.StringBuilder:append() #28 +---[0.008747ms] java.lang.Exception:getMessage() #28 +---[0.019768ms] java.lang.StringBuilder:toString() #28 `---[0.076457ms] java.io.PrintStream:println() #28据调用耗时过滤$ trace demo.MathGame run '#cost > 10'Press Ctrl+C to abort.Affect(class-cnt:1 , method-cnt:1) cost in 41 ms.---ts=2018-12-04 01:12:02;thread_name=main;id=1;is_daemon=false;priority=5;TCCL=sun.misc.Launcher$AppClassLoader@3d4eac69 ---[12.033735ms] demo.MathGame:run() +---[0.006783ms] java.util.Random:nextInt() +---[11.852594ms] demo.MathGame:primeFactors() ---[0.05447ms] demo.MathGame:print()

提示:只会展示耗时大于 10ms 的调用路径,有助于在排查问题的时候,只关注异常情况

是不是很眼熟,没错,在 JProfiler 等收费软件中你曾经见识类似的功能,这里你将可以通过命令就能打印出指定调用路径。 友情提醒下,trace 在执行的过程中本身是会有一定的性能开销,在统计的报告中并未像 JProfiler 一样预先减去其自身的统计开销。所以这统计出来有些许的不准,渲染路径上调用的类、方法越多,性能偏差越大。但还是能让你看清一些事情的。[12.033735ms] 的含义,12.033735 的含义是:当前节点在当前步骤的耗时,单位为毫秒[0,0,0ms,11]xxx:yyy() [throws Exception],对该方法中相同的方法调用进行了合并,0,0,0ms,11 表示方法调用耗时,min,max,total,count;throws Exception 表明该方法调用中存在异常返回这里存在一个统计不准确的问题,就是所有方法耗时加起来可能会小于该监测方法的总耗时,这个是由于 Arthas 本身的逻辑会有一定的耗时trace 多个类或者多个函数

trace 命令只会 trace 匹配到的函数里的子调用,并不会向下 trace 多层。因为 trace 是代价比较贵的,多层 trace 可能会导致最终要 trace 的类和函数非常多。

可以用正则表匹配路径上的多个类和函数,一定程度上达到多层 trace 的效果。

trace -E com.test.ClassA|org.test.ClassB method1|method2|method3排除掉指定的类

使用 --exclude-class-pattern 参数可以排除掉指定的类,比如:

trace javax.servlet.Filter * --exclude-class-pattern com.demo.TestFilter
本文链接地址:https://www.jiuchutong.com/zhishi/288752.html 转载请保留说明!

上一篇:增值税专用发票是否有限额(增值税专用发票的税率是多少啊)

下一篇:世界著名气泡酒产地普罗塞克山丘,意大利威尼托 (© Olimpio Fantuz/Sime/eStock Photo)(世界著名气泡酒公司)

  • b站怎么同时登录两个账号

    b站怎么同时登录两个账号

  • 红米k40pro+是屏幕解锁吗(红米k40pro是屏幕指纹识别吗)

    红米k40pro+是屏幕解锁吗(红米k40pro是屏幕指纹识别吗)

  • qq如何不显示名片赞(qq如何不显示名字)

    qq如何不显示名片赞(qq如何不显示名字)

  • b站设置清晰度不见了(b站怎么设置清晰度)

    b站设置清晰度不见了(b站怎么设置清晰度)

  • 6s值得升级ios13吗(6s值得升级15.7.2)

    6s值得升级ios13吗(6s值得升级15.7.2)

  • 苹果6s plus恢复出厂设置在哪里(苹果6splus恢复出厂设置)

    苹果6s plus恢复出厂设置在哪里(苹果6splus恢复出厂设置)

  • 坐飞机可以用蓝牙耳机吗(飞机上可以使用蓝牙)

    坐飞机可以用蓝牙耳机吗(飞机上可以使用蓝牙)

  • 手机换屏后屏幕发黄(手机换屏后屏幕有时候失灵)

    手机换屏后屏幕发黄(手机换屏后屏幕有时候失灵)

  • 手机在线wifi什么意思(手机在线wifi和在线wifi)

    手机在线wifi什么意思(手机在线wifi和在线wifi)

  • 重装系统进USB还是进UEFI

    重装系统进USB还是进UEFI

  • vivo账户是别人的手机号(vivo账户是别人的手机号我可以不改吗)

    vivo账户是别人的手机号(vivo账户是别人的手机号我可以不改吗)

  • 淘宝订单有些不能转卖(淘宝订单不存在是怎么回事)

    淘宝订单有些不能转卖(淘宝订单不存在是怎么回事)

  • 电子经纬仪怎么开激光(电子经纬仪怎么开机)

    电子经纬仪怎么开激光(电子经纬仪怎么开机)

  • 微信有店员通功能吗(微信店员通功能介绍)

    微信有店员通功能吗(微信店员通功能介绍)

  • 拼多多闪电退货怎么取消(拼多多闪电退货可以关掉吗)

    拼多多闪电退货怎么取消(拼多多闪电退货可以关掉吗)

  • 苹果x别人电话打不进来(苹果x别人打电话过来没声音)

    苹果x别人电话打不进来(苹果x别人打电话过来没声音)

  • int main 的作用是什么(int(main))

    int main 的作用是什么(int(main))

  • 华为荣耀畅想10plus什么时候上市(华为荣耀畅想10e配置)

    华为荣耀畅想10plus什么时候上市(华为荣耀畅想10e配置)

  • 电池维修状态怎么处理(电池状态 维修)

    电池维修状态怎么处理(电池状态 维修)

  • 中国号码在国外能用吗(中国号码在国外拨打中国电话怎么打)

    中国号码在国外能用吗(中国号码在国外拨打中国电话怎么打)

  • 陌陌现在不能视频了吗(陌陌是不是不能视频了)

    陌陌现在不能视频了吗(陌陌是不是不能视频了)

  • 微信视频太长发不出去怎么办(微信发视频太长了怎么办?)

    微信视频太长发不出去怎么办(微信发视频太长了怎么办?)

  • 酷狗云盘在哪里打开(酷狗云盘是干什么用的)

    酷狗云盘在哪里打开(酷狗云盘是干什么用的)

  • 虚拟机中怎么安装win10预览版9901 win10预览版9901虚拟机安装图文教程(虚拟机中怎么安装ubuntu)

    虚拟机中怎么安装win10预览版9901 win10预览版9901虚拟机安装图文教程(虚拟机中怎么安装ubuntu)

  • 开具红字专用发票的条件
  • 进项税为什么记在借方通俗讲法
  • 机器维修费属于变动成本吗
  • 付款申请单是原单据吗
  • 研发费用直接计入成本吗
  • 进口消费税应该记到什么科目
  • 职工交的商业保险怎么做账
  • 股东参与经营可以分红吗
  • 中小企业免税证明
  • 小企业费用包括哪些
  • 股东溢价转让股份交易市场会计分录
  • 服务合同需要征税吗
  • 融资租赁与按揭贷款区别
  • 企业辅助生产车间
  • 公司自建厂房需要缴纳哪些税
  • 税前扣除的职工福利费标准
  • 无形资产要入账吗
  • 接受长期股权投资的条件
  • 退回多交的所得税怎么做分录小规模
  • 职工食堂的费用怎么入账
  • 电子版A4黑白发票可以抵税吗?
  • 职工教育经费怎么做账
  • 计提的存货跌价准备
  • 账套更改
  • 华为p30分屏怎么操作
  • 企业所得税如何计算
  • 购买树苗计入会计科目吗
  • 分期购车的会计分录
  • 银行贷款利率和利息的区别
  • win7旗舰版分辨率调高了黑屏怎么办
  • bios报警声是怎样的
  • php循环结构有哪几种语句
  • MacOS X Yosemite升级后postgresql启动报错的解决办法
  • 在建工程计提减值准备计入什么科目
  • Mont Choisy Beach, Mauritius (© Robert Harding World Imagery/Offset by Shutterstock)
  • phpstudy访问数据库
  • 梅尔加足球俱乐部
  • php函数名
  • 餐饮费是业务招待费还是差旅费
  • 旅游业发票的税率是多少
  • 购买原材料的运输费计入什么科目
  • 企业的业务招待费是否可以随意开支
  • spring整合mongodb
  • 电子承兑汇票贴现怎么操作
  • 印花税的会计处理方法
  • 摄影的服务注册是什么
  • 场地租赁需要注意什么
  • 成本和入账价值
  • mysql组合
  • 通过法院拍卖取得的房屋需要法院下确认裁定吗
  • 销项税额和进项税额月底怎么结转
  • 营业外支出账户核算的主要内容有
  • 工业销售产值是销售收入吗
  • 仪器校准费用会计科目
  • 工程结算收入是否缴纳增值税
  • 贴现的利息通过什么会计科目核算
  • 年终奖个税计税方式
  • 企业之间的往来款要1900万要交多少税
  • 社保金的滞纳金个人承担吗?
  • 餐饮打包盒 标准
  • 2020公司年会奖品清单
  • 企业建账的流程是怎样的
  • freebsd wifi设置
  • win8无线网络连接不上
  • win7旗舰版显示器亮度调节
  • 苹果Mac OS X 10.13系统怎么调整设置窗口透明度?
  • win7系统连接打印机没有反应
  • linux的复制
  • webpack使用ejs
  • jquery制作图片提示效果
  • 商务英语考英语笔译 算跨考吗
  • 编写python程序的步骤
  • onInterceptTouchEvent onTouchEvent 的坑 坑死了
  • bootstrap快速入门
  • js代码测试工具
  • 专用发票如何导出
  • 福建通用定额发票查询
  • 2020年个体税收政策
  • 台湾大学会计硕士
  • 残疾人个体工商户补贴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设