这篇博文主要是涉及到服务端性能,对于前端性能比较少涉及,但是最后一部分简单介绍了前端(Web页面)的测试和调优。这篇文章最早写于2012年,今天翻出来,又重新梳理了一下。哦,对了,如果对本博客中所有文章有疑问,请发邮件到lihaibo2006$gmail.com,我一般晚上就能看到。
一、性能测试的类型
实际上性能是一个很很宽泛的词,系统出了问题大多归结为性能有问题,比如访问速度慢,占用资源过多,时不时宕机等等,但是这属于不同性能问题的范畴,而且测试方法也不尽相同。做性能测试的QA是很稀少的,所以性能测试一般都由工程师来承担。
1、性能测试(可用性测试)
主要是测试正常业务量下,成功率、每秒检索量、平均处理时间、服务器资源利用率。主要考察,该系统是否符合业务需求,能否达到上线要求。
2、压力测试
主要是测试峰值情况下,测试不同并发数下,单机/单套系统的极限并发。和上一个测试不同,这里主要考察万一访问量特别大的情况下,系统是否能够抗住压力,如果超出这个极限,就需要增加硬件设施了。
3、容量测试
主要是测试数据量非常大的情况下,内存、磁盘、访问性能。一般系统刚上线,数据量较小,性能一般没有什么问题,把数据放大到百万、千万量级,再测测系统,可能之前未能暴露的问题就出来了。
4、疲劳测试
连续24小时以上测试,看有没有内存碎片和内存泄露,内存泄露比较好解决,内存碎片这个问题比较棘手。听说Microsoft SqlServer刚发版的时候,一周宕一次,没有办法,只能定期去重启Server。
5、配置测试
不同参数下的性能,后台程序会有很多开关,需要测试主要的开关情况下对性能的影响,或者不同的参数数量对于性能的影响。比较简单的例子就是,索引长度设置为128和1024对于系统的性能究竟有多大的影响。
二、测试前的准备
1、两台干净的同局域网的机器,跨机房的两台机器,你就需要考虑到,机房之间的延迟了。
2、优化的编译选项的程序,最好是优化过的,上线要求的编译设置。
3、服务端、测试程序分开部署
4、检查线程数以及其他参数
5、检查功能是否正确,功能不正常,别做性能测试。
6、关闭Debug日志,debug日志打开,性能瓶颈全在log上了。
7、测试客户端放在另一台机器上
8、准备测试数据,尽量构造和生产环境相同的数据。
9、因等待时间较长,请准备一杯茶 or 咖啡 or 书
三、性能测试工具和指标
性能测试的工具有很多,如果是HTTP协议,那么ApacheBench、Siege、WebBench、LoadRunner(商用)我简单介绍一下ApacheBench(AB)
- 参数
- -n 同时并发数,10-20-50-100
- -c 总请求数量,一般够压10分钟左右,10万-100 即可
- 报告
- 错误:Complete requests/Failedrequests/Write errors