操作方法:*敏*感*词*教你使用 Btrace 定位应用热点

优采云 发布时间: 2022-11-22 00:18

  操作方法:*敏*感*词*教你使用 Btrace 定位应用热点

  前言

  前段时间笔者在一个Java类型的项目上做了性能测试,发现应用的CPU占用率非常高,TPS达不到需求。获取方法调用的平均耗时和单个事务的唯一方法是使用 Btrace,这是一个定位性能问题的强大工具。执行次数,定位热点方法,快速定位问题。下面介绍一些在实践中使用Btrace的方法和注意事项,希望能给大家带来一些有价值的参考。

  当然,使用前必须先安装 Btrace。具体方法请参考相关说明,这里不再赘述。由于Btrace不是可视化监控工具,其采集结果以文本信息的形式输出,因此我们需要对结果进行必要的统计分析,找出应用的热点。在实际使用中,笔者通常会按照以下步骤来获取热点方法:

  ① 编写采集脚本;

  ② 运行采集脚本;

  ③行刑现场;

  ④ 停止现场;

  ⑤ 停止征稿;

  ⑥ 获取方法列表;

  ⑦ 分析结果,得​​到方法的平均耗时和执行次数。

  下面详细介绍各个步骤的操作要点。

  编写采集脚本

  首先写一个脚本,定义要抓取的热点方法。脚本的大致结构如图1所示,下面对脚本进行简单介绍。

  图1 监控脚本

  先导入Btrace自带的两个包,然后像普通Java类一样写一个简单的类。类名只要符合Java规范即可。

  @OnMethod 注解中的内容是定义触发条件。当程序执行满足注解中的条件时,就会执行下面的test-trace(这个方法可以随意命名)方法。

  变量clazz是要捕获的方法的作用域,也就是类。这个变量指定的路径越详细,捕获的方法就越少,输出的也就越少。通常我们只捕获项目本身定义的类中的所有方法。是的,可以过滤掉调用的第三方和使用的框架类。

  

" />

  method的作用是定义要监控的方法,可以用正则表达式匹配。

  location变量的作用是定义方法的拦截位置。我们需要使用Kind.RETURN来获取方法的执行时间,这样我们就可以在方法执行完成后获取返回执行时间@Duration。

  脚本中的test-trace方法是我们想要输出捕获结果的一些代码,当满足@OnMethod触发条件时就会执行。

  再看几个参数,

  @ProbeClassName 是当前执行的类的名称,包括完整的包路径;

  @ProbeMethodName 为当前正在执行的方法名;

  @Duration是当前方法执行所消耗的时间,单位是纳秒,所以在输出这个耗时的时候,我们需要将纳秒转换成毫秒,以增加可读性。

  最后,我们只需要使用一个print方法将这些参数输出即可,输出格式类似于“com.yeepay.*.*.queryList:100”。

  整个脚本的结构非常简洁,易于学习和掌握。当然,Btrace不仅仅提供这么简单的功能,如果你有更复杂的需求,请参考相关资料。这里需要说明的是,过滤的范围要尽量压缩,排除其他无关类的影响。如果抓取结果中没有hot method,我们可以尝试改变抓取类的作用域。

  执行获取脚本

  脚本一旦写好,无需特别编译即可执行。如果在执行过程中报错,那么我们可以回去修改脚本。在执行之前,我们需要获取被测应用的PID,并将抓取结果保存到文件中。命令格式如下:

  btrace PID ./Test.java >> trace-res.txt

  命令运行后,如果没有报错,说明Btrace已经开始工作了。只要执行了程序相关的方法,满足采集条件,采集结果就会输出到trace-res.txt文件中。

  执行测试场景

  采集脚本启动后,会进行测试场景的执行。根据笔者的经验,建议压力不要太大或者时间不要太长,否则采集到的结果文件会非常大,后续分析会比较费力。经过一定时间的压力,采集

到的数据就足够我们分析了。这个时候应该停止加压,然后杀掉Btrace的进程。

  获取应用程序的方法列表

  有了采集

到的结果,下一步就是对结果进行统计分析。首先我们需要获取方法列表,当然这一步在整个测试过程中只需要做一次,除非应用增加了新的方法或者修改了一些方法的名称。方法列表是我们对采集结果进行分析的依据,接下来我们需要根据方法列表中的方法名,对采集结果逐个方法进行统计计算。下面的命令是作者对采集结果的方法列表提取操作:

  猫跟踪res.txt | awk -F ':' '{print $1}' | awk '!a[$0]++' >> function-list.txt

  执行完成后,将function-list.txt文件中的方法列表复制到Excel表格中,作为分析的第一列。笔者Excel统计分析的格式如图2所示。

  

