压力测试中存在的问题

(What) 什么是压力测试

软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单: 不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。 通常要进行软件压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。

压力测试涵盖,性能测试,负载测试,并发测试等等,这些测试点常常交织耦合在一起。

压力测试存在那些问题

我归纳一下又几点:

  1. 操作系统默认安装,在未做任何优化的情况下实施压力测试
  2. 未考虑磁盘IO对软件的影响
  3. 未考虑网络带宽对软件的影响
  4. 网络软件测试,没有考虑到TCP特点
  5. 各种超时参数优化
  6. 测试客户端未优化
  7. 并发理解有误
  8. WEB服务器,数据库,等等服务器未优化

如果上面几项没有做优化,压力测试数据基本没有任何参考价值,任何一项没有优化,都会导致你的压力测试数据出现偏差。 下面我来逐条说明:

  1. 操作系统问题 操作系统是大众化软件,出厂优化都是面向大众,不可能为某个领域做单独优化。所以我们第一步需要优化操作系统。 Linux 系统优化内核参数,Windows 系统优化注册表等等。

  2. 磁盘IO 这是最容易出现瓶颈的地方,常常是CPU还没有达到极限,磁盘已经不堪重负。

  3. 网络IO 与磁盘IO相同

  4. TCP连接 几乎所有 B/S, C/S 软件都是采用多线程,或者多进程技术。这种技术有个特点,开发者将程序设计为线程可自动伸缩模式,开启进程后会启动少量线程,当连接不断提高后,线程数逐渐增加,随着线程运行结束后,线程逐渐减少。 这样的设计会更有效地利用硬件资源,在程序空闲时将硬件资源让给其他进程。少有软件设计为开启服务独占资源。 这样测试软件做压力测试,不能一次并发很多请求,而是要采用逐渐增加的方式,否则第一次测试会有一部们并发不能及时响应,导致测试数据偏差。另外也你可以多做几次压力请求(让多线程工作起来),从第三次开始记录测试数据,忽律前面两次的测试数据。

提示:另一个问题是TCP连接复用,这也是一个重要配置项。如果这项没有配置,我想测试出的数据也会有偏差

  1. 超时参数 超时参数在压力测试中是非常重要的参数,例如从WEB到数据库连接超时是60秒,如果有一个SQL查询超过300秒,那么后面的请求会持续排队等待,当连接数达到数据库的最大连接时,接下来的所有请求都是失败的。 通常我们的WEB服务器超时不会超过30秒,有时我设置为10秒,一旦出现超时,宁可让该连接Timeout,不要让他影响整体服务。

  2. 客户端 很多网络软件需要从客户端发出压力测试请求,所以客户端的优化也是必须的,否则客户端压力出不去,服务端压力进不来。

  3. 并发 很多人认为并发,就是同一时间内的最大连接数,这是错误的。如果你写过多线程程序,就会发现多线程运行时又规律的。是顺序排队运行的,根本不是同时运行的。 所以并发是指,相对时间内能完成的连接总和,例如,每秒并发,每分钟并发等等,通常我们已秒为单位。 我们目前使用的操作系统叫分时操作系统,这种系统的特点就是可能实现多用户,多任务。操作系统将进程排队(优先级)轮询运行,只不过这个操作太快了,使你认为多个进程在同时运行。

  4. 服务器优化 主要B/S软件压力测试,WEB,缓存,数据库等等服务器,都需要逐一优化到最佳状态

(Why) 为什么做压力测试

如果在软件设计阶段都将这些问题元素都考虑进去,同时开发阶段严格执行。那么开发出些软件几乎不用做这个劳人伤神的压力测试。

所以在软件设计阶段就要考虑,灵活性,扩展性,可靠性与性能,还要考虑高可用与负载均衡。

同时软件优化伴随开发,持续集成,持续测试,持续部署。

(Where) 在哪里做压力测试

有些软件需要封闭的环境测试,不能在共享资源的环境中做测试。所以你有必要做Vlan隔离,甚至独立的路由器与交换机在封闭网络中测试。

(When) 什么时间做压力测试

任何时间都可能做压力测试,为什么我将“时间”重点提出呢?目前受地球自转影响,经常闰秒,你不的不考虑这个问题。

(Who) 压力测试过程参与人员

  1. 运维部门
  2. 开发部门
  3. 测试部门

(How) 如何做压力测试

下面我们举一些例子,讲述压力测试方法,限于篇幅不可能面面俱到,我仅仅是给你提供思路。

测试前你需要一些监控工具,事实监控服务器的资源变化。

例如 Web 服务器压力测试,测试场景是 nginx :

    worker_processes  8;            处理器数worker_rlimit_nofile 65530;     允许最多打开文件数worker_connections  4096;       最大连接数数为keepalive_timeout  65;          开启复用连接gzip  on;                       压缩传输数据

怎么测试呢?你要活得最大化性能吗?还是相对性能?我们通常需要的是满足需求就好的相对性能,而不是最大化性能。为什么呢?因为要活得最大化性能是要做出很多配置牺牲的,例如关闭日志,禁止访问时间等等。

按照上面的配置你的测试用例应该是,每次并发4000 请求 8000~10000 次, 你不能并发8000 请求 4000 这样测试。很是很多人常常犯的错误,所以测试者需要连接系统的配置参数,不能盲目使用数字实验。

