性能测试实战 30 讲
高楼
前 HP 高级性能专家,7DGroup 创始人
45941 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 37 讲
性能测试实战 30 讲
15
15
1.0x
00:00/00:00
登录|注册

19丨Java & C ++:代码级监控及常用计数器解析(上)

思考题
总结
性能分析工具选择
Java类应用查找方法执行时间
代码性能评估思路
思路误区
性能测试分析

该思维导图由 AI 生成,仅供参考

在性能测试分析中,有一部分人存在着一个思路上的误解,那就是一开始就一头扎进代码里,折腾代码性能。这是我非常反对的一种做法。
事实上,要想这么做,有一个前提,那就是架构中的其他组件都经过了千锤百炼,出现问题的可能性极低。
实际上,我凭着十几年的经验来看,大部分时候,代码出现严重性能瓶颈的情况还真是不多。再加上现在成熟的框架那么多,程序员们很多情况下只写业务实现。在这种情况下,代码出现性能瓶颈的可能性就更低了。
但我们今天终归要说代码级的监控及常用的计数器。如何去评估一个业务系统的代码性能呢?在我看来,分析的思路是下面这个样子的。
从上图可以看到,分析的时候有两个关键点:执行时间和执行空间。我相信很多人都清楚,我们要很快找到执行时间耗在哪一段和空间耗在哪里。
现在我们来实际操作一下,看如何判断。

Java 类应用查找方法执行时间

