`

压力测试终于过了

阅读更多

心情很好,随手记录下


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








分享到:
评论

相关推荐

    软件系统压力测试报告文档

    "软件系统压力测试报告文档" 软件系统压力测试报告文档是软件开发和测试的重要组成部分,旨在评估软件系统的性能和可靠性。本报告文档将详细介绍压力测试的目的、测试环境、测试范围、测试工具和测试结果等方面的...

    压力测试用例模板 参考

    压力测试是一种重要的软件质量保证活动,它用于评估系统在高负载或大量并发用户下的性能、稳定性和可扩展性。一个有效的压力测试用例设计能够帮助我们发现系统在极限条件下的瓶颈和潜在问题。以下是一个详细的压力...

    压力测试代码压力测试代码

    压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试代码压力测试...

    宽带路由压力测试工具

    宽带路由压力测试工具就是为了解决这个问题而设计的,它们能够模拟实际环境中可能出现的大量并发连接和数据传输,以此评估和优化路由器的性能。 一、宽带路由压力测试的必要性 宽带路由压力测试的主要目的是验证...

    商业银行压力测试指引.pdf

    商业银行压力测试指引 商业银行压力测试指引是中国银行业监督管理委员会制定的指导文件,旨在提高商业银行风险管理能力和银监会监管技术和手段。该指引适用于中华人民共和国境内依法设立的商业银行,包括中资商业...

    C++单元测试、压力测试、快速测试工具

    在IT行业中,单元测试、压力测试和快速测试是软件开发过程中的重要环节,尤其是在使用C++这样的编程语言时。这些测试方法确保了代码的质量、稳定性和性能,为开发者提供了信心,保证了软件产品的可靠性。本篇文章将...

    GPU服务器上显卡压力测试工具及测试方法介绍.docx

    "GPU服务器上显卡压力测试工具及测试方法介绍" GPU 服务器上的显卡压力测试是保障其性能和稳定性的重要环节。本文将介绍一种常用的 GPU 服务器显卡压力测试工具 NVIDIA-smi 及测试方法。 一、GPU 服务器显卡压力...

    猎人压力测试工具,服务器压力测试

    《猎人压力测试工具:深度解析与应用指南》 在信息技术领域,服务器性能的稳定性与高效性至关重要。为了确保服务的稳定运行,开发者和运维人员常常需要对服务器进行压力测试,以便找出潜在的问题并优化系统性能。...

    Loadrunner Webservice压力测试

    【Loadrunner Webservice压力测试】 LoadRunner是一款强大的性能测试工具,尤其在Web服务(Webservice)的压力测试方面表现卓越。本文将详细介绍如何使用LoadRunner进行Webservice的压力测试,结合具体的步骤示例,...

    路由器压力测试工具.zip

    1. 在进行压力测试时,要确保路由器的散热良好,避免过热影响性能。 2. 测试过程中应实时监控路由器的系统资源,避免过度压力导致设备损坏。 3. 结果分析时需结合实际情况,如硬件限制、网络环境等因素,合理解读...

    反伊网站压力测试

    标题“反伊网站压力测试”可能指的是针对特定目标网站进行的压力测试,可能是为了找出系统瓶颈、确定其承受攻击的能力或者优化网站性能。 压力测试通常包括以下几个步骤: 1. **测试规划**:在开始测试前,需要...

    压力测试工具ab

    **压力测试工具ab详解** 压力测试是评估系统在高负载或大量并发请求下性能的重要手段。在IT行业中,尤其在服务器优化和应用性能管理中,压力测试工具扮演着至关重要的角色。"ab"(ApacheBench)就是这样一个简单而...

    十个免费的Web压力测试工具

    在IT领域,Web压力测试是确保网站或Web应用在高流量和高负载下仍能保持稳定性和性能的关键步骤。本文将深入探讨十个免费的Web压力测试工具,它们各自的特点、优势与局限性,帮助读者更好地理解和选择适合自身需求的...

    HP-Socket压力测试 易源代码

    本话题将聚焦于HP-Socket的压力测试及其易源代码,这对于我们理解和优化网络服务性能至关重要。 一、HP-Socket简介 HP-Socket是一个C++编写的网络通信库,它提供了丰富的API接口,支持TCP、UDP等多种网络协议。该...

    Python中的压力测试实战指南

    在软件开发过程中,压力测试(也称为负载测试)是一种评估软件应用在高负载条件下性能和稳定性的方法。Python,作为一种灵活的编程语言,提供了多种工具和库来执行压力测试。本文将详细介绍如何在Python中进行压力...

    Chariot交换机压力测试工具(含教程

    Chariot是一款强大的网络性能分析和压力测试工具,尤其在评估和优化交换机性能方面具有显著优势。它通过模拟多种网络负载,帮助IT专业人员理解网络在高压力环境下的表现,确保交换机和其他网络设备在繁忙的工作场景...

    C#压力测试程序,测试完毕后能够自动生成测试报表

    在IT行业中,压力测试是一种非常重要的质量保证环节,主要用于评估软件系统在高负载或大量并发用户情况下的性能表现。C#作为.NET框架的主要编程语言,提供了丰富的库和工具来进行压力测试。下面我们将深入探讨这套...

Global site tag (gtag.js) - Google Analytics