• PAAS平台的web应用性能測试与分析


    引言

    为什么我会写这一篇博客,由于近期非常多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用訪问非常慢,有极少数应用甚至常常出现504超时现象。当然大家首先想到的是jae性能太差,这也是人之常情,往往出现什么错误的时候首先想到是别人的不好。工作中非常多同事也是这样,假设软件系统出现一个bug首先怀疑的肯定不是自己写的代码。今天花时间写这一篇博客主要就是告诉大家如何确定我们部署在PAAS平台(不不过JAE哦)web应用为什么慢?慢在哪儿了?有什么方法能够解决?


    原因分析
    出现訪问自己web应用慢从宏观上能够总结为以下三点:
    (1)网络慢:详细来说就是訪问者同部署web应用的PAAS平台之间的网络慢;
    (2)PAAS平台性能出现故障:详细来说就是因为各种原因导致PAAS平台不能非常好服务部署在它上面的应用;
    (3)web应用本身慢:因为各种原因(频繁读写磁盘,大量耗时的计算,资源竞争等)导致web应用不能非常快的响应訪问者的请求。

    上面三点主要总结于web应用的訪问路径。由于訪问PAAS平台的web应用首先须要经过网络,然后经过PAAS平台的过滤和转发等处理,最后才到达web应用本身处理。这三个环节不论什么一个出现故障都会导致web应用訪问变慢。知道原因了,我们还须要推断究竟是哪一个环节出现了问题,以下就说说如何定位详细的环节。


    定位详细原因
    上面分析的三个原因除了第二个原因以外。大家都能够自己定位和排除,首先检查网络。为了更加准确我们能够从一下方面进行排除:
    (1)首先检查訪问其它站点是否出现非常慢的现象,假设非常快,那么说明你的网络肯定大体上是正常的;
    (2)訪问相应PAAS平台提供的相关站点和PAAS平台所属公司的站点。比如JAE。你能够訪问京东商城主站和京东云平台首页等,BAE能够訪问百度相关站点。SAE能够訪问新浪相关站点。由于这些关联站点一般部署在同一个机房或者同一个城市。假设这些站点也非常慢。那多半说明这些站点相关机房网络出现故障或者訪问量非常大。导致这些站点对外出口流量和訪问速度变慢,也就是对外提供服务的能力扛不住了,假设没有问题。那么能够排除大的网络环境是没有问题的;

    排除了网络因素,我们就能够排除后面两个原因了,因为PAAS平台的性能对用户基本上是透明的,就是用户基本上无从得知,所以能够直接跳过这个原因的排除,当然事实上是有手段的,仅仅是略微复杂,所以不方便全部用户。假设是这样的原因不妨交给PAAS平台的开发者去处理。

    最后一个原因当然就是web应用自身的实现了,我发现非常多用户反馈的站点訪问慢的原因都是因为自己代码实现的问题。
    首先出现故障的站点大多数是有一定訪问量的,特别是某一个时间段出现訪问量巨大,并且频繁读写磁盘。

    为了定位这样的原因希望大家把应用部署在自己本地使用web性能測试工具做验证就可以,比如比較经常使用的web性能測试工具ab,这个事apache自带的測试工具,ubuntu下安装和使用都很方便,比如我们直接在控制台中输入ab。假设没有安装,ubuntu系统会例如以下提示:
    The program 'ab' is currently not installed.  You can install it by typing:
    sudo apt-get install apache2-utils
    然后安装提示安装就可以,成功安装以后我们就能够使用ab软件对我们部署在本地的web应用进行性能測试评估了,命令例如以下:
    ab -n1000 -c10 http://localhost/
    上面命令的意思是总共发送1000次请求,每次10各并发请求。訪问的路径就是本地webserver的根路径。结果例如以下:
    This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
    Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
    Licensed to The Apache Software Foundation, http://www.apache.org/

    Benchmarking localhost (be patient)
    Completed 100 requests
    Completed 200 requests
    Completed 300 requests
    Completed 400 requests
    Completed 500 requests
    Completed 600 requests
    Completed 700 requests
    Completed 800 requests
    Completed 900 requests
    Completed 1000 requests
    Finished 1000 requests


    Server Software:        Apache/2.4.6
    Server Hostname:        localhost
    Server Port:            80

    Document Path:          /
    Document Length:        177 bytes

    Concurrency Level:      10
    Time taken for tests:   0.075 seconds
    Complete requests:      1000
    Failed requests:        0
    Write errors:           0
    Total transferred:      446000 bytes
    HTML transferred:       177000 bytes
    Requests per second:    13283.74 [#/sec] (mean)
    Time per request:       0.753 [ms] (mean)
    Time per request:       0.075 [ms] (mean, across all concurrent requests)
    Transfer rate:          5785.69 [Kbytes/sec] received

    Connection Times (ms)
                 min  mean[+/-sd] median   max
    Connect:        0    0   0.1      0       1
    Processing:     0    1   0.2      0       2
    Waiting:        0    0   0.2      0       2
    Total:          0    1   0.1      1       2
    ERROR: The median and mean for the processing time are more than twice the standard
          deviation apart. These results are NOT reliable.

    Percentage of the requests served within a certain time (ms)
     50%      1
     66%      1
     75%      1
     80%      1
     90%      1
     95%      1
     98%      1
     99%      1
    100%      2 (longest request)
    上面详细每一项代码什么意义能够网上查找,这里我们主要关心一下例如以下这个选项:
    Requests per second,从结果看这个值是13283.74 [#/sec] (mean),表示每一秒钟能够处理13283.74各请求。由于我这个非常easy的一个静态页面(就是apacheserver安装后默认的首页),所以看起非常不错,并且是通过本地localhost。没有经过网络。

    我们能够改变訪问的条件持续做非常多组測试。比如我把并发请求数改为100,即-c100,得到參数值为:
    Requests per second:    11843.29 [#/sec] (mean)
    明显比上面降低了一些,继续改总请求数为10000,并发数1000,即-n10000 -c1000得到例如以下值:
    Requests per second:    747.98 [#/sec] (mean)
    这个时候降低的相当的可怕了,所以通过这个ab測试工具就行知道我们的web应用可以承担多少的并发訪问,当然我们可以通过不断的挑战參数进行測试,然后绘制成一个曲线图观察就非常方便看出我们web应用的最佳性能点。超过那么最佳性能点可能就导致性能下降。那么訪问速度也就跟着下降了。


    当然仅仅看上面一个參数看不出详细一个用户訪问所须要等待的时间,还有一个參数能够看出。我相应三次的測试这个參数值分别例如以下:
    Time per request:       0.753 [ms] (mean)
    Time per request:       8.444 [ms] (mean)
    Time per request:       1336.942 [ms] (mean)

    从三次測试能够看出,随着并发数的增长。一个用户平均等待的时间也在变长,这个终于就反应到用户web訪问的结果(速度的快慢),这里測试的仅仅是一个简单的静态网页,假设是复杂的动态网页(比如訪问数据库,读写磁盘和大量的计算等)那么就更加复杂了。一个请求的快慢因为web应用须要处理的业务逻辑有非常大的关系,当然如何让这些业务逻辑运行更快而且并行运行,这个就须要程序实现者考虑了。


    总结
    这里仅仅是简介了部署在PAAS平台web应用訪问非常慢的可能原因和简单定位方法,起始我认为大家应该中的关注在第三点上,自身应用的优化,由于前面两点都是我们不可控的,网络这个PAAS平台自身也解决不了,最多能够部署多个机房多个宽带运营商和cdn处理等,可是用户自身的网络问题PAAS平台也是解决不了的。

    至于PAAS平台自身的原因。大家就更不用操心了。他们比你们更关系自身PAAS平台的性能,由于上面托管着成千上万的web应用。他们时时刻刻都在关系着自身平台的性能拼劲,想着各种方法优化。

    假设PAAS平台的原因导致用户部署的web应用訪问非常慢甚至不可用那么这个PAAS平台自身也做不下去的。
    最后还想强调一点就是web应用自身的性能优化问题,如今各种语言都提供了非常好的开发框架,理论上都是稳定的而且性能是不错的,当然特殊场景须要特殊考虑。

    可是我们自身在设计web应用的时候可能须要考虑的很多其它,不要妄想一个简单的开发框架就能解决全部的问题,尤其是性能问题。设计到web应用优化的知识和技术非常的多也非常的复杂,还有非常多场景,所以这是各长久的过程。后面有机会也会给大家介绍一些web性能优化的方法和技术,而且结合实际场景进行分析和演练。

  • 相关阅读:
    软件杯_视频全量目标分析和建模_初步分析
    《一线架构师实践指南》第三部分阅读笔记
    eclipse配置Struts2至Tomcat8.5
    《一线架构师实践指南》阅读笔记02
    Java中对list集合使用HashSet去重不成功
    学习02
    《一线架构师实践指南》阅读笔记01
    通过DOS命令将txt文件导入mysql数据库
    zookeeper集群环境搭建详细图文教程
    SSO之CAS单点登录详细搭建教程
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6917238.html
Copyright © 2020-2023  润新知