第33讲 | 后台服务出现明显“变慢”,谈谈你的诊断思路?
杨晓峰
该思维导图由 AI 生成,仅供参考
在日常工作中,应用或者系统出现性能问题往往是不可避免的,除了在有一定规模的 IT 企业或者专注于特定性能领域的企业,可能大多数工程师并不会成为专职的性能工程师,但是掌握基本的性能知识和技能,往往是日常工作的需要,并且也是工程师进阶的必要条件之一,能否定位和解决性能问题也是对你知识、技能和能力的检验。
今天我要问你的问题是,后台服务出现明显“变慢”,谈谈你的诊断思路?
典型回答
首先,需要对这个问题进行更加清晰的定义:
服务是突然变慢还是长时间运行后观察到变慢?类似问题是否重复出现?
“慢”的定义是什么,我能够理解是系统对其他方面的请求的反应延时变长吗?
第二,理清问题的症状,这更便于定位具体的原因,有以下一些思路:
问题可能来自于 Java 服务自身,也可能仅仅是受系统里其他服务的影响。初始判断可以先确认是否出现了意外的程序错误,例如检查应用本身的错误日志。
对于分布式系统,很多公司都会实现更加系统的日志、性能等监控系统。一些 Java 诊断工具也可以用于这个诊断,例如通过 JFR(Java Flight Recorder</
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了当后台服务出现明显“变慢”时,需要通过清晰的问题定义和症状理清问题的症结。首先,需要确定服务是突然变慢还是长时间运行后观察到变慢,以及“慢”的具体定义。然后,可以从Java服务自身和系统其他服务的影响两个方面进行诊断,包括检查应用本身的错误日志、监控系统级别的资源情况、监控Java服务自身的情况以及进行Profiling等方法。在回答问题时,需要先探讨更加精确的问题定义,然后从不同角度、不同层次逐步将问题域尽量缩小,隔离出真实原因。文章还介绍了性能分析方法论,包括自上而下和自下而上两类思路,以及系统性能分析中CPU、内存和IO的主要关注点和相应的工具。此外,还提到了JVM层面的性能分析方法,包括利用JMC、JConsole等工具进行运行时监控,以及使用JFR进行Profiling。整体而言,本文系统性地整理了常见性能分析的思路,结合了方法论和实际操作,对读者进行了全面的指导和启发。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 核心技术面试精讲》,新⼈⾸单¥59
《Java 核心技术面试精讲》,新⼈⾸单¥59
立即购买
登录 后留言
全部留言(17)
- 最新
- 精选
- 江南白衣Calvin找繁忙线程时,top -h , 再jstack, 再换算tid比较累,而且jstack会造成停顿。推荐用vjtools里的vjtop, 不断显示繁忙的javaj线程,不造成停顿。
作者回复: 白衣出品必是精品
2018-08-105193 - 杨东yy确实不错,还有个命令,sar,主要看iowait的值,如果它比较高,也说明磁盘io写入慢,当时我们的系统是虚拟机,和别的业务共用物理机,所以当别人并发大,也影响了我们,我们有切面写日志,系统日志写的比较多,就出现整个服务慢了,后来减少不必要的日志,找运维换机器
作者回复: 很实用
2018-07-2438 - 盼盼profiling收集程序运行时信息的方式主要有以下三种: 事件方法:对于 Java,可以采用 JVMTI(JVM Tools Interface)API 来捕捉诸如方法调用、类载入、类卸载、进入 / 离开线程等事件,然后基于这些事件进行程序行为的分析。 统计抽样方法(sampling): 该方法每隔一段时间调用系统中断,然后收集当前的调用栈(call stack)信息,记录调用栈中出现的函数及这些函数的调用结构,基于这些信息得到函数的调用关系图及每个函数的 CPU 使用信息。由于调用栈的信息是每隔一段时间来获取的,因此不是非常精确的,但由于该方法对目标程序的干涉比较少,目标程序的运行速度几乎不受影响。 植入附加指令方法(BCI): 该方法在目标程序中插入指令代码,这些指令代码将记录 profiling 所需的信息,包括运行时间、计数器的值等,从而给出一个较为精确的内存使用情况、函数调用关系及函数的 CPU 使用信息。该方法对程序执行速度会有一定的影响,因此给出的程序执行时间有可能不准确。但是该方法在统计程序的运行轨迹方面有一定的优势。
作者回复: 不错的总结
2018-07-2430 - Yano一直以来看老师的专栏没有留言过,今天特意来留言。我看了13讲(当时只出到13讲)面试就轻松通过了~老师每一篇文章,都让我非常收益,赞一个~!
作者回复: 恭喜,很高兴能体现出价值
2018-07-21424 - clz1341521dstat这个命令也很有用
作者回复: 谢谢,以前没有过,刚才查了一下,“dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具” 回头试一下
2018-08-1123 - 有福喜欢用火焰图来辅助定位
作者回复: 确实是利器
2018-08-17213 - One day之前看到目录上还有讲spring和数据库等等,后面还会讲吧!
作者回复: 有,仅仅能做个抛砖引玉,范围太大专栏就不伦不类了
2018-07-211 - 张永峰我都是一边看服务层,一边找DBA,80%都是DB慢SQL导致服务慢,经验之谈。2020-02-28310
- 硅谷居士阿里的 arthas 不错。淘宝也有一个 profiler。2019-04-2017
- 磊吐槽百度搜索 profiling是什么2018-07-217
收起评论