常见的性能效率失效模式及原因

71 阅读4分钟

在动态测试过程中可以发现许多不同的性能效率失效模式,以下是一些常见故障(包括系统崩溃)的示例及其典型原因。

一、在所有负载水平下响应缓慢

在某些情况下,无论负载如何,系统响应速度都慢到不可被用户接受。这可能是由底层性能问题引起的,包括但不限于糟糕的数据库设计实施网络延迟和其他后台负载问题。这些问题可以在功能性和易用性测试中被发现,而不仅是在性能测试中,因此测试分析师应密切关注并报告它们。

二、中高负载下反应缓慢

在某些情况下,即使负载完全在正常预期和允许的范围内,系统响应速度仍会随着负载从中度到重度的变化而降低,这是不可令人接受的。原因可能是存在一个或多个资源饱和以及后台负载变化等潜在缺陷。

三、随着时间的推移,响应降低

在某些情况下,随着时间的推移,系统响应速度会逐渐或快速降低。根本原因包括内存泄漏磁盘碎片增加随时间增加的网络负载文件存储量增长以及意外的数据库存储量增长。

四、高负载或超高负载下出错处理不充分或粗暴

在某些情况下,系统的响应速度是可以令人接受的,但其出错处理的性能效率在高负载超出极限负载水平时会下降。导致这种情况的系统潜在缺陷包括资源池不足、队列和堆栈太小以及超时设置太快。上述常见潜在缺陷的具体示例如下。

提供公司服务信息的Web应用程序在7秒内未响应用户请求(其中7秒为一般行业经验),即系统在特定的负载条件下无法达到要求的性能效率。

突然出现大量用户请求时(例如重大体育赛事的门票销售)系统崩溃或无法响应用户输入,这是因为系统处理用户请求的容量不足。

当用户提交对大量数据的请求时(例如在网站上发布一份大型而重要的报告以供下载),系统响应会显著降低,这是因为系统处理数据的容量不足。

系统在在线处理之前无法完成应该完成的批处理,或对批处理的执行无法在允许时间段内完成。

当并行进程对动态内存产生巨大需求而内存无法及时释放时,实时系统会耗尽内存,这可能是因为系统的内存容量不够,或者内存请求的处理优先级设置不当。

如果向实时系统组件B提供输入的实时系统组件A无法按要求的速率计算更新,则可能使整个系统无法及时响应而出现故障。面对这种情况,必须评估和修改组件A中的代码模块,即进行性能分析,以确保能够达到要求的更新率。

性能效率失效是指软件系统在处理请求时表现出的响应时间过长资源使用率过高或者吞吐量不足等问题。

五、高延迟

网络问题: 网络带宽不足或网络拥塞。

数据库查询慢: 索引缺失、查询设计不佳、数据量过大等。

服务调用慢: 外部服务响应慢或不可用。

计算密集型操作: CPU资源受限,无法快速完成计算任务。

六、低吞吐量

并发处理能力有限: 服务器线程池配置不当,导致并发处理能力受限。

I/O瓶颈: 磁盘读写速度慢,影响整体吞吐量。

内存泄漏: 长时间运行后,内存占用不断增加,导致垃圾回收频繁,影响吞吐量。

锁竞争:过多的同步操作或不合理的锁机制导致线程等待时间增加。

七、资源耗尽

内存泄露: 程序未能正确释放不再使用的内存,导致可用内存逐渐减少。

连接池满: 数据库或其他资源的连接池大小设置不合理,导致新请求无法获取到必要的资源。

文件描述符限制: 操作系统对每个进程打开的文件数有上限,超过这个限制会导致新的文件无法打开。

磁盘空间不足: 日志记录、临时文件积累等可能导致磁盘空间耗尽。

八、负载下的稳定性差

错误处理不当: 异常情况下没有适当的错误处理机制,导致系统崩溃或服务中断。

缺乏容错性: 单点故障没有冗余措施,一旦某个组件失败,整个系统可能受到影响。

配置不当: 例如JVM参数设置不合理,导致GC暂停时间过长,影响系统稳定性。