19丨Java & C ++:代码级监控及常用计数器解析(上)
该思维导图由 AI 生成,仅供参考
Java 类应用查找方法执行时间
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了在性能测试分析中,代码级监控及常用计数器的解析。作者指出了一种误解,即一开始就盲目优化代码性能的做法,并强调了在评估业务系统的代码性能时需要关注执行时间和执行空间。文章以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-08211 - 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-148 - 凌空飞起的剪刀腿使用strace 跟踪进程流程
作者回复: Strace看起来不方便,不如perf和systemtap。
2020-04-034 - alleyperftop 可以查看CPU热点函数
作者回复: 对的。
2021-02-162 - 娜娜请问老师C++、C的怎么监控
作者回复: 看你想监控什么了。如果是cpu、内存、io等,直接看系统中的相应进程就行了。要想看线程栈的话直接gstack等命令就可以。
2022-07-28归属地:北京1 - Geek_6a9aeb老师,为啥说代码造成瓶颈不多呢,高并发带来java线程死锁的情况 是很常见的代码问题吧
作者回复: 你说同步吗?如果业务需要,该同步还是要同步的。死锁在代码中并不多,BLOCKED才是。这也只是一个点。
2021-01-121 - 老街头的猫🐱。高老师,这个第一个调用栈是用什么命令打出来的,根据什么关键字?在 jvisualvm中没看到进程ID呀?
作者回复: 做threaddump就看到了。
2020-10-191 - 月亮和六便士高老师:1. 打调用栈的时候,怎么保证打印出来的正好是自己写的方法的调用栈,而不是一堆没用的调用栈,我连续打几次都不是自己写的方法的调用栈,这时候我觉得一定有什么技巧,而我不知道。2,interrunpts --> softirqs 怎么对应,我知道interrunpts 逻辑终端号是 45,中断设备是网卡,在softirqs中没有找到45这个号,里面只有网卡设备模块。准备把老师的专栏,手抄一遍,然后练习一遍,然后再理解一遍
作者回复: 1. 这个只能多打几次,要连续。 2. 有设备名可以对应。
2020-04-081 - 顺利分段拆分时间如何做呢老师,没找到前面的相应内容。有什么工具吗?
作者回复: 请看《06丨倾囊相授:我毕生所学的性能分析思路都在这里了》中响应时间的拆分部分,这是一个拆分时间的思路,用的工具不局限于某一个。 比如skywalking就可以看到服务拆分的时间。
2020-02-271 - 蜡笔小新爱看书打开应用服务器上的 JMX 之后,连上 jvisualvm,你会看到这样的视图。 这个具体是怎么操作?能说明一下吗?
作者回复: 这个度娘一下吧,有很多。
2023-07-17归属地:广东