Java 核心技术面试精讲
杨晓峰
前 Oracle 首席工程师
125942 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 44 讲
Java 核心技术面试精讲
15
15
1.0x
00:00/00:00
登录|注册

第33讲 | 后台服务出现明显“变慢”,谈谈你的诊断思路?

Profiling工具
GC日志分析
运行时监控工具
内存和IO问题排查方法
CPU排查方法
CPU、内存和IO的关注点
自下而上分析
自上而下分析
Profiling工具获取数据的主要方式及优缺点
JVM性能分析
系统性能分析
业界性能分析方法论
应用Profiling
监控Java服务自身,如GC日志、内存使用统计、死锁检查
监控系统级别资源占用情况
问题可能来自Java服务自身或受其他系统服务影响
清晰定义"慢"的含义
服务突然变慢还是长时间运行后变慢
一课一练
知识扩展
问题症状的理清
性能问题的定义
性能问题诊断思路

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

在日常工作中,应用或者系统出现性能问题往往是不可避免的,除了在有一定规模的 IT 企业或者专注于特定性能领域的企业,可能大多数工程师并不会成为专职的性能工程师,但是掌握基本的性能知识和技能,往往是日常工作的需要,并且也是工程师进阶的必要条件之一,能否定位和解决性能问题也是对你知识、技能和能力的检验。
今天我要问你的问题是,后台服务出现明显“变慢”,谈谈你的诊断思路?

典型回答

首先,需要对这个问题进行更加清晰的定义:
服务是突然变慢还是长时间运行后观察到变慢?类似问题是否重复出现?
“慢”的定义是什么,我能够理解是系统对其他方面的请求的反应延时变长吗?
第二,理清问题的症状,这更便于定位具体的原因,有以下一些思路:
问题可能来自于 Java 服务自身,也可能仅仅是受系统里其他服务的影响。初始判断可以先确认是否出现了意外的程序错误,例如检查应用本身的错误日志。
对于分布式系统,很多公司都会实现更加系统的日志、性能等监控系统。一些 Java 诊断工具也可以用于这个诊断,例如通过 JFR(Java Flight Recorder</
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了当后台服务出现明显“变慢”时,需要通过清晰的问题定义和症状理清问题的症结。首先,需要确定服务是突然变慢还是长时间运行后观察到变慢,以及“慢”的具体定义。然后,可以从Java服务自身和系统其他服务的影响两个方面进行诊断,包括检查应用本身的错误日志、监控系统级别的资源情况、监控Java服务自身的情况以及进行Profiling等方法。在回答问题时,需要先探讨更加精确的问题定义,然后从不同角度、不同层次逐步将问题域尽量缩小,隔离出真实原因。文章还介绍了性能分析方法论,包括自上而下和自下而上两类思路,以及系统性能分析中CPU、内存和IO的主要关注点和相应的工具。此外,还提到了JVM层面的性能分析方法,包括利用JMC、JConsole等工具进行运行时监控,以及使用JFR进行Profiling。整体而言,本文系统性地整理了常见性能分析的思路,结合了方法论和实际操作,对读者进行了全面的指导和启发。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Java 核心技术面试精讲》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(17)

  • 最新
  • 精选
  • 江南白衣Calvin
    找繁忙线程时,top -h , 再jstack, 再换算tid比较累,而且jstack会造成停顿。推荐用vjtools里的vjtop, 不断显示繁忙的javaj线程,不造成停顿。

    作者回复: 白衣出品必是精品

    2018-08-10
    5
    193
  • 杨东yy
    确实不错,还有个命令,sar,主要看iowait的值,如果它比较高,也说明磁盘io写入慢,当时我们的系统是虚拟机,和别的业务共用物理机,所以当别人并发大,也影响了我们,我们有切面写日志,系统日志写的比较多,就出现整个服务慢了,后来减少不必要的日志,找运维换机器

    作者回复: 很实用

    2018-07-24
    38
  • 盼盼
    profiling收集程序运行时信息的方式主要有以下三种: 事件方法:对于 Java,可以采用 JVMTI(JVM Tools Interface)API 来捕捉诸如方法调用、类载入、类卸载、进入 / 离开线程等事件,然后基于这些事件进行程序行为的分析。 统计抽样方法(sampling): 该方法每隔一段时间调用系统中断,然后收集当前的调用栈(call stack)信息,记录调用栈中出现的函数及这些函数的调用结构,基于这些信息得到函数的调用关系图及每个函数的 CPU 使用信息。由于调用栈的信息是每隔一段时间来获取的,因此不是非常精确的,但由于该方法对目标程序的干涉比较少,目标程序的运行速度几乎不受影响。 植入附加指令方法(BCI): 该方法在目标程序中插入指令代码,这些指令代码将记录 profiling 所需的信息,包括运行时间、计数器的值等,从而给出一个较为精确的内存使用情况、函数调用关系及函数的 CPU 使用信息。该方法对程序执行速度会有一定的影响,因此给出的程序执行时间有可能不准确。但是该方法在统计程序的运行轨迹方面有一定的优势。

    作者回复: 不错的总结

    2018-07-24
    30
  • Yano
    一直以来看老师的专栏没有留言过,今天特意来留言。我看了13讲(当时只出到13讲)面试就轻松通过了~老师每一篇文章,都让我非常收益,赞一个~!

    作者回复: 恭喜,很高兴能体现出价值

    2018-07-21
    4
    24
  • clz1341521
    dstat这个命令也很有用

    作者回复: 谢谢,以前没有过,刚才查了一下,“dstat命令是一个用来替换vmstat、iostat、netstat、nfsstat和ifstat这些命令的工具,是一个全能系统信息统计工具” 回头试一下

    2018-08-11
    23
  • 有福
    喜欢用火焰图来辅助定位

    作者回复: 确实是利器

    2018-08-17
    2
    13
  • One day
    之前看到目录上还有讲spring和数据库等等,后面还会讲吧!

    作者回复: 有,仅仅能做个抛砖引玉,范围太大专栏就不伦不类了

    2018-07-21
    1
  • 张永峰
    我都是一边看服务层,一边找DBA,80%都是DB慢SQL导致服务慢,经验之谈。
    2020-02-28
    3
    10
  • 硅谷居士
    阿里的 arthas 不错。淘宝也有一个 profiler。
    2019-04-20
    1
    7
  • 磊吐槽
    百度搜索 profiling是什么
    2018-07-21
    7
收起评论
显示
设置
留言
17
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部