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各并发请求,访问的路径就是本地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性能优化的方法和技术,并且结合实际场景进行分析和演练。
PAAS平台的web应用性能测试与分析的更多相关文章
- PAAS平台的web应用性能測试与分析
引言 为什么我会写这一篇博客,由于近期非常多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用訪问非常慢,有极少数应用甚至常常出现504超时现象.当然大家首先想到的是jae性能太差,这也是 ...
- Web项目性能测试结果分析
1.测试结果分析 LoadRunner性能测试结果分析是个复杂的过程,通常可以从结果摘要.并发数.平均事务响应时间.每秒点击数.业务成功率.系统资源.网页细分图.Web服务器资源.数据库服务器资源等几 ...
- Windows Azure Cloud Service (39) 如何将现有Web应用迁移到Azure PaaS平台
<Windows Azure Platform 系列文章目录> 本文将简单介绍,如何将企业内现有的ASP.NET应用程序迁移到Azure PaaS平台. 因为在迁移过程中,可能需要对现有的 ...
- 转:Web网站性能测试分析及调优实例
1.背景 前段时间,性能测试团队经历了一个规模较大的门户网站的性能优化工作,该网站的开发和合作涉及多个组织和部门,而且网站的重要性不言而喻,同时上线时间非常紧迫,关注度也很高,所以对于整个团队的压力也 ...
- Web网站性能测试分析及调优实例
1 背景 前段时间,性能测试团队经历了一个规模较大的门户网站的性能优化工作,该网站的开发和合作涉及多个组织和部门,而且网站的重要性不言而喻,同时上线时间非常紧迫,关注度也很高,所以对于整个团队的压 ...
- 终极指南:企业级云原生 PaaS 平台日志分析架构全面解析
早些时候 Erda Show 针对微服务监控.日志等内容做了专场分享,很多同学听完后意犹未尽,想了解更多关于日志分析的内容.Erda 团队做日志分析也有一段时间了,所以这次打算和大家详细分享一下我们在 ...
- 移动App开发需要更多的PaaS平台而不是IaaS
时代的变迁,创业的大潮,越来越多的人关注了有点开发,越来越多的人了解了互联网服务术语:PaaS.IaaS.SaaS.BaaS等.今天大家在开发App的时候这么多复杂的云服务如何来选择呢? IaaS服务 ...
- PaaS 平台的网络需求
在使用 Docker 构建 PaaS 平台的过程中,我们首先遇到的问题是需要选择一个满足需求的网络模型: 让每个容器拥有自己的网络栈,特别是独立的 IP 地址 能够进行跨服务器的容器间通讯,同时不依赖 ...
- 低代码开发Paas平台时代来了
概述 **本人博客网站 **IT小神 www.itxiaoshen.com 低代码理论 概念 低代码开发基于可视化和模型驱动的概念,结合了云原生和多终端体验技术,它可以在大多数业务场景中,帮助企业显著 ...
随机推荐
- linux下(Ubuntu、centos)添加永久静态路由的方法
项目中经常遇到多网卡的服务器,但是一个服务器的默认网关只有一个,当需要在多个网络中访问的时候(特别是在公安.交警等政府项目中),就需要添加静态路由了. 添加静态路由的方法有很多种,下面介绍2种比较常见 ...
- Rstudio代码的快捷键
按tab键:有自动补全的功能 Ctrl+Enter:运行改行代码 Ctrl+1: 移动焦点到source编辑区 Ctrl+2: 移动焦点到控制台 Ctrl+enter Ctrl+L:删除该控制台的所有 ...
- python第十三天
这几天在欺负docker兽,很是开心,但是没想到领导突然让我去殴打openstack兽,完全没有兴趣嘛,毕竟前一阵一直在吊打它,当然啦,对于愚蠢的人类而言openstack兽是十分强大的,不过对于北方 ...
- 声明、定义 in C++
序 声明和定义是我们使用的基础,但是对于声明和定义的概念,我们不甚了了,也就是说感觉好像是这样,但是真要详细说明就说不上来. 有博主对于声明和定义有以下描述: 1.需要建立存储空间的 ...
- 常用UML模型简要小结
关系: 关联(组合,生命周期相同:聚合,物以类聚),依赖,泛化(继承),实现 还有 包含,细化复用已有用例:扩展,非必要主要的用例 图: 1.用例图:就是描述一个功能场景(集合),其实用例编写(前后置 ...
- ObjC.class-cluster
class cluster In a class cluster, only an abstract superclass is public. Allocating an instance actu ...
- 多媒体技术基础之---Come on!来点儿音乐吧
其实要说在Linux系统下播放音乐,确实是一件让人非常抓狂的事情,抛开各种音频格式的商业授权不说,即使提供给你相应的解码库,能玩儿得转的人那又是少之又少.可能有些盆友说ubuntu这方面确实做得不错, ...
- 浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...
- spring expression
http://transcoder.baidu.com/from=1014517c/bd_page_type=1/ssid=0/uid=0/baiduid=C286FE95679B12426FD1A9 ...
- 云计算和大数据时代网络技术揭秘(十二)自定义网络SDN
软件定义网络——SDN SDN是网络技术热点,即软件定义网络,OpenFlow是实现SDN思想的一个框架标准, open是指公开.开放,具体为控制平面的规则由各个通信厂家自定义变为公开的技术标准, f ...