yangjianxv
作者yangjianxv·2017-08-22 09:23
部门总经理·成方金融科技有限公司

R语言显微镜下的响应时间数值分布

字数 998阅读 4638评论 0赞 2

响应时间是最重要的性能指标之一,因此在性能监控、结果统计过程中,我们对响应时间也格外关照。

通常情况下,我们统计平均响应时间,偶尔也会统计响应时间中位数,甚至有时候要特殊处理,比如去掉异常大的值之后取平均值。

在一场性能数据抓取之后,数以百万计的数值是怎么样的分布?我们可以采用统计软件进行全景展示。R语言是如今最流行的统计软件,今天我们来看看R语言能干些什么。

首先,最小值、最大值、平均值、中位数就不用说了,95%的数据分布在哪里,90%的数据分布在哪里,50%的数据分布在哪里,等等,这些都是基本的数据。
接下来,咱们再看看R能给出什么样的图表

以一个系统为例,负责收到请求、处理并返回。这个系统有业务处理日志,包含了业务的大小、业务发起时间、开始处理时间、处理完成时间。R语言对这些海量的数据进行统计。

请求的大小分布图

1.png

1.png

纵坐标为Message样本大小,单位KB,横坐标为样本索引。Message样本大小基本在15KB以内

当然,也可以看看请求大小和响应时间之间的关系
请求大小和响应时间之间的关系

2.png

2.png

呃,似乎本系统的响应时间和请求的报文大小关系不大。这里选取的是另一个场景的数据,仅做示例

用户发送请求的时间与本系统处理完成后返回的时间间隔

3.png

3.png

纵坐标为间隔时间,单位毫秒,横坐标为样本索引(10000指的是第10000个请求)。样本中基本发送和收到间隔2秒以内

本系统的处理时间

4.png

4.png

纵坐标为处理时间,单位毫秒,横坐标为样本索引。样本基本0.25秒以内
哇,似乎很诡异,响应时间的图形是一条一条的

数据分布重新排列

5.png

5.png

重新排列后,可以清晰的看出,响应时间的分布非常集中(集中到5个柱子上),并且这几个柱子之间的差距的相同的,10ms。

这是一个非常吃惊的结果。如果我们比较较真的分析的话,可以从应用的处理逻辑、操作系统的调度等方面分析。

  • 应用有没有人为设置处理间隔,比如人为的sleep 10毫秒?
  • CPU的调度间隔默认也是10毫秒,如果一个请求本来需要25毫秒处理完

    • 如果连续分配3个时间片,那么处理时间就是25毫秒
    • 如果中间被强占了一个时间片,4个时间片才完成(中途有一个时间片是别的进程在跑),那么处理时间就是35ms。
    • 如果中间被强占了2个时间片,5个时间片才完成(中途有2个时间片是别的进程在跑),那么处理时间就是45ms。

欢迎大家与我留言,也可以关注个人微信公众号:性能测试与调优

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

本文隶属于专栏

作者其他文章

相关问题

X社区推广