Apache的压力测试以及web性能优化的常用知识总结
什么是带宽?
误解:“数据在线路中的移动速度”、“数据的传输速度”
我们所说的带宽是指数据的发送速度,比如百兆网卡,指网卡的最大发送速度是100Mbps,也就是说网卡在一秒钟最多可以发送100Mb的数据;相关的因素:
数据发送装置将二进制信号传送到线路的能力,也称信号传输频率,以及另一端数据接收装置对二进制信号接收的能力,也包括线路对传输频率的支持程度;
数据传输介质的并行度,等价于计算机系统总线宽度的概念;
习惯与约定
b:比特单位bit;
B:字节单位Byte;
1KB=1024B;
1kb=1000b;
M与K的换算同上;
什么是吞吐率?
吞吐率(Throughput),是指web服务器单位时间内处理的请求数,单位:reqs/s;
一般更关心的是服务器并发处理能力的上限,即最大吞吐率;
关于压力测试
基于吞吐率压力测试的几个前提:
并发用户数;(某一时刻同时向服务器发送请求的用户数量)
总请求数;
请求资源描述;
几个重要指标:
请求等待时间
用户平均请求等待时间(主要衡量服务器在一定并发用户数的情况下,对单个用户的服务质量)
服务器平均请求方护理时间(衡量服务器整体服务质量)
压力测试工具:Apache附带的ab、LoadRunner、Jmeter
服务器系统负载
$cat/proc/loadavg
0.581.190.641/928306
这里0.581.190.64这3个数字表示:系统最近1分钟、5分钟、15分钟分别计算出来的系统负载;
1表示当前运行队列中的进程个数;92表示此时的进程总数;8306表示到此时为止最后创建的一个进程ID;
Apache ab的使用介绍
在《构建高性能web站点》中多处讲到了用apache自带的压力测试工具ab进行Server的性能测试,搜索了一下相关知识,整理如下:
ab的全称是ApacheBench,是Apache附带的一个小工具,专门用于HTTPServer的benchmarktesting,可以同时模拟多个并发请求。下面以一个实际例子来介绍ab的使用:
[xiekeli@localhost~]$ab-n1000-c50http://www.abc.com/a.php //产生1000次http请求,每次的并发用户数:50
ThisisApacheBench,Version2.0.40-dev<;$Revision:1.146$>apache-2.0 Copyright1996AdamTwiss,ZeusTechnologyLtd,http://www.zeustech.net/ Copyright2006TheApacheSoftwareFoundation,http://www.apache.org/ Benchmarkingwww.abc.com(bepatient) Completed100requests Completed200requests Completed300requests Completed400requests Completed500requests Completed600requests Completed700requests Completed800requests Completed900requests Finished1000requests ServerSoftware:Apache//被测平台Apache ServerHostname:www.abc.com//服务器主机名 ServerPort:80 DocumentPath:/a.php DocumentLength:231bytes//文档大小 ConcurrencyLevel:50//并发数 Timetakenfortests:12.818547seconds Completerequests:1000//完成请求数 Failedrequests:0//失败的请求数 Writeerrors:0 Non-2xxresponses:1001 Totaltransferred:438438bytes//整个场景中的网络传输量 HTMLtransferred:231231bytes//整个场景中的HTML内容传输量 Requestspersecond:78.01[#/sec](mean)//吞吐率,即每秒处理的请求数(后面括号中的mean表示这是一个平均值) Timeperrequest:640.927[ms](mean)//每次请求的响应时间(后面括号中的mean表示这是一个平均值 Timeperrequest:12.819[ms](mean,acrossallconcurrentrequests)//每次请求的响应时间(后面括号中已经说明,是按所有并发数计算的平均值) Transferrate:33.39[Kbytes/sec]received//平均每秒网络上的流量,可以帮助排除是否存在网络流量过大导致响应时间延长的问题 ConnectionTimes(ms)//网络上消耗的时间的分解,各项数据的具体算法还不是很清楚 minmean[+/-sd]medianmax Connect:186307598.12129188 Processing:188271289.62141923 Waiting:188245219.92131416 Total:376579660.24279380 //整个场景中所有请求的响应情况。在场景中每个请求都有一个响应时间,其中50%的用户响应时间小于1093毫秒,60%的用户响应时间小于1247毫秒,最大的响应时间小于7785毫秒,由于对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Timeperrequest时间约等于第二个Timeperrequest时间乘以并发请求数 Percentageoftherequestsservedwithinacertaintime(ms) 50%427 66%430 75%431 80%433 90%451 95%1630 98%3382 99%3429 100%9380(longestrequest)
-n:表示的测试的次数,很多地方翻译成“发送请求的次数”,这样很容易产生歧义,应该叫:“http请求数”比价合适;这里表示1000次http请求;
-c:表示每次的请求数,-c50表示一次同时发起50个http请求,50次请求都收到响应了之后,再次发送50个http请求,直到发满1000次。
web优化的其他一些相关知识点:
缓存(cache)和缓冲(buffer)的区别:
缓存(cache):缓存的目的是把需要花费昂贵开销的计算结果保存起来,在以后需要的时候直接取出,避免重复的计算。
缓冲(buffer):目的在于改善各部件之间因为速度不同而引发的问题。起到将快速设备与慢速设备平滑衔接的作用。
页面缓存(PageCache)
页面缓存就是将动态计算的结果进行缓存,避免动态内容不必要的重复计算,主要是针对动态生成的html页面和动态图片或动态XML数据等;
缓存持久化和搜索
如果缓存文件非常多,cache目录下会拥挤大量的文件,如果缓存的文件的读写频度比较高,对CPU的影响是非常大的;
解决的方案:
1、使用支持目录hash加速目录遍历的文件系统来缓解这种情况,如:XFS和reiserfs;
2、缓存目录分级
过期检查
- 缓存过期时间
- 缓存有效期长度
把缓存放到内存中
如果将缓存数据放到磁盘文件中,每次缓存加载和过期检查都在磁盘I/O的开销,如果磁盘同时还运行着如数据库这样的I/O密集型应用,那么缓存文件的I/O操作便会存在一定的延迟。
作者在这里提到了两个PHP的缓存框架:APC和XCache。
缓存服务器
将HTML缓存在一台独立的缓存服务器中,利用memcached,可以很容易的通过TCP将缓存存储在其他的服务器中,memcached同样也是用内存空间保存缓存数据的,可以减少不必要的I/O。memcached对每一个key都维护一个过期时间,一旦过期,会自动删除这个key。
局部无缓存
局部无缓存允许在页面中指定一块包含动态数据的HTML代码段,每次这些动态数据都需要实时计算,然后和其余的缓存合成为最终的网页。
静态化内容
动态内容缓存中,每次用户的请求都要送到动态程序,动态程序根据缓存的有效期决定是否输出缓存。因此这种控制权的代价也是比较昂贵的。
将动态页面×××.php的缓存从cache目录拿出来,放到同一个目录中:×××.html,直接通过浏览器访问对应静态页面。
当然静态化页面也是需要动态程序来实现的,一般静态化页面的管理都是通过CMS(内容管理系统)来进行管理的。
静态化页面的更新策略:
1、在数据更新时,重新生成静态化内容;
2、定时重新生成静态化内容;
局部静态化
静态化页面可以通过SSI(服务器端包含)技术实现各个局部页面的独立更新。
SSI技术可以在任何一个主流web服务器中找到相应的模块,如Apache的mod_include和Lighttpd的mod_ssi。
名词解释:PV
PV(pageview)即页面浏览量,或点击量,通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标。
定义:一个访问者在24小时(0点到24点)内到底看了你网站几个页面。需要注意的是:同一个人浏览你网站同一个页面,不重复计算pv量。pv就是一个访问者打开了你网站的几个页面。
pv的计算:当一个访问者访问的时候,记录他所访问的页面和对应的IP,然后确定这个IP今天访问了这个页面没有。如果你的网站到了23点,单纯IP有60万条的话,每个访问者平均访问了3个页面,那么pv表的记录就要有180万条。