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

引言web

为何我会写这一篇博客,由于最近不少京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用访问很慢,有极少数应用甚至常常出现504超时现象,固然你们首先想到的是jae性能太差,这也是人之常情,每每出现什么错误的时候首先想到是别人的很差,工做中不少同事也是这样,若是软件系统出现一个bug首先怀疑的确定不是本身写的代码。今天花时间写这一篇博客主要就是告诉你们怎样肯定咱们部署在PAAS平台(不只仅是JAE哦)web应用为何慢?慢在哪儿了?有什么方法能够解决?数据库

 

缘由分析
出现访问本身web应用慢从宏观上能够总结为下面三点:
(1)网络慢:具体来讲就是访问者同部署web应用的PAAS平台之间的网络慢;
(2)PAAS平台性能出现问题:具体来讲就是因为各类缘由致使PAAS平台不能很好服务部署在它上面的应用;
(3)web应用自己慢:因为各类缘由(频繁读写磁盘,大量耗时的计算,资源竞争等)致使web应用不能很快的响应访问者的请求。

apache

上面三点主要总结于web应用的访问路径,由于访问PAAS平台的web应用首先须要通过网络,而后通过PAAS平台的过滤和转发等处理,最后才到达web应用自己处理。这三个环节任何一个出现问题都会致使web应用访问变慢。知道缘由了,咱们还须要判断究竟是哪个环节出现了问题,下面就说说怎样定位具体的环节。ubuntu

 

定位具体缘由
上面分析的三个缘由除了第二个缘由之外,你们均可以本身定位和排除,首先检查网络,为了更加准确咱们能够从一下方面进行排除:
(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各并发请求,访问的路径就是本地web服务器的根路径,结果以下:
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各请求,由于我这个很简单的一个静态页面(就是apache服务器安装后默认的首页),因此看起很不错,并且是经过本地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性能优化的方法和技术,而且结合实际场景进行分析和演练。网络

相关文章
相关标签/搜索