压力测试中存在的问题
(What) 什么是压力测试
软件压力测试是一种基本的质量保证行为,它是每个重要软件测试工作的一部分。软件压力测试的基本思路很简单: 不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。 通常要进行软件压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。
压力测试涵盖,性能测试,负载测试,并发测试等等,这些测试点常常交织耦合在一起。
压力测试存在那些问题
我归纳一下又几点:
- 操作系统默认安装,在未做任何优化的情况下实施压力测试
- 未考虑磁盘IO对软件的影响
- 未考虑网络带宽对软件的影响
- 网络软件测试,没有考虑到TCP特点
- 各种超时参数优化
- 测试客户端未优化
- 并发理解有误
- WEB服务器,数据库,等等服务器未优化
如果上面几项没有做优化,压力测试数据基本没有任何参考价值,任何一项没有优化,都会导致你的压力测试数据出现偏差。 下面我来逐条说明:
-
操作系统问题 操作系统是大众化软件,出厂优化都是面向大众,不可能为某个领域做单独优化。所以我们第一步需要优化操作系统。 Linux 系统优化内核参数,Windows 系统优化注册表等等。
-
磁盘IO 这是最容易出现瓶颈的地方,常常是CPU还没有达到极限,磁盘已经不堪重负。
-
网络IO 与磁盘IO相同
-
TCP连接 几乎所有 B/S, C/S 软件都是采用多线程,或者多进程技术。这种技术有个特点,开发者将程序设计为线程可自动伸缩模式,开启进程后会启动少量线程,当连接不断提高后,线程数逐渐增加,随着线程运行结束后,线程逐渐减少。 这样的设计会更有效地利用硬件资源,在程序空闲时将硬件资源让给其他进程。少有软件设计为开启服务独占资源。 这样测试软件做压力测试,不能一次并发很多请求,而是要采用逐渐增加的方式,否则第一次测试会有一部分并发不能及时响应,导致测试数据偏差。另外也你可以多做几次压力请求(让多线程工作起来),从第三次开始记录测试数据,忽略前面两次的测试数据。
提示:另一个问题是TCP连接复用,这也是一个重要配置项。如果这项没有配置,我想测试出的数据也会有偏差
-
超时参数 超时参数在压力测试中是非常重要的参数,例如从WEB到数据库连接超时是60秒,如果有一个SQL查询超过300秒,那么后面的请求会持续排队等待,当连接数达到数据库的最大连接时,接下来的所有请求都是失败的。 通常我们的WEB服务器超时不会超过30秒,有时我设置为10秒,一旦出现超时,宁可让该连接Timeout,不要让他影响整体服务。
-
客户端 很多网络软件需要从客户端发出压力测试请求,所以客户端的优化也是必须的,否则客户端压力出不去,服务端压力进不来。
-
并发 很多人认为并发,就是同一时间内的最大连接数,这是错误的。如果你写过多线程程序,就会发现多线程运行时有规律的。是顺序排队运行的,根本不是同时运行的。 所以并发是指,相对时间内能完成的连接总和,例如,每秒并发,每分钟并发等等,通常我们已秒为单位。 我们目前使用的操作系统叫分时操作系统,这种系统的特点就是可能实现多用户,多任务。操作系统将进程排队(优先级)轮询运行,只不过这个操作太快了,使你认为多个进程在同时运行。
-
服务器优化 主要B/S软件压力测试,WEB,缓存,数据库等等服务器,都需要逐一优化到最佳状态
(Why) 为什么做压力测试
如果在软件设计阶段都将这些问题元素都考虑进去,同时开发阶段严格执行。那么开发出些软件几乎不用做这个劳人伤神的压力测试。
所以在软件设计阶段就要考虑,灵活性,扩展性,可靠性与性能,还要考虑高可用与负载均衡。
同时软件优化伴随开发,持续集成,持续测试,持续部署。
(Where) 在哪里做压力测试
有些软件需要封闭的环境测试,不能在共享资源的环境中做测试。所以你有必要做Vlan隔离,甚至独立的路由器与交换机在封闭网络中测试。
(When) 什么时间做压力测试
任何时间都可能做压力测试,为什么我将“时间”重点提出呢?目前受地球自转影响,经常闰秒,你不的不考虑这个问题。
(Who) 压力测试过程参与人员
- 运维部门
- 开发部门
- 测试部门
(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可以复用,这时测试的结果比较有说服力。
相关推荐
总结,路由器压力测试工具是网络管理中不可或缺的工具,它们可以帮助我们更好地理解路由器的性能极限,提前发现潜在的问题,以确保网络服务的高效稳定。正确使用这些工具,结合实际网络环境,能够为网络优化提供有力...
Linpack 压力测试方法是计算机科学和工程学中常用的性能评估方法。Linpack 是一个高性能计算 bench-marking 工具,用于评估计算机系统的浮点运算能力。下面将详细介绍 Linpack 压力测试方法的步骤和原理。 Linpack ...
在软件开发过程中,系统压力测试是一项至关重要的环节,它主要用于评估应用程序或系统在高负载条件下的性能、稳定性和资源管理能力。这个“基于C#编程的系统压力测试工具”就是专为这种目的而设计的。C#是一种强大的...
7. **故障点识别**:通过压力测试,可以定位到路由器配置、硬件或固件中存在的问题,为优化和故障排除提供依据。 8. **性能优化**:根据测试结果,可以调整路由器的设置,如QoS(服务质量)策略,以提升整体网络...
"压力测试脚本"是实现这一目标的关键工具,通常由自动化测试工程师编写,用于模拟多种用户行为,观察系统的响应时间、资源消耗以及是否存在崩溃等异常情况。 压力测试脚本的创建涉及多个知识点,以下是一些关键点的...
宽带连接数测试工具、宽带压力测试工具以及宽带TCP测试工具都是评估网络连接性能的重要手段。这些工具可以帮助用户了解网络的承载能力,确保网络的稳定性和速度,以及优化网络配置。 首先,我们来详细讨论宽带连接...
软件压力测试报告.pdf 本报告主要介绍了学生选课系统软件的压力测试报告,目的是为了评估软件在高并发情况下的性能。报告中详细介绍了测试项目、测试环境、测试人与测试时间、测试案例的测试结果和测试总结等内容。...
【实验报告概述】 本次实验是关于“Web压力测试”,旨在理解和掌握Web应用压力...通过这样的实验,学生不仅掌握了压力测试的基本方法,还能在实践中提升解决实际问题的能力,为今后的Web应用开发与维护打下坚实基础。
3. **性能指标监控**:在进行压力测试时,软件能够记录并分析响应时间、成功率、失败原因等关键性能指标,有助于找出系统的瓶颈和问题。 4. **故障注入**:可以模拟网络延迟、丢包、错误响应等异常情况,测试系统在...
性能测试与负载测试、压力测试 性能测试是评价系统或组件...性能测试、负载测试和压力测试是软件测试领域中的三个重要概念,它们之间存在一定的区别和联系。了解这些概念对软件测试的重要性和实际应用具有重要的意义。
通过压力测试,我们可以了解邮件服务器在面对大量并发请求时的响应速度、资源消耗以及可能存在的瓶颈。 "邮件服务器压力测试"这一主题涉及到以下几个关键知识点: 1. **压力测试工具**:在描述中提到的软件可能是...
Web压力测试旨在模拟实际环境中可能出现的大量并发请求,以测试服务器、数据库、网络等组件的承受能力。它关注的主要指标包括:响应时间、吞吐量(每秒处理请求的数量)、并发用户的数量以及系统资源的消耗情况等。...
通过JMeter进行API接口的压力测试,可以帮助我们了解系统在高负载下的性能表现,提前发现可能存在的问题,从而优化系统设计,提升用户体验。对于开发和运维团队来说,这是一个必不可少的质量保证环节。在实践中,...
在内存压力测试中,我们的目标是观察系统在极端内存负荷下的行为,确保在正常或超负荷情况下,系统的运行状态依然可靠。`testlimit.exe`就是这样一个工具,它可以生成指定大小的内存消耗,从而对系统内存进行极限...
评价系统资源利用率是压力测试中的一个重要组成部分,它直接关系到测试结果的有效性和可靠性。 - **CPU利用率**:在高负载情况下,CPU是否能够达到预期的工作效率,是否存在瓶颈。 - **内存利用率**:内存的读取...
- **定义**:压力测试是一种超出常规工作负载的性能测试方法,用于确定系统何时会崩溃或表现不佳,并帮助识别导致这些问题的原因。 - **应用场景**:适用于需要了解系统在极端条件下的行为,以及寻找潜在瓶颈和故障...
在文件列表中的"Pressure"可能是指压力测试工具的源代码、配置文件或者测试报告。对于开发人员来说,深入理解这些内容,分析测试数据,结合服务器的架构和代码,可以找出优化点,提升Socket服务器的性能和稳定性。
在本文中,我们将深入探讨压力测试的相关知识点,包括其目的、方法、工具以及如何使用压力测试模板进行有效的测试。 首先,我们要理解压力测试的基本概念。压力测试主要是为了模拟真实环境中可能出现的极端情况,...