心情很好,随手记录下
1.接受压测任务
真的没有想到sina的要求还是比较严格的,而且是必须通过他们的测试才行
2.理解压力测试需求
手头有一份压力测试的样例文件,对于“服务器每秒处理能力”的结果如何获得没有想法
3.寻找压力测试软件
一开始使用siege测试,但是对于当时的apache服务器,无法测试每秒200次并发的情况,就放弃了,不过后来发现,其实不必测试这么多次的并发,也是可以得到跟sina基本一致的数据。
放弃了siege后,开始使用webbench,不再有200次并发的限制,但是有个问题,返回的结果信息过于简单,只有成功次数和失败次数。
当时使用30000的并发,虽然错误次数增加了,但是没有宕机,而且正确次数也在95%以上,所以认为就算通过了。写了份报告提交给sina工程师E。
4、sina工程师E的反馈
E的报告彻底击倒我了,最复杂的初始化人物接口,在30的并发数下,每秒处理能力只有10次左右。我想,会不会是并发数太小的原因,E将并发提升到50,服务器每秒处理能力在15次左右徘徊,E说可以认为15就是该接口每秒处理次数了,远远低于标准了。E用的测试软件是LoadRunner。
5.LoadRunner
鉴于我当时认为Loadrunner和webbench测试结果相差太大,所以我也决定用loadrunner。下载了8.0的版本,有300M左右,安装好后,机子卡不说,居然把我管理员账号占用了,系统登录的时候,是Loadrunner的账号,还需要密码。我当时就崩溃了,不至于要重装系统吧。后来在网上找到了该默认账号的默认密码,但进入系统启动loadrunner后,对里面如何写测试脚本,没有找到门道。放弃了。后来,另外一名技术人员T也尝试使用Loadrunner,是11的版本,一共有4G,但是有2个模块安装不上,而且还是不知道如何使用,目前还是放弃。
顺道说下,loadrunner强大的分析能力,生成报表能力,根据场景写测试脚本,测试流程的功能的确不是其他开源简单的压力测试软件可以相比的。
6.寻找瓶颈
安装了php的扩展xhprof,可以分析每个页面的所有函数执行时间,很不错。
从中检查出一出重大拖累性能的地方:程序中有一处是解析文件,并且把文件的内容放入数组,耗费了很大的时间,将这部分数据放在NoSql中,效率提升了。
从这里得到了很大的鼓励,继续研究是否还有需要优化的地方。可惜的是,并没有找到更有价值的优化点。
7.webbench+xhprof分析
单个页面如何刷新,都能得到比较理想的速度,但是依然通过不了E的指标。
在这样的情况下,决定使用webbench来做并发,并用xhprof记录每次的执行效率。
测试后发现,生成的1000份报告中,前15%的处理速度是比较理想和接近的,但是中间部分会有一个突然很大的起伏,耗费的时间一下陡增了10倍左右,分析了报告,瓶颈主要卡在PDO_MYSQL,Nosql的处理上。似乎找到了点瓶颈的落点。
8.第一次解决方案
调整apache的最大连接数等参数,调整mysql的最大连接数,测试了一下,基本没有太大的变化。再次开会,压力测试迟迟没有进展,我的压力开始增大。
我跟T说,让总部负责运维的人来帮忙吧。
9.总部运维同事重新部署系统
总部的运维帮我们安装了nginx,php,mysql。由于总部并没有使用过Nosql(TT)的经验,所以php的Nosql(TT)扩展等相关由我们这里来负责。
部署完毕后测试,基本没有太多的变化,只好重新开始思考优化方案。
10.NoSql(TT)和 MYSQL 分流
使用了另外一台服务器,把NOSQL(TT)部署在该台服务器上,该台服务器ping当前服务器为10ms。
结果xhprof的报告更差了,平均比以前慢了10倍,分析代码,NOSQL(TT)的get,put,有数百次,每次都延时10ms,不慢才怪。
MYSQL部署在外部的结果没有太大起色。
11.确认测试数据
根据我一个朋友给的腾讯的压力测试需求,150并发,每个请求200ms以内,我也打算使用150的并发,然后再查看成功次数。
然后运行初始化接口,每秒最多完成20次的请求,跟sina数据基本一致。
12.新的查找瓶颈方案
空代码运行,发现每秒完成在1200次以上,但是执行了我们的代码,效率下降很快,所以认为代码优化的潜力很大。
决定从初始化接口开始,一行一行代码的测试。
13.第一个瓶颈点
增加一个非空的判断,使得每秒处理次数大幅提升,同时使用单例模式,减少开销。
提升了20%的效率。
14.第一个加速点
安装php加速器eaccelerator,速度提升了30%左右。
15.第二个加速点
配置Nosql(tt),使用的方法会在其他的帖子详细说明,提升了5%-10%的速度。其实tt不做任何的配置,他的默认配置下速度也是很快的。
16.第三个提升点
将TT中过大的数据切割成较小的数据,虽然多了get的次数,但是速度却很大的提升,30%-40%应该是有的。
至于多大的数据需要切割,我并没有更详细的测试,我这次切割的数据高达800k,高并发下速度会下降得很厉害,切割成小块不超过200k的数据后,速度提升非常明显。
17.第四个提升点
修改系统内核,增加系统允许的最大访问次数,最大程度发挥TT的效率,这里可以贴出E的参考方案,在50000次并发以上效果明显。
#!/bin/sh
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
sysctl -w net.ipv4.tcp_fin_timeout=10
sysctl -w net.core.wmem_max=8388608
sysctl -w net.core.rmem_max=8388608
18.第五个提升点
sina工程师E报告还说,会偶尔出现pdo_mysql连接不上的错误。
于是用程序做了一个分流,把user_id为奇数的数据库查询放到了另外一台服务器上,解决了这个问题。
19.终于通过了
感谢同事T,Sina工程师E
分享到:
相关推荐
压力测试方案模板压力测试方案模板压力测试方案模板压力测试方案模板压力测试方案模板压力测试方案模板压力测试方案模板压力测试方案模板压力测试方案模板v
压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试...
负载压力测试及故障负载压力测试及故障负载压力测试及故障负载压力测试及故障负载压力测试及故障负载压力测试及故障负载压力测试及故障负载压力测试及故障负载压力测试及故障负载压力测试及故障负载压力测试及故障...
压力测试小工具,网络接口测试,设置地址、连接数、请求次数。开始测试
监控压力测试包监控压力测试包监控压力测试包监控压力测试包监控压力测试包监控压力测试包监控压力测试包
monkey压力测试报告 1 1. 概述 3 1.1. 软件简介 3 1.2. 测试目的 3 1.3. 项目背景 3 1.4. 测试目标 3 1.5. 名词解释 3 2. 测试环境说明 6 2.1. 硬件配置 6 2.2. 软件配置 6 3. 测试策略 6 3.1. 人力资源 6 3.2. 测试...
服务器压力测试报告 系统压力测试报告 一、功能描述: 1.1、功能描述: 本次测试针对服务器硬件及应用服务进行压力测试。 本次测试主要关心的指标: 平均响应时间 总用时 服务器cpu使用率和系统负载 内存占用和磁盘...
软件系统压力测试报告文档
测试压力,仅供娱乐使用,请勿用作商业用途,
CC压力测试系统源码的特点 全开源 前后端分离 简单易用 支持多种测试模式 如何使用CC压力测试系统源码? 首先,您需要下载源码并安装到您的服务器上。安装完成后, 您可以使用系统中提供的测试工具进行测试。在测试...
猎人压力测试工具,简单的压力测试工具
宽带路由压力测试工具,可以模拟大量发包进行测试性能。
介绍十个免费的Web压力测试工具的优缺点
Loadrunner Webservice压力测试步骤示例,有截图
压力测试脚本
压力测试
性能测试定义 性能测试概念 负载测试 压力测试 性能测试工作原理及应用角度,模型。测试管理流程,测试人员安排,测试工作产品,性能测试的过程,周期,系统需求应用配置需求用户手册需求,测试计划,加案例说明。 ...
宽带连接数测试工具,宽带压力测试工具,宽带TCP测试工具
MMC耐久测试压力测试