热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何找出系统能承受的最大在线用户数

背景原因我们在性能测试工作中,有时需要对业务系统所能支持的最大在线用户数目进行评估。和平时的性能测试有区别的是,用户在线时只是与服务器保持连接,并不一定对服务器有业务请求,从而对服务器不

背景原因

 

我们在性能测试工作中,有时需要对业务系统所能支持的最大在线用户数目进行评估。

和平时的性能测试有区别的是,用户在线时只是与服务器保持连接,并不一定对服务器有业务请求,从而对服务器不一定会产生压力。

但是因为在线用户数目并非可以无限增长,当在线用户数目达到应用服务器(或者WebLogic等中间件,或者数据库连接池等)的连接数设置的极限时,业务系统同样可能会发生异常,出现新用户无法登录,或者老用户被挤出系统,甚至业务系统宕机的情况。

因此,对业务系统的最大在线用户数指标进行测试是极其必要的。

 

现有一OA系统,需要测试其支持的最大在线用户数目。已知当使用浏览器登录该系统后,登录用户可持续地保持登录状态,即使长时间不做任何操作也不会自动退出系统;通过该OA系统的在线用户数统计模块可以详细地查看到当前在线的用户。

 

 

测试思路

测试被测系统所能支持的最大在线用户数,需要不断地使用新用户帐号进行登录操作,在此同时查看被测系统的在线用户数目以及系统的响应情况。

在新增登录用户时需要注意,由于考察的是系统在正常情况下所能支持的在线用户数目,而不是系统在并发压力下的性能响应情况,因此登录用户时最好采用单个用户或少量并发用户(如两个或三个)逐步登录的形式,不同登录批次之间最好能有一定时间间隔,务必使新增登录用户的操作对服务器产生尽可能小的业务压力。

在新增登录用户的过程中,需要对被测系统的在线用户数目进行查看,并着重关注以下几个方面:

  • 持续新增登录用户的同时,业务系统中的在线用户数目是否相应地进行增长
  • 持续新增登录用户的过程中,系统登录操作是否产生连接超时的情况,事务的响应时间是否出现大幅度上升的情况,系统登录事务是否出现失败的情况(这需要在脚本中对登录事务做检查点设置)
  • 持续新增登录用户的过程中,定期地在浏览器中手动刷新业务系统界面,查看业务系统是否出现不可访问的情况(如内部服务器错误、宕机等)

需要注意的是:使用测试工具测试时,并不能像浏览器一样定期地与服务器进行通讯交互。我们需要用脚本模拟浏览器的定期交互行为

测试结果分析

通过以上方法可以测试得到业务系统所能承受的“初略的”最大在线用户数目。为什么说是“初略的”呢?因为该方法仍存在缺陷,主要体现在如下两个方面:

  • 该方法只适用于测试期间无他人使用系统的情况。如果测试期间同时有其他用户登录系统,或者系统中本身已存在在线用户,则会造成测试得到的结果不准确。
  • 该方法忽略了系统稳定性对在线用户数的影响。举例来说,也许逐步增加在线用户数至500时,系统并没有发生异常,但这并不意味着500个用户长时间处于在线状态时系统不会出现异常。

针对以上两方面缺陷,可以做出如下改进:

  • 在逐步增加在线用户数的时候,定期(比如间隔3秒)查看业务系统自身统计的在线用户数目,并以该数据为测试结果。
  • 利用之前的方法测试得到业务系统“初略的”最大在线用户数后,使系统长时间保持该数量的在线用户数目,观察系统在长时间运行期间是否会出现异常;若出现异常后,适当减少在线用户数目后重复地进行测试,直到系统可以保持长时间地稳定运行为止,此时对应的在线用户数目即为业务系统所能承受的最大在线用户数目。

 


推荐阅读
  • 电商高并发解决方案详解
    本文以京东为例,详细探讨了电商中常见的高并发解决方案,包括多级缓存和Nginx限流技术,旨在帮助读者更好地理解和应用这些技术。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • 在尝试通过自定义端口部署Spring Cloud Eureka时遇到了连接失败的问题。本文详细描述了问题的现象,并提供了有效的解决方案,以帮助遇到类似情况的开发者。 ... [详细]
  • 在尝试使用 Android 发送 SOAP 请求时遇到错误,服务器返回 '无法处理请求' 的信息,并指出某个值不能为 null。本文探讨了可能的原因及解决方案。 ... [详细]
  • 协程作为一种并发设计模式,能有效简化Android平台上的异步代码处理。自Kotlin 1.3版本引入协程以来,这一特性基于其他语言的成熟理念,为开发者提供了新的工具,以增强应用的响应性和效率。 ... [详细]
  • 本文探讨了如何通过优化SOAP服务调用和多线程处理来减少生成的事件数量,并提高加载大量实体的效率。 ... [详细]
  • 本文详细介绍了Android系统的四层架构,包括应用程序层、应用框架层、库与Android运行时层以及Linux内核层,并提供了如何关闭Android系统的步骤。 ... [详细]
  • 本文详细介绍了进程、线程和协程的概念及其之间的区别与联系。进程是在内存中运行的独立实体,具有独立的地址空间和资源;线程是操作系统调度的基本单位,属于进程内部;协程则是用户态下的轻量级调度单元,性能更高。 ... [详细]
  • mysql 授权!!
    为什么80%的码农都做不了架构师?MySQL的权限系统围绕着两个概念:认证-确定用户是否允许连接数据库服务器授权-确定用户是否拥有足够的权限执 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 本文介绍了读写锁(RWMutex)的基本概念、实现原理及其在Go语言中的应用。读写锁允许多个读操作并发执行,但在写操作时确保互斥,从而提高并发性能。 ... [详细]
author-avatar
小池子的思密达
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有