06丨倾囊相授:我毕生所学的性能分析思路都在这里了
06丨倾囊相授:我毕生所学的性能分析思路都在这里了
讲述:高楼
时长43:26大小24.86M
瓶颈的精准判断
TPS 曲线
响应时间的曲线
线程递增的策略
性能衰减的过程
响应时间的拆分
构建分析决策树
场景的比对
总结
思考题
赞 34
提建议
精选留言(129)
- zuozewei2019-12-27第一个问题:为什么线程递增过程不能断? 这里涉及开篇提到的性能分析能力 ——「趋势分析」。 就像之前提到的一样,分析性能数据趋势需要对一个时间序列数据的分析,一般采用「线性回归分析」算法。 回归分析研究的是多个变量之间的关系。它是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。 假设有 N 个样本点,这里我们可以简单理解线性回归算法就是求一条直线 Y=f(X),使得各点到这个曲线的距离的绝对值之和最小。 在这种技术中,因变量(TPS)是连续的,自变量(线程数)可以是连续的也可以是离散的,回归线的性质是线性的。 但在性能测试中,由于系统本身的最大 TPS 上限是固定的,即服务端的处理能力(容量)是固定的,如果自变量(线程数)压力过大,那么系统平均处理时间(响应时间)会被拉长。不过这个时候其实瓶颈早就出现了。 所以在场景压测中的自变量(线程数)递增一定需要是连续的,并且在递增的过程中要有梯度的,且场景中的线程递增一定要和因变量(TPS) 的递增有比例关系,且不是突然达到最上限,这样才能准确找出系统的瓶颈点。 第二个问题:构建分析决策树的关键是什么? 决策树基本上就是把我们以前的分析经验总结出来,在做决策树的时候,一般会经历两个阶段:构造和剪枝。 概念简单来说: - 构造的过程就是选择什么属性作为节点的过程构造的过程就是选择什么属性作为节点的过程; - 剪枝就是给决策树瘦身,这一步想实现的目标就是,不需要太多的判断,同样可以得到不错的结果。之所以这么做,是为了防止“过拟合”现象的发生。 从性能分析角度来理解: - 构造:需要根据经验是对架构的梳理,是对系统的梳理,是对问题的梳理,是对查找证据链过程的梳理,是对分析思路的梳理; - 剪枝:需要对对不同时间序列性能数据的相关性分析,其核心就是要理解各个性能指标的关系,同时进行证据链查找,根据数据的变化来推断得出各种结论,比如故障判别、根因分析等。展开共 6 条评论85
- 小呀么小二郎2020-03-16今天的内容有点多,写了份总结,正好梳理一下思路 本节内容主要讲了性能分析思路。从6个方面来分析: 首先,要准确的判断瓶颈点。通过什么来判断呢?TPS曲线。TPS曲线能够告诉我们系统是否有瓶颈,以及瓶颈是否与压力有关。为什么不需要响应时间曲线来判断呢?因为响应时间主要是用来判断业务快慢的。 其次,我们要确定我们设置的性能场景是正确的,线程是逐渐递增的,而不应该一上来就上几百个线程。原因:1、直接上几百个线程不符合一般情况下的真实场景。2、即使是秒杀场景也有个“数据预热”的过程(我的理解,数据预热跟线程递增应该差不多,有一个由小到大逐渐增加的过程)3、对于TPS已经到达上限的系统来说,除了响应时间的增加,没有其他作用。 再次,我们要拥有能判断性能衰减的能力。如何判断?分段计算每线程每秒的TPS,如果这个数值开始变少,那么性能瓶颈就出现了。此时再随着线程的增加,性能逐渐衰减,TPS逐渐达到上限。 然后,我们知道性能开始衰减了,那么是什么原因导致的衰减?此时就需要对响应时间进行拆分,拆分的前提需要熟悉系统的架构,拆分的目的是要知道每个环节消耗的时间,拆分的方法可以通过日志,可以通过监控工具,也可以通过抓包(抓包应该需要和日志配合吧?以老师的例子来说,能抓到tomcat的请求和响应时间吗?我感觉不能……) 再然后,最重要的地方到了,我们要逐步构建自己的分析决策树。随着性能分析经验的累加,我们需要整理并总结每次遇到的性能问题以及相对应的解决方法,同时我们还要不断扩充自己的知识库:系统架构、操作系统、数据库、缓存、路由等等,并将这些知识与经验结合起来。重新梳理,由大到小,由宏观到细节,去画出自己的分析决策树。 最后一点感觉是对第一条的补充,而且应该也是对小白(比如我)的一个提点,当我们刚开始进行性能分析,没有思路的时候,那就可以通过这种替换法来帮助我们快速定位问题。当然,这种方法比较适合简单的系统,如果系统很复杂,这样替换不一定方便了。 这节课很重要,但是像我这种没有实际分析调优经验的小白来说,看懂跟理解好像还是缺少了实际操作在里头。这篇大概需要练习后再反复的回看。 今天的思考题答案基本写在上面的总结里了,如果有理解不正确的地方请老师指正。最后,感谢老师把宝贵的经验分享给我们,老师辛苦啦!展开
作者回复: 写的太好了。你是最认真的一个!
共 3 条评论56 - 吴小喵2019-12-27看到构建分析决策树就吓死了,数据库的知识,操作系统的知识都不懂啊,o(╥﹏╥)o
作者回复: 慢慢来。反正不是吓死就是累死。
14 - rainbowzhouj2019-12-27第一个问题:不能断的原因是保证在测试过程中资源分配的合理性,减少偏差,便于分析出当前环境中的性能瓶颈点。否则断开后系统动态资源会重新分配,造成分析偏差。 第二个问题:构建分析决策树的关键好比如何画一棵树。先确定主干(主要流程),然后添枝干(组成部分),最后画树叶(定位问题)。从上到下,从左到右,拆分...... 总的体会感觉给我这种测试野路子出身的工程师,又梳理了一遍如何定位问题的方法。让我对之前的工作实践中地操作有了进一步地理解。并且重新审视目前我所处的阶段:操作能力待加强。感谢老师,读完文章感到意犹未尽,希望在后续的课程能更加精彩。展开
作者回复: 多谢肯定。 一看评论就是练家子出身的。多做总结,就会有更多的收获。
14 - Geek_65c0a22019-12-27这节课我也期待了好久。高老师写的字数多点,总感觉不够看👀
作者回复: 编辑小美女说我文章写太长了。😣😣
共 3 条评论10 - hou2020-03-04请问老师,递增经验中, 为什么响应时间少,递增幅度小呢?
作者回复: 响应时间小的话,每个线程产生的TPS就高呀。 所以线程增加的幅度就要小一点。如果线程增加多了,因为单TPS高所以压力增加的就快,这样不得于产生明显的性能梯度用来分析。
共 4 条评论9 - 土耳其小土豆2019-12-30看高老师的文件,感觉都能看懂,但是高老师的问题,我却回答不了,特别是第一个问题。
作者回复: 练。你还年轻。
7 - 相看两不厌2020-11-11看了3遍,总结+疑问,希望高老师能回复 1. 判断是否存在瓶颈 通过tps曲线可得出的常见结论:压力越大,tps增幅越小,直至为零,存在瓶颈:tps规律性波动,压力只是将现象放大,存在瓶颈 通过响应时间曲线可得出的常见结论:随着压力增大,响应时间也增大,存在瓶颈 疑问:工作中经常是做高老师所谓的性能验证工作,通常测试环境操作系统相关配置就是和现网保持一致,尽量去测出应用和中间件配置的问题。经常会有疑问就是,接口达不到指标,不知道是不是在当前操作系统配置下,接口本身就是这样的能力了,不好判断是否接口存在问题。 2. 线程递增的策略 场景中的线程递增一定要连续,这样更符合真实场景,可能也给了系统预热的时间 工作中我一直都是按给定的并发数直接去压,看能否达到tps指标。以后我还是用梯度方式,可以看出趋势变化。 疑问:老师说随着响应时间,可以设置不同的梯度。我的理解是都可以按1平稳增加吧 3. 性能衰减的过程 老师通过例子展示的每个线程请求数降低,性能瓶颈就已经出现,其实还是响应时间增大了导致;但是瓶颈出现,并不意味着服务器的处理能力降低,相反,在并发数和响应时间达到某个点之前,处理能力就一直是增加的,事实就是在性能不断衰减的过程中,TPS达到上限。 4. 响应时间的拆分 可以通过日志打印请求响应时间、前端通过TTFB、复杂调用可以依靠调用链将点到点的时间拆分出来 工作中是绕过nginx,直接请求微服务接口进行压测,使用的工具就是调用链,真的非常方便 5. 构建分析决策树 这块感觉是重中之重,同时也是难上加难,我的理解是构建分析决策树是将可能影响性能的模块列出来后,再细分其下的属性、配置等,针对测试数据来判断是否为问题点。体现了性能工程师全面又专业的水准。 自己现在还差的很多,但是老师拿mysql举例还是给我实际工作有很大帮助。我工作中在msyql中就是加索引这一点,从来没像老师这样具体分析。后面详细学习下应用到工作中 6. 场景的比对 疑问:当5个jmeter,1台服务器时已经出现瓶颈,此时压力肯定够大了。但是添加2台服务器后,同样添加到10个jmeter,压力和服务器都在增加,TPS增加也是正常的啊。还是没能找出开始时的瓶颈所在。这节确实不理解。 总的来说,这篇文章在思路上确实让我学习到很多。希望后面能跟老师学习到具体的细节操作,才能在实战中游刃有余。展开
作者回复: 看来这位同学是认真了。我也得认真回答下。 1,在固定的硬件配置下,要想知道接口有没有问题,就需要判断下接口响应时间的消耗,像apm、jvirsualvm,、arthas等工具都可以帮助你。这个判断是综合的判断,还要看硬件资源下是否已达到计算能力的最大值。再细节的就是要看方法级时间消耗是否合理。 2,按1平稳增加是可以的,只是在有些场景中,按1增加会需要比较长的时间,所以有时为了节省时间,我会增加的快一点。如果你有足够的时候,可以一直按1增加。这个没问题。 3. 理解正确! 4. 看来是真的实践了,这也是专栏的价值所在呀,能落地。哈哈。 5. 有思路就不怕落不了地。加油。不管是什么数据库,这思路都会有用。 6. 我写的应该在加了一台服务器之后,tps没有增加,所以才考虑增加多个jmeter的。这时压力有增加,就说明之前的压力不够。 我也觉得这篇是最有价值的,他的作用足以起到提纲挈领的作用。有疑问还可以接着问哈。
6 - 那片海2020-03-06高老师有3个问题问下: 1、 你给了一个 性能场景递增的经验值,是 基于响应值 每秒增加的 线程数,最终达到目标线程数? 2、 线程不能断,如果是测试稳定性场景 也需要这样梯度加压吗 可以直接1s内加压到最大线程数? 3、 在jmeter工具中,梯度加压 是使用默认的线程组 ramp up设置呢, 还是安装插件后使用Stepping Thread Group 和 concurrency Thread Group 设置 ?展开
作者回复: 1. 是的。不过这个过程要多次调整。 2. 稳定性测试场景关注点不在递增那一阶段上,所以递增不递增都可以,就算递增用几分钟,也不影响稳定性测试整体场景的持续时间。 3. 这个都可以,取决于项目中要求的细致不细致了。装了插件我觉得会好一些,控制的细致。
共 2 条评论5 - qiaotaoli2020-01-06老师,再问一下,你文中发的递增经验值,后面的1-3指的是,比如第一个阶梯并发数是10,第二个阶梯并发数变为20-40,对么?另外,为什么响应时间越大后,并发幅度也变大呢?是因为响应时间变大后,并发幅度变化不大,可能看不出太大变化么?
作者回复: 响应时间越短,并发递增越小。
4 - 学员1412021-12-03老师,一般哪些配置会影响抖动呢? 文章中“上升的过程中有几次抖动,这个抖动到后面变大了,也变频繁了,如果这是必然出现的抖动,那也是配置问题”
作者回复: 最大最小空闲线程数之类的就会影响 。
3 - Geek_fbce882020-09-14线程数是100,平均响应时间是0.2秒,没有设置几个点等,请问并发是500吗?因为一秒钟发送了500个请求
作者回复: 对的。
3 - suke2020-03-09关于线程递增的策略,基本几千的并发数就需要多台jmeter去分布式的压了,当压测事件持续几个小时的时候最后生成的压测报告都很大都有几个g,有很大概率生成报告失败,对于这个问题老师有什么好的实践经验么
作者回复: Jmeter+influxdb+grafana实时输出。
共 2 条评论3 - hou2020-02-29请求时间消耗了 28ms,响应时间消耗了 27ms。nginx接到请求的刹那,记录下请求时间,这是一个时间点,消耗28ms一般是在做什么呢,不应该只是一个时间点吗
作者回复: 不是。请求时间是包括了进来和出去的时间,响应是记录的后端的时间。所以请求时间其实是一个时间段,不是时间点。
3 - 筱の简單2020-02-191、为什么线程递增过程不能断? 因为场景中的线程递增且连续符合业务实际场景,可以较好的判断系统瓶颈。 2、构建分析决策树的关键是什么? 构建分析决策树的关键是对架构的梳理,对系统的梳理,对问题的梳理,对查找证据链过程的梳理,对分析思路的梳理。它起的是纵观全局,高屋建瓴的指导作用。展开
作者回复: 理解的很对!
3 - SHATAN CLASS2021-03-12老师好,这篇我看了3遍了,非常喜欢您的课程,觉得您给到的观念和层次感都比较足。 但是其实在很多实际项目中寻在几个问题: 1、性能需求都不明确; 2、测试人员对系统的架构不熟悉,那就更不用谈什么性能分析和调优了。 针对这两点,老师有什么更好的解决方案吗?
作者回复: 1. 只有找相关的人去沟通。或者拿生产数据统计分析。 2. 这个只能学习了,没啥捷径。
共 2 条评论2 - 你比昨天快乐🌻2020-03-17再次来看收获又不一样了。对于秒杀类的场景,我们前期一定是做好了系统预热的工作的,请问这句话中怎么理解系统预热,如何预热?
作者回复: 举例来说,redis中在执行前先加载数据进去。像id之类的提前生成。
2 - hou2020-03-04老师,前面我们约定了性能指标用TPS来描述。但是在性能衰减的例子中,图1是请求数,您在描述中把请求数描述成TPS,这个让我很难理解。这里为什么请求数就成了TPS呢?
作者回复: 在整个专栏中,我都是用TPS这个概念来描述压力的。没有用请求数来描述。 请求数和事务的关系就是,当只有一个请求时,那就不用定义事务了,直接可以把请求数每秒当成TPS。
2 - 伊森2020-02-09高老师,请问本节展示的四幅图:请求每秒、响应时间、线程数和请求/线程,都是jmeter自带的那个HTML报告生成的吗?如果是我没有找到请求每秒和请求/线程这两幅图,另外响应时间和线程数两幅图分别是对应的 Response Times Over Time和Active Threads Over Time吗?请帮忙确认一下在哪里找到这4幅图吗?谢谢
作者回复: 是我拿原始数据用excel生成的。
共 2 条评论2 - 夜空中最亮的星2020-01-15果然是倾囊相授,谢谢老师xxe
作者回复: 多谢支持。
2