引言

为什么我会写这一篇博客,由于近期非常多京东云擎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. 命令行启动ubuntu

    图形模式下,首先进入终端: 1. 运行 sudo vi/etc/default/grub 2. 找到 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” 3.改为 GR ...

  2. java中强制类型转换时,高位数截取成低位数的方法

    /** * 强制类型转换中的补码.反码.原码一搞清楚 */ int b=233;//正整数强转 System.out.println((byte)b); //负数:原码的绝对值取反再加一 符号为不变 ...

  3. Apache安装简述

    软件下载地址:http://pan.baidu.com/s/1o8oexKI 1.httpd -k install 2.httpd -k restart 3.启动bin文件夹里的httpd.exe 4 ...

  4. 终极解决VS2015 安装失败问题,如 安装包损坏或丢失

    1.去微软官网下载完成ISO镜像,最好不要在线安装, 打开官方链接 https://www.visualstudio.com/zh-cn/downloads/download-visual-studi ...

  5. PCL: 根据几何规则的曲面剖分-贪婪法表面重建三角网格

    点云场景中进行物体识别,使用全局特征的方法严重依赖于点云分割,难以适应杂乱场景.使用局部特征,即对点云进行提取类似于3D SURF.ROPS之类的局部特征,需要寻找离散点云块的局部显著性. 点云的基本 ...

  6. **ML : ML中的最优化方法

    前言:         在机器学习方法中,若模型理解为决策模型,有些模型可以使用解析方法.不过更一般的对模型的求解使用优化的方法,更多的数据可以得到更多的精度.         AI中基于归纳的方法延 ...

  7. SLAM: Ubuntu14.04_Kylin安装ROS-Indigo

    参考连接:ROS-Indigo版在Ubuntu上的安装第一步: 软件源配置 1. 增加下载源(增加ubuntu版的ros数据仓库,即下载源)(通用指令适合任何版本的ros) sudo sh -c 'e ...

  8. windows 实时性

    在硬件编程时,大部分非智能硬件并没有主动通知反馈功能,需要PC主动轮询状态寄存器去查询硬件状态.对于运动类控制器,查询的时机(间隔)在一定程度上影响着准确率与系统负载.即使不考虑系统负载,在1000H ...

  9. servlet向浏览器输出信息

    package com.aaa.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebS ...

  10. Java-Class-Test:Test-1

    ylbtech-Java-Class-Test:Test-1 1.返回顶部 1.1. package com.ylbtech.api; import com.y;btech.WxApiApplicat ...