引言

为什么我会写这一篇博客,由于近期非常多京东云擎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性能优化的方法和技术,而且结合实际场景进行分析和演练。

PAAS平台的web应用性能測试与分析的更多相关文章

  1. 通过Nginx訪问FastDFS文件系统并进行图片文件裁剪的性能測试和分析

    前段时间公司的分布式图片文件系统(FastDFS)做了图片裁剪和缩放功能,并把缩放计算和FastDFS做了解耦分离,前端用虚拟机作为图片文件缩放的訪问代理层(Nginx Proxy),后端使用ngin ...

  2. Window平台搭建Redis分布式缓存集群 (一)server搭建及性能測试

    百度定义:Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对很多其它.包含string(字符串).list(链表).set(集合).zset(sort ...

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

    引言 为什么我会写这一篇博客,因为最近很多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用访问很慢,有极少数应用甚至经常出现504超时现象,当然大家首先想到的是jae性能太差,这也是人之 ...

  4. PHP归档phar性能測试

    PHP自从5.3后新增PHAR归档,Phar 归档的概念来自 Java™ 技术的 JAR 归档,它同意使用单个文件打包应用程序.这个文件里包括运行应用程序所需的全部东西.该文件不同于单个可运行文件,后 ...

  5. Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin)

    近期在appfuse看到使用webtest-maven-plugin实现Web应用的集成測试,研究了下.感觉很不错.对于Web应用自己主动构建很有帮助,在性能測试之前能够保证Web应用的基本功能工作正 ...

  6. JNI/NDK开发指南(九)——JNI调用性能測试及优化

    转载请注明出处:http://blog.csdn.net/xyang81/article/details/44279725 在前面几章我们学习到了.在Java中声明一个native方法,然后生成本地接 ...

  7. Maven实战(五)——自己主动化Web应用集成測试

    自己主动化集成測试的角色 本专栏的上一篇文章讲述了Maven与持续集成的一些关系及详细实践,我们都知道,自己主动化測试是持续集成不可缺少的一部分,基本上,没有自己主动化測试的持续集成,都非常难称之为真 ...

  8. Maven实现Web应用集成測试自己主动化 -- 部署自己主动化(WebTest Maven Plugin)

    上篇:Maven实现Web应用集成測试自己主动化 -- 測试自己主动化(WebTest Maven Plugin) 之前介绍了怎样在maven中使用webtest插件实现web的集成測试,这里有个遗留 ...

  9. mongodb3.0 性能測试报告 一

    mongodb3.0 性能測试报告 一 mongodb3.0 性能測试报告 二 mongodb3.0 性能測试报告 三 測试环境: 服务器:X86 pcserver   共6台 cpu:  单颗8核 ...

随机推荐

  1. PCB MS SQL 将字符串分割为表变量(表值函数)

    Create FUNCTION [dbo].[SplitTable]( @s varchar(max), --待分拆的字符串 ) --数据分隔符 ),), col varchar(max)) --建立 ...

  2. python中使用pip安装报错:Fatal error in launcher... 解决方法

    python安装了2和3版本在 cmd 中用pip报的错误为:Fatal error in launcher:Unable to create process using 这是因为你安装了python ...

  3. 工具分享3:VMware 10虚拟机、MS-DOS 7.1、安装教程(MS-DOS环境安装)

    VMware 10工具下载地址: 网页下载链接:http://www.xp510.com/xiazai/ossoft/desktools/22610.html MS-DOS .10镜像下载地址: 网页 ...

  4. xhtml1-strict.dtd

    <!-- Extensible HTML version 1.0 Strict DTD This is the same as HTML 4 Strict except for changes ...

  5. 初学jQuery之jQuery虚假购物车-------与真实数据无关

    初学者用jquery来写仿真的购物车,确实有点恶心,那我们今天就把这万恶的购物车剖析一下,来看看到底有什么难的. 购物车的效果图 那我们先从复选框开始吧,废话不多说,上代码!! 带有序号的,都是一些分 ...

  6. Prism.Interactivity 之 PopupWindowAction 用法简记

    PopupWindow通过InteractionRequestTrigger(EventTrigger的派生类)侦听目标对象(InteractionRequest<T>类型)的Raised ...

  7. dotnet core 发布配置(测试数据库和正式数据库自动切换)

    一.起源 在进行项目开发时,常常要求开发环境,测试环境及正式环境的分离,并且不同环境运行的参数都是不一样的,比如监听地址,数据库连接信息等.当然我们把配置信息保存到一个文件中,每次发布的时候,可以先修 ...

  8. 5.20 mybatis反向生成的映射文件xml(如果需要自己定义其他sql语句时如下)

    解决mybatis-generator 生成的mapper.xml覆盖自定义sql的问题 mybatis-generator是个好工具,一建即可生成基本增删改成功能的mapper.xml.但这些是不够 ...

  9. poj 1564 Sum It Up 搜索

    题意: 给出一个数T,再给出n个数.若n个数中有几个数(可以是一个)的和是T,就输出相加的式子.不过不能输出相同的式子. 分析: 运用的是回溯法.比较特殊的一点就是不能输出相同的式子.这个可以通过ma ...

  10. [Intermediate Algorithm] - Everything Be True

    题目 所有的东西都是真的! 完善编辑器中的every函数,如果集合(collection)中的所有对象都存在对应的属性(pre),并且属性(pre)对应的值为真.函数返回ture.反之,返回false ...