上面我说过线程的开启时随着请求,逐渐增加的,所以首次发起测试数据是不准确的,通过pstree命令可以看到线程数量。等第三次以后线程逐渐增加到4096个,并且之前开启的TCP可以复用,这时测试的结果比较有说服力。

延伸阅读《Netkiller Web 手札》《Netkiller Testing 手札》《Netkiller Linux 手札》

作者

陈景峰,昵称 Netkiller, 英文名 Neo 《Netkiller 系列 手札》电子书的作者,读者群:128659835,个人网站:http://netkiller.github.io/

转载请注明出处与作者声明

压力测试中存在的问题相关推荐

  1. 压力测试中 4 个常见面试题总结

    今天来说 4 个关于压力测试的面试题,如果你有更好的回答也可以给小编留言. 1.简述压力测试步骤 (1)测试环境准备:压测机资源(8核CPU.16G内存.机器数量4-7台).被测系统服务器资源.数据库 ...

  2. 压力测试中的指标概念

    压力测试中的指标 1 压力测试中的指标 1.1 TPS 1.2 QPS 1.3 平均处理时间(RT) 1.4 并发用户数(并发量) 1.5 换算关系 1.6 TPS和QPS的区别 2 压力测试方法 3 ...

  3. 性能测试连载 (7)-jmeter 压力测试中的难点解析

    概述 新人在用jmeter做压力测试的时候,会被一些性能术语搞懵,直接导致的后果就是对测试出来的结果数据根本不能理解,更谈不上分析.这篇文章着重给大家实例解释一下jmeter压力测试的一些专有名词 问 ...

  4. Jmeter 压力测试中关于 Http 的那些事儿

    作者 | chenyk 来源 | https://www.jianshu.com/p/c0c09b5ef26a Http请求模拟 1.新建线程组 操作:鼠标右键测试计划 -> 添加 -> ...

  5. Jmeter压力测试中的相关参数(QPS、TPS)

    QPS(Queries Per Second):每秒能够响应的查询次数,也即是最大吞吐能力(吞吐量). TPS(Transactions Per Second):每秒处理的事务数目.一个事务是指一个客 ...

  6. 软件测试中的压力测试是什么?

    压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性.压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力,并确保软件在危急情况下不会崩溃.它甚至可以测试超出正常工作 ...

  7. 性能测试,负载测试,压力测试以及容量测试的联系与区别--网搜及总结

    1.负载测试,英文是Load testing. 负载测试是性能测试的一种,测试一个应用在重负荷下的表现.例如测试一个 Web 站点在大量的负荷下,何时系统的响应会退化或失败,以发现设计上的错误或验证系 ...

  8. 压力测试对于BCH真的有意义吗?

    BCH一路走来坎坷不断.在BCH的发展的历程中,经常有攻击者想要对BCH发动攻击,想要将BCH置于死地.就连此次的网络升级都被有心人钻了空子.攻击者在BCH上发了一堆特殊交易,导致矿池挖新块时失败.不 ...

  9. 比特币Cash Hard Fork辩论在压力测试后重新召开

    在过去的几周里,比特币现金(BCH)社区内对于预定的11月15日硬叉进行了激烈的讨论.BCH开发团队,比特币ABC,Nchain和比特币无限之间就硬分叉即将达成的共识变化存在强烈分歧.本周快进,因为N ...

最新文章

  1. 瑞星杀毒软件所有监控已禁用!
  2. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义函数在三线表中添加p值
  3. script标签的defer属性
  4. 离个职居然还用上了叫号机,差点以为在医院...
  5. 802.11b标准简介
  6. linux把svs文件分割,freeebsd,pkg_add,svsup,make改服务器的设定
  7. unbantu安装 mysql --- 百度云
  8. 聆听python之父诠释python的精神和文化
  9. 一些可能有用的功能cocos2dx
  10. Android实现滑块拼图验证码功能
  11. 国内AGV机器人厂家数目统计及区域分布分析
  12. 经济学人 MAY 12TH–18TH 2018 page 32阅读————2020-02-25
  13. dpkg制作deb包详解
  14. 任正非:外界过分吹捧华为,导致员工惰怠,华为必须保持清醒
  15. 网络图片缩略图查看工具
  16. html5创建三次贝塞尔曲线,HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线
  17. something about mantis
  18. 18年春季第一题 PAT甲级 1144 The Missing Number (20分) 上限感很重要
  19. Anaconda python3.6版本安装
  20. android内存泄漏检测工具,Android内存泄漏的检测工具——LeakCanary

热门文章

  1. img格式图片怎么转JPG?图片格式转换方法分享
  2. 利用 CRD 实现一个 mini-k8s-proxy
  3. speedup scaleup sizeup
  4. 25岁,放弃4年所学专业,年薪20W+,我选择了转行。
  5. Clarifications
  6. css hover同级,CSS hover改变子标签/同级标签样式
  7. iperf网络带宽测试
  8. 揭露抖音详情发家史,对其中内容有何看法
  9. 操作系统1——引导扇区的理解
  10. java计算机毕业设计基于安卓Android的校园安保巡查系统APP