性能分析之排队论应用
文章目录
- 一、前言
- 二、排队模型
- 1、M/M/1/∞ /∞ /FCFS:单线程单连接,先到先服务
- 2、M/M/C/∞ /∞ /FCFS:多线程多连接,先到先服务
- 三、排队的计算
- 1、排队计算 1
- 2、排队计算 2
- 3、排队计算 3
- 4、小结
- 四、数据统计分析
- 1、请求到达率
- 2、响应时间分布
- 3、小结
- 五、创建 M/M/C/∞ /∞ /FCFS 模型
- 六、总结
一、前言
之所以写排队论的话题是因为这个理论和性能分析中的队列分析有关。
这里我尽量不写和数学相关的公式,只写分析部分,以免看得人心塞。
写之前先说几个假设条件(在最后会对这几个条件加以说明):
- 每请求的响应时间相同(为什么要做这个假设?是因为不想计算得太复杂)
- 每个服务器提供稳定的服务,没有抖动
- 到达分布是满足泊松分布的
- 响应时间分布是满足指数分布的
二、排队模型
1、M/M/1/∞ /∞ /FCFS:单线程单连接,先到先服务
(注:以上是 kendall 表达式)
在下图中有几个前提条件需要说明,单连接单服务进程。
如果这个连接中的前 8 个请求可以进入系统得到响应,并且同时还有两个空位,也就是说系统可以同时处理 10 个请求的话,那再接着到达系统的前两个请求就可以立即得到响应。那么后续的两个请求将进入队列等待。
这就是最简单的模型:M/M/1/∞ /∞ /FCFS
。
2、M/M/C/∞ /∞ /FCFS:多线程多连接,先到先服务
(注:以上是 kendall 表达式)
当然大部分系统都不会是上面这个样子,而是下面这个样子。
在下图中,就是进来的连接通道有 4 个(有人问为什么是 4 个呢,是因为画多了太乱)。
如果每个连接中的前 8 个请求到达系统可以得到响应,后续两个也可以得到响应。那再后续的两个就必然进入队列等待。
这就是另一个模型:M/M/C/∞ /∞ /FCFS
。
基于第二个模型标识下相应的数学符号:
三、排队的计算
代入相应的数据计算(因为数学公式实在是帖起来太费劲,并且看起来眼晕,这里我就直接把代入数据后的结果帖出来)。
1、排队计算 1
上表中有几个输入值,即 λ/μ/c
,这几个值都是可以从系统中得到,或者测试出来的。下面的值部分是通过计算得来的。其中也有一个假设值就是标准方差,之所以现在的计算没有加入标准方差是想减少计算的复杂度。
2、排队计算 2
从上面的数据可以看到实际系统的处理能力是 2000请求/秒。那如果是 2000 请求同时到达系统会是什么样呢?如下所示:
也就是说如果到达请求数和系统的能力一致的话,响应时间是不变的,但是服务强度、线程空闲率、新请求的排队概率、每线程的平均请求数等都变了。
3、排队计算 3
如果到达的请求数持续大于系统能力呢?如下所示:
从上表可以看到,如果到达系统的请求数持续超过系统的处理能力的话,那将导致响应时间变长,并且都长在了排队中。
4、小结
通过排队的计算可以知道:
系统当前是否负载过重;
系统如果想满足更高的并发应该增加多少处理线程;
系统的超时应该如何设计;
系统的容量应该如何评估;
以上的计算过于理想化,在现实的环境中当然不会是这样的结果,所以本文的标题是简述。
在现实的环境计算中,有几个点是需要再细究的(对应开篇的假设条件)。
- 到达率:通过系统中的请求到达时间点统计之后,通过卡方检验判断到达率满足哪种分布模型;
- 响应时间的标准方差:通过统计响应时间,计算标准方差后代入计算,则响应时间也会受到影响;
- 系统的处理能力:在系统有峰值持续时间对响应时间和超时设计的要求;
对这些做细致的统计分析之后,才能对一个系统容量有比较好的指导作用。
四、数据统计分析
今天就说明两个重要的输入数据的获取和分布说明。
这里以一个示例来说明一下,在 7D Group 的 server上 搭了一个简单的应用,我用 jmeter 做了一个最简单的脚本,一个 get 就结束。
如果想分析更复杂的系统,可以将整个业务流做为分析对象,粒度的选取对分析的结果会有影响,所以要确定自己的分析目标。
1、请求到达率
通过 nginx 的日志(用 tomcat 的日志也可以)分析得到如下到达时间分布和频率如下:
单位:s
通过 K-S 检验结果如下:
可见到达分布是符合泊松分布的。
2、响应时间分布
通过 nginx 的日志(用 tomcat 的日志也可以)分析得到如下响应时间如下表所示:
单位:ms
通过 K-S 检验结果如下:
可见响应时间是符合指数分布的。
这两个数据满足了 M/M/C/∞ /∞ /FCFS
的条件,接下来就可以用这个模型的相应计算方法来计算了。
对其他的排队模型也是一样需要分析模型的前提条件。所以对实际数据的分析就非常重要。
3、小结
要创建一个成型的排队模型,有到达率和响应时间分析是不够的,还需要几个数据:
设定到达率随机数种子,以确定生成的随机数可重复且要满足真实的分布,不然模型不可复用;
确定队列长度和等待时间;
确定有几个串行队列和并行服务器;
当我们面对一个更复杂的系统时,也一定不要慌乱,数据分析是一个理智的过程。
五、创建 M/M/C/∞ /∞ /FCFS 模型
本文使用这个模型,因为这个是比较典型的排队场景,在性能的场景中经常可以遇到。
定义如下参数:
set.seed(2) # 定义随机数种子,以保证随机数据具有可重复性
Requests<- 1000000 #请求数
ArrivalRate <- 1/2 #到达率
SeviceRate <- 1/3 #服务率
Threads = 10 # 定义线程个数
通过一些计算,得到一些中间数据:
interarrivals <- rexp(Requests, ArrivalRate) #请求分布
arrivals <- cumsum(interarrivals) #请求总数
service <- rexp(Requests, SeviceRate) #请求得到的服务分布
rho <- (1/SeviceRate) / (1/ArrivalRate) #服务强度
Vectorize(P_n, "n")(rho=rho, n=c(0:30), k = k) #向量化转化
通过排队模型计算得如下结果(算法请参考排队论相关书籍,只要用语言实现即可,本文用 R 语言示例,只要知道算法,用 excel也是可以的):
系统内的响应时间:
# Mean response time (time in system)
[1] 2.500001请求平均响应时间:
# Mean response time
[1] 2.996585
六、总结
在创建模型时,需要将相关的参数考虑进来,以确定对模型的影响。
不管是在宏观分析,还是在微观分析上,只要思路清晰,都可以用排队论来分析性能,前提是要理解如何用。不要乱用。
前面提到了一些基本的概念和数据获取及分布分析,这些都是有成型的工具可以完成,像 SPSS 就可以完成卡方检验或 K-S 检验,以确定数据是否是泊松分布或指数分布。因为确定了分布之后,才可以用相应的排队论表达式和公式来完成后面的计算。
系统数据有些比较规整(比如说一般分布的马尔可夫到达链),有些比较复杂(各种不同的分布模型)。需要对这些都进行了分析之后,才能创建出适合的模型出来。所以抓取一些数据做统计分析就非常重要了。
我的目的是通过这样的计算可以得到比较通用的模型(不是绝对能用哦),在不同的场景下都可以通过得到一些基本的数据信息之后,加以整理分析,就可以得到可以复用的排队模型,并最终指导生产运营的推导需求。
这样就可以避免部分在生产环境上的问题,不用花大量的时间成本去做分析,即可知道要加多少服务器,要支持多少个用户,用户的响应时间变化曲线等等。
性能分析之排队论应用相关推荐
- 性能分析之性能建模简述
文章目录 一.前言 二.建模的定义 三.业务模型和测试模型 四.监控模型 五.分析模型 六.失效模型 七.排队模型 八.总结 一.前言 经常在性能领域里听到建模这个词,也看到有些人写了一些文章或 PP ...
- 性能之巅:常用性能分析方法
目录 为了便于总结,这些方法已经被归类成了不同的类型 1.街灯讹方法 2.随机变动讹方法 3.责怪他人讹方法 4.AdHoc核对清单法 5.问题陈述法 6.科学法 7.诊断循环 8.工具法 9.USE ...
- Go 学习笔记(81)— Go 性能分析工具 pprof
Go 语言工具链中的 go pprof 可以帮助开发者快速分析及定位各种性能问题,如 CPU消耗 .内存分配及阻塞分析 .具体作用如下: 性能分析首先需要使用 runtime.pprof 包嵌入到待分 ...
- App性能分析数据监控
App性能分析数据监控 APP的性能监控包括: CPU 占用率.内存使用情况.网络状况监控.启动时闪退.卡顿.FPS.使用时崩溃.耗电量监控.流量监控等等. 文中所有代码都已同步到github中,有兴 ...
- Tesla T4视频编码性能分析
Tesla T4视频编码性能分析 从开普勒开始的所有 NVIDIA GPUs 都支持完全加速的硬件视频编码: GPUs 支持完全加速的硬件视频解码.最近发布的图灵硬件提供了张量核心和更好的机器学习性能 ...
- Yolov4性能分析(下)
Yolov4性能分析(下) 六. 权重更新 "darknet/src/detector.c"–train_detector()函数中: ....../* 开始训练网络 */floa ...
- Yolov4性能分析(上)
Yolov4性能分析(上) 一.目录 实验测试 1) 测试介绍 2) Test 3) Train 二.分析 1.实验测试 1 实验测试方法 Yolov4训练train实验方法(Darknet shou ...
- 关于 Rocksdb 性能分析 需要知道的一些“小技巧“ -- perf_context的“内功” ,systemtap、perf、 ftrace的颜值
文章目录 内部工具 包含头文件 接口使用 核心指标 Perf Context IOStats Context 外部工具 Systemtap 工具 Perf工具 Ftrace 工具 2020.8.20 ...
- Linux性能分析命令工具汇总
转自:http://rdc.hundsun.com/portal/article/731.html?ref=myread 出于对Linux操作系统的兴趣,以及对底层知识的强烈欲望,因此整理了这篇文章. ...
- C#中判断空字符串的3种方法性能分析【月儿原创】
C#中判断空字符串的3种方法性能分析 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/ 时间:2007.4.28 3种方法分别是:string ...
最新文章
- 深度学习神经网络 端到端的学习方式
- java寻找最大的字母_【LeetCode(Java) - 744】寻找比目标字母大的最小字母
- 前端代码规范-CSS
- Vulkan统一所有平台的API
- 荣耀10 Turbo版将上线发布,游戏玩家欢呼的手游利器
- python 利用pyinstaller 编译.exe文件过程中编写完的.exe文件执行过程中闪退
- 视觉设计师跟平面设计_使设计具有视觉吸引力
- Firefox about
- 人工智能 - paddlepaddle飞桨 - 深度学习基础教程 - 编程指南
- 解决office2003无法卸载的问题
- oracle not aviable,ORA-01034: ORACLE not available
- jquery的快捷手册
- Cannot open D:\Program Files\Anaconda\Scripts\pip3-script.py
- python 拼音相似度_人工智能之pypinyin jieba gensim 之最简单的相似度实现
- Problem D 牛栏(aggr)
- Bitcion Core 目录说明、使用说明、bitcoin.conf 配置说明
- 面向对象之抽象类与接口【Java】
- 那些让我印象深刻的五个bug
- DOS或命令行下查看进程,结束进程命令
- 齐二TK6916/20/26/32系列数控落地铣镗床简介3
热门文章
- 正点原子STM32F103 DMA代码例程魔改
- 桌面云之深信服VDC安装部署和虚拟机模板创建
- Delcam PowerInspect 5040 sp1/
- html自动加好友,WeTool微信自动加好友软件
- 网站爬虫Python
- Excel 闪退及老是提示内存不足情况实测解决方法
- java电子邮件收发系统的设计与实现_基于Java Mail的电子邮件收发系统的设计与实现毕业论文.doc...
- linux启动tongweb命令,TongWeb安装配置--Linux
- 文字时钟罗盘动态html代码_文字时钟罗盘动态html代码工具-文字时钟APP最新版下载-游戏窝...
- 基于html的2048小游戏,基于jQuery的2048小游戏设计(网页版)