网站性能测试是性能优化的前提和基础,也是性能优化结果的检查和度量标准。
不同的人员会有不同的衡量标准:用户,开发人员,运维人员。
一、性能测试指标
1、响应时间
指应用执行一个操作所需要的时间,包括从发出请求开始到收到最后的响应数据的时间。响应时间是系统最重要的性能指标,直观的反映了系统的‘快慢’。
2、并发数
系统能够同时处理请求的数目,这个数字反映了系统的负载特性,对于网站而言,并发数就是网站并发用户数,指同时提交请求的用户数目。
网站系统用户数》网站在线用户数》网站并发用户数
在网站设计初期,产品经理和运营人员就需要规划不同发展阶段的网站系统用户数,并以此为基础,根据产品特性和运营手段,推算在线用户数和并发用户数。
这些指标将成为系统非功能设计的重要依据。
3、吞吐量
指单位时间内系统处理的请求数目,体现系统的整体处理能力。
- TPS:每秒事务数
- HPS:每秒HTTP请求数
- QPS:每秒查询数
响应时间,并发数,吞吐量,三者可以用高速公路来形容。响应时间是车速,并发量是正在行驶的汽车,吞吐量是今天通过收费站的汽车数目。
4、性能计数器
描述服务器或操作系统性能的一些指标,如系统负载,对象与线程数,内存,CPU,磁盘,网络IO等。
- 系统负载(System Load):当前CPU正在执行和等待CPU执行的线程数目之和,是反映系统忙闲程度的重要指标。
二、性能测试方法
1、性能测试
以系统设计初期规划的性能指标为预期目标,对系统不断施加压力,验证系统在资源可接受范围内,是否能达到性能预期。
2、负载测试
在性能测试的基础上,继续对系统增加并发请求,直到系统的某项或多项性能指标达到安全临界值,直到处理能力出现下降。
3、压力测试
在超过安全负载的情况下,对系统继续施加压力,直到系统崩溃或停止服务,以获得系统最大压力承受范围。
4、稳定性测试
被测试系统在一定的硬件,网络,软件环境下,给系统加载一定的业务压力,运行一段较长时间,以此检测系统是否稳定
三、性能测试报告
并发数,响应时间,TPS,错误率,Load,内存,备注(性能测试/负载测试/压力测试)
四、性能优化策略
1、浏览器访问优化(此方法现在用的比较少)
2、CDN加速
3、反向代理
3、应用服务器性能优化
- 分布式缓存
(1)、缓存的基本原理:对key进行hashcode得到int值,这个int值对hash表的长度取余数,余数结果就是缓存的索引值。
(2)、合理使用缓存
频繁修改的数据不放入缓存,放入缓存的数据读写比例应该在2:1以上;
没有热点的访问不放入缓存;
数据不一致与脏读:缓存都有有效期,失效的缓存将被移除出内存,最新数据直接从数据库中读取。因此应用要容忍一定时间的数据不一致。
缓存可用性:通过部署分布式缓存服务器解决缓存可用性问题。
缓存预热:在系统启动之初就读取热点数据到缓存。
缓存穿透:一些恶意的访问在缓存中会查无数据,就会直接与数据库交互。这些可以对这些没有查询结果的访问也缓存起来,避免频繁读取数据库。
- 异步
使用消息队列将调用异步化,可改善网站的扩展性,同时也具有很好的削峰作用。
- 集群
4、代码优化
- 多线程
启动线程数=【任务执行时间/(任务执行时间-IO等待时间)】*CPU内核数。
如果是计算型任务,启动线程数最多不超过CPU内核数。反之可以加大线程数,可以增加系统吞吐量。
注意:线程安全问题。
主要解决手段:将对象设计为无状态对象;使用局部变量;并发访问资源时使用锁。
- 资源复用:有两种主要模式:单例和对象池。
- 数据结构:恰当的数据结构会使软件性能得到极大的提高。例如:原始字符串--->MD5--->信息指纹--->Hash计算--->HashCode。
- 垃圾回收:如果web应用运行在JVM等具有垃圾回收功能的环境中,那么垃圾回收可能会对系统的性能产生巨大影响。全量回收对于系统性能会产生较大的影响。
因此要合理设置Young Generation和Old Generation。
5、存储优化:机械硬盘VS固态硬盘,B+树和LSM树,RAID和HDFS.
6、数据库优化