" />

  图2 热点法采集结果分析表

  输出采集结果

  接下来,需要根据方法列表获取每个方法的平均执行时间和获取次数。同样,我们也使用shell命令来实现,具体命令类似这样:

  猫踪迹.txt | grep -a “com.yeepay.g3.utils.*” | awk -F ':' '{print $2}' | awk '{sum+=$1} END {if (NR==0) print "0 0";else if (NR>0) print sum/NR,NR}'

  该命令的最后一个流水线对输出结果进行判断,避免变量NR(行号)出现0时命令报错。

  一般情况下,可以应用的方法比较多。手动写命令,每次都执行,也是体力活。这个时候我们把这个命令统一写成一个脚本,在分析的时候执行这个脚本。笔者写完后的整体效果如图3,有强烈恐惧症的读者请忽略此图。

  图3 自动解析输出方法平均耗时和执行次数的shell脚本

  执行该脚本后,输出结果收录

两列,第一列为“平均耗时”,第二列为“采集次数”。将这两列的结果直接复制到Excel中分析结果。我们可以对“平均花费时间”和“每笔交易的执行次数”进行排序,找出耗时最高和平均执行次数最高的方法。

  笔者的分析结果如图2所示,其中“原子法”栏目状态是在与开发沟通后确定的。所谓原子方法是指这个方法是否调用其他方法。如果没有调用其他方法,那么我们认为它是一个原子方法。如果一个方法是原子方法,平均耗时比较长,那一定是热点方法,也是需要重点优化的地方。

  另外一栏“Number of Executions per Transaction”需要大家注意。该列的值是作者在另一个场景中将响应时间阈值设置为0时得到的结果。并不是直接用图2中的“采集次数”除以请求次数得到的结果。

  通过图2中的表格可以清晰的识别出当前的热点方法,开发者可以重点优化这些方法。使用Btrace工具,可以大大缩短定位热点的时间,快速有效。根据图2的结果,作者对应用进行了优化,发现应用的同步处理能力可以提升3倍,异步处理能力可以提升10倍。

  影响分析

  最后需要注意的是使用Btrace会对应用产生影响。根据笔者的实践,如果监控阈值为0(采集脚本中的if语句if duration >= 0),对应用的影响是致命的,可能会导致TPS严重下降,因为大量将输出监控结果并阻塞磁盘IO。玩满。在我做的项目中,实测200笔交易总共输出了2.5GB的采集信息,真是太神奇了!当采集

阈值为 10 毫秒时,对应用程序的性能影响约为 25%。因此,采集门槛越大,影响越小;过滤方式越多,对应用的影响越小。因此,在使用 Btrace 时,

  此外,建议您执行单独的场景以获取方法列表和单个事务的执行次数。比如将阈值设置为0,连续发起10次请求,然后分析结果得到方法列表和单次事务的执行次数。我们只能这样做一次。

  好消息

  易宝CTO陈斌翻译的新书《架构经》已登陆京东、亚马逊!

  《架构经》:《架构即未来》姊妹篇,呈现硅谷大咖干货,互联网架构50条军规。唐斌、向江旭、叶亚明、段年、吴华鹏、张瑞海、韩俊、程炳浩、张云泉、于晨、李大学、霍太文共同推荐。

  核心方法:SEO工具

  哈哈看到好多人分享经验,我也来说说我的感受吧!

  至于通过群发获取外链,大家听了总有一些鄙视的念头!对此我有些郁闷!前几天还看到有人说:“真正的seo master是不会用工具的,想做seo master就不要用工具,他更喜欢手工劳斯莱斯!” 听他这么一说,真的觉得人的思维太不一样了,其实很多seo高手都是用外链工具群发的,只是有些人不知道而已,是不是seo高手,不区分靠外链工具,靠seo的思想和经验!劳斯莱斯不是纯手工的,现在是工业社会,如果还想靠手工,那是浪费时间。当然,如果你有资源或由数百个外部链接组成的强大团队,那么'

  如果是一个人或者几个人的团队,想要提高速度,就得用工具,但是用工具也是需要动脑筋的。不要以为只要会用群发工具就是低级的做法,群发也是需要技巧的。如果你用好群发工具,一个工具可以和几十个人一样好。当然你的群发工具也应该是比较好的群发工具,那我说

  

" />

  以下群发注意事项:

  1 每次群发文章的时间不要太规律,太规律的话搜索引擎很难不认为你是群发!

  2 群发的文章,最好不要重复太多,或者每隔一定的时间就发同样的文章!

  3.发表的文章必须是伪原创。如果你发表的文章让搜索引擎认为这些文章是原创的,我真的想不出搜索引擎惩罚你的理由!

  

" />

  4 最好上网搜集几万篇与你网站相关的文章关键词,然后批量制作伪原创文章,尽可能保证原创文章的可读性。想想各大门户网站发布的数以万计的伪原创文章,其威力可想而知!

  5 还有就是注意群发一步步来,别一上来就发几万条!没人喜欢做QJ!

  只要你吃透了搜索引擎,群发工具就是你的机械手,可以合理的群发消息,超越人工智能!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线