首先你得选择一个合适的监控工具。Java 方法类的监控工具有很多,这里我选择 JDK 里自带的 jvisualvm。
顺便说一下,我的 Java 版本号是这个:
(base) GaoLouMac:~ Zee$ java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.111-b14, mixed mode)
打开应用服务器上的 JMX 之后,连上 jvisualvm,你会看到这样的视图。
这里再啰嗦一下我们的目标,这时我们要找到消耗 CPU 的方法,所以要先点Sampler - CPU,你可以看到如下视图。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了在性能测试分析中,代码级监控及常用计数器的解析。作者指出了一种误解,即一开始就盲目优化代码性能的做法,并强调了在评估业务系统的代码性能时需要关注执行时间和执行空间。文章以Java类应用查找方法执行时间为例,介绍了使用JDK自带的jvisualvm工具来监控方法执行效率,并通过实际操作展示了如何判断方法执行时间的关联性。作者还介绍了使用Arthas、BTrace等工具来跟踪方法执行过程,以及使用jdb工具进行调试的方法。最后,作者提出了不建议在生产环境中使用APM工具的观点,并强调了思路的重要性。整体而言,本文通过具体案例和工具介绍,为读者提供了代码级监控及性能分析的实际操作方法和思路。文章强调了在性能测试和分析中,时间是关键因素,而在拆分时间的逻辑中,思路至关重要。作者提出了抓取函数方法执行时间的重要性,并介绍了各种工具和方法来实现这一目标。最后,作者留下了两个思考题,引导读者思考为什么不建议在生产环境中一开始就使用APM类工具来抓取方法的执行时间,以及如何抓取Java语言中的方法执行时间。整体而言,本文为读者提供了实用的性能分析方法和思路,对于需要进行性能测试和代码优化的开发人员具有一定的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能测试实战 30 讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(16)

  • 最新
  • 精选
  • 嘟嘟爱学习
    我觉得某些生产环境还是可以直接上APM的: 1. 能接受10%性能损耗的,比如原来耗时1秒,上了变成1.1秒其实感觉不明显;原来高峰期CPU使用率30%,上了变成40%也还在可接受范围内; 2. APM的成功失败不影响业务的运行,就是即使APM挂了,业务也还能正常运行; 3. 在docker+k8且又有大量虚机大量服务的情况下,上APM也是一个方案,不然当出现问题时要在那么多服务里面把问题定位到,用jmx这类监控很容易措手不及和慌手慌脚。 4. 现在好些公司没有专职性能测试,好些系统没有经过性能测试就上线的,此时APM是开发和运维人员的一个救命稻草了,这种公司我相信很多。

    作者回复: 很不幸的是,你说的非常对。 我觉得我们对大量服务的场景其实需要的只是一个链路监控系统,这个功能APM基本都有提供,我们要用的就是这个功能而已。 另外,我不知道你有没有遇到过APM的agent导致业务系统挂掉的情况,在我的工作中有遇到过,一级故障,损失也是惨重。 所以用不用APM,只有在具体的应用场景中,测试好了再决定上不上吧。

    2020-02-08
    2
    11
  • aoe
    在我知识范围内Java最强的监控工具是Oracle 开发的 JMC,没有之一。前Oracle首席工程师在 极客时间的《Java核心技术面试精讲》专栏 | 第26讲 | 如何监控和诊断JVM堆内和堆外内存使用? 文中提到:“我这里特别推荐Java Mission Control(JMC),这是一个非常强大的工具,不仅仅能够使用JMX进行普通的管理、监控任务,还可以配合Java Flight Recorder(JFR)技术,以非常低的开销,收集和分析 JVM 底层的 Profiling 和事件等信息。目前, Oracle 已经将其开源,如果你有兴趣请可以查看 OpenJDK 的Mission Control项目。”

    作者回复: JMC是oracle 收购了BEA之后得到的,然后oracle又收购了sun,就把JMC也放到oracle jdk里面了。 从工具的角度来说,我觉得只要是能实现自己想要的东西,就是好工具。 对个人来说,那是喜欢用什么用什么。JFR这个功能不错,只是在大压力下,性能还是会受到它的影响,你可以尝试一下影响有多大。

    2020-10-14
    8
  • 凌空飞起的剪刀腿
    使用strace 跟踪进程流程

    作者回复: Strace看起来不方便,不如perf和systemtap。

    2020-04-03
    4
  • alley
    perftop 可以查看CPU热点函数

    作者回复: 对的。

    2021-02-16
    2
  • 娜娜
    请问老师C++、C的怎么监控

    作者回复: 看你想监控什么了。如果是cpu、内存、io等,直接看系统中的相应进程就行了。要想看线程栈的话直接gstack等命令就可以。

    2022-07-28归属地:北京
    1
  • Geek_6a9aeb
    老师,为啥说代码造成瓶颈不多呢,高并发带来java线程死锁的情况 是很常见的代码问题吧

    作者回复: 你说同步吗?如果业务需要,该同步还是要同步的。死锁在代码中并不多,BLOCKED才是。这也只是一个点。

    2021-01-12
    1
  • 老街头的猫🐱。
    高老师,这个第一个调用栈是用什么命令打出来的,根据什么关键字?在 jvisualvm中没看到进程ID呀?

    作者回复: 做threaddump就看到了。

    2020-10-19
    1
  • 月亮和六便士
    高老师:1. 打调用栈的时候,怎么保证打印出来的正好是自己写的方法的调用栈,而不是一堆没用的调用栈,我连续打几次都不是自己写的方法的调用栈,这时候我觉得一定有什么技巧,而我不知道。2,interrunpts --> softirqs 怎么对应,我知道interrunpts 逻辑终端号是 45,中断设备是网卡,在softirqs中没有找到45这个号,里面只有网卡设备模块。准备把老师的专栏,手抄一遍,然后练习一遍,然后再理解一遍

    作者回复: 1. 这个只能多打几次,要连续。 2. 有设备名可以对应。

    2020-04-08
    1
  • 顺利
    分段拆分时间如何做呢老师,没找到前面的相应内容。有什么工具吗?

    作者回复: 请看《06丨倾囊相授:我毕生所学的性能分析思路都在这里了》中响应时间的拆分部分,这是一个拆分时间的思路,用的工具不局限于某一个。 比如skywalking就可以看到服务拆分的时间。

    2020-02-27
    1
  • 蜡笔小新爱看书
    打开应用服务器上的 JMX 之后,连上 jvisualvm,你会看到这样的视图。 这个具体是怎么操作?能说明一下吗?

    作者回复: 这个度娘一下吧,有很多。

    2023-07-17归属地:广东
收起评论
显示
设置
留言
16
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部