今天的内容虽然有点多,但总的来说,思路比较清晰,理解起来也比较容易。如果你认真学习了今天的内容,不妨思考两个问题:
为什么线程递增过程不能断?
构建分析决策树的关键是什么?
第一个问题:为什么线程递增过程不能断?
这里涉及开篇提到的性能分析能力 ——「趋势分析」。
就像之前提到的一样,分析性能数据趋势需要对一个时间序列数据的分析,一般采用「线性回归分析」算法。
回归分析研究的是多个变量之间的关系。它是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。
假设有 N 个样本点,这里我们可以简单理解线性回归算法就是求一条直线 Y=f(X),使得各点到这个曲线的距离的绝对值之和最小。
在这种技术中,因变量(TPS)是连续的,自变量(线程数)可以是连续的也可以是离散的,回归线的性质是线性的。
但在性能测试中,由于系统本身的最大 TPS 上限是固定的,即服务端的处理能力(容量)是固定的,如果自变量(线程数)压力过大,那么系统平均处理时间(响应时间)会被拉长。不过这个时候其实瓶颈早就出现了。
所以在场景压测中的自变量(线程数)递增一定需要是连续的,并且在递增的过程中要有梯度的,且场景中的线程递增一定要和因变量(TPS) 的递增有比例关系,且不是突然达到最上限,这样才能准确找出系统的瓶颈点。
第二个问题:构建分析决策树的关键是什么?
决策树基本上就是把我们以前的分析经验总结出来,在做决策树的时候,一般会经历两个阶段:构造和剪枝。
概念简单来说:
- 构造的过程就是选择什么属性作为节点的过程构造的过程就是选择什么属性作为节点的过程;
- 剪枝就是给决策树瘦身,这一步想实现的目标就是,不需要太多的判断,同样可以得到不错的结果。之所以这么做,是为了防止“过拟合”现象的发生。
从性能分析角度来理解:
- 构造:需要根据经验是对架构的梳理,是对系统的梳理,是对问题的梳理,是对查找证据链过程的梳理,是对分析思路的梳理;
- 剪枝:需要对对不同时间序列性能数据的相关性分析,其核心就是要理解各个性能指标的关系,同时进行证据链查找,根据数据的变化来推断得出各种结论,比如故障判别、根因分析等。
为什么线程递增过程不能断?构建分析决策树的关键是什么?
1.线程递增就是模仿线上流量逐步增加的过程,所以过程不能断
2.构建分析决策树的关键是分类,从相互独立的点去cover整个原因分析。
受益颇多,谢谢老师,期待更多干货。。。
第一个问题:不能断的原因是保证在测试过程中资源分配的合理性,减少偏差,便于分析出当前环境中的性能瓶颈点。否则断开后系统动态资源会重新分配,造成分析偏差。
第二个问题:构建分析决策树的关键好比如何画一棵树。先确定主干(主要流程),然后添枝干(组成部分),最后画树叶(定位问题)。从上到下,从左到右,拆分......
总的体会感觉给我这种测试野路子出身的工程师,又梳理了一遍如何定位问题的方法。让我对之前的工作实践中地操作有了进一步地理解。并且重新审视目前我所处的阶段:操作能力待加强。感谢老师,读完文章感到意犹未尽,希望在后续的课程能更加精彩。
思考题一,为什么线程递增过程不能断?
1.线程递增更接近真实的业务场景。性能测试的目的是为真实业务场景提供依据,提供信心,如果不能反映真实业务场景,这种测试跟没做又有什么区别呢?
2.为理解数据提供更多的信息。更多的数据信息肯定有利于更好的理解数据,防止理解偏差。
3.更多的数据信息有利于更好地把握趋势,有利于分析,更为精准地发现问题,为调优提供依据。
4.性价比最高,不仅有经济上的,也是时间上的。可以用更少的投入更少的时间获得更多的信息。
思考题二,构建分析决策树的关键是什么?
首先是要有全局观,要从架构系统角度全面地去梳理发现问题,其次是要有方法论,不能眉毛胡子一把抓,不能像无头苍蝇乱窜。而这就要求我们要进行知识的积累、经验的积累。
台上一分钟,台下十年功呀!感谢老师精彩的讲解!谢谢老师的倾囊相授!希望老师能放更多的分析决策树,让我们能在老师的树荫下乘凉。这次课也明显地看到了巨大的差距,希望老师可以为我们推荐个书单,方便我们练好台下功。
后面图表分析 每秒请求是指每秒的请求数(RPS)吗 ,如果是,那么增加jmeter数量后,应该是每秒请求增加,而非tps增加
老师,我想问一下,假如一个系统存在瓶颈,但是又不明显,除了讲的方法外,还有什么办法?我想更进一步深入排查,一般的排查思路是什么?顺序是什么?
当响应时间增加了之后,再通过分段拆响应时间的方式就可以了。
操作系统的分析决策树