当前位置: 首页 > news >正文

性能测试经典案例解析——远程培训系统

各位好,我是 

@道普云

一站式云测试SaaS平台。一个在软件测试道路上不断折腾十余年的萌新。

欢迎关注我的专栏和我的主页

@道普云

文章内容具有一定门槛,建议先赞再收藏慢慢学习,有不懂的问题欢迎私聊我。

希望这篇文章对想提高软件测试水平的你有所帮助。


远程培训系统的项目背景主要有以下特点:总体用户量大,达到30万级别;业务并发量大,部分业务估算用户量达到10万并发级别;业务处理实时性要求高,要求响应时间非常短;再就是业务处理可靠性要求高,系统一旦出现问题,就会给30万数量级的用户带来很大的困难、无法使用平台,再去组织这30万的用户去进行远程培训的代价非常之大。

系统架构情况如下:

存在的问题主要有:

· 业务响应时间长。

· 业务处理失败率高。

· 用户提交数据丢失。

· 功能操作错误。

我们从时间分布、资源分布、异常信息三个方面去分析诊断。根据分析,总结出以下五大问题:前端程序问题、基础软件配置问题、软件架构问题、程序算法问题、部署运维问题。

前端程序问题现象及监控

前端页面响应时间过长。

通过HTTPWatch发现哪些请求处理时间过长,连接出现阻塞。

通过Web服务器资源监控发现带宽值达到极限,处理器资源利用率也较高。

通过其他服务器资源监控发现资源利用率较低。

前端程序问题分析诊断

主要是由于前端脚本文件、样式文件、图片文件等数量过多,造成首次访问连接数过多。

部分静态文件体积过大,未使用压缩算法造成数据传输量过大。

基础软件配置问题现象及监控

前端页面响应时间过长,部分写入业务处理操作失败率较高。

通过HTTPWatch发现哪些请求处理时间过长。

通过Web服务器、应用服务器资源监控发现处理器资源利用率也较高。

基础软件配置问题分析诊断

通过比对测试发现Web服务器缓存失效、Jetty线程池配置不合理。

软件架构问题现象及监控

系统登录操作响应时间过长。

通过在应用程序中加入相关时间监控日志,定位向Hazelcast内存数据库写入登录信息时间过长。

通过应用服务器、数据库服务器资源监控发现资源占用合理。

软件架构问题分析诊断

通过与开发人员讨论分析发现,采用同步架构写入数据库,导致写入请求量较大时写入速度明显减慢。

程序算法问题现象及监控(1)

作业提交操作响应时间过长。

通过在应用程序中加入相关时间监控日志,定位向内存数据库Hazelcast写入作业内容数据、向消息中间件写入作业属性数据信息时间过长。

通过应用服务器资源监控发现处理器资源占用较高。

程序算法问题分析诊断

通过与开发人员讨论分析发现,单线程负责完成内容数据、属性数据的处理,处理逻辑较多。

程序算法问题现象及监控(2)

课程学习功能错误,学习日志写入Hazelcast、Mongodb、MySQL等,各数据库学习日志统计数据不统一。

通过在应用程序中加入统计数据监控日志,发现程序算法设计存在问题,各数据库计算结果在高并发情况下容易出现误差。

通过各服务器资源监控发现资源使用在正常范围内。

程序算法问题分析诊断

通过与开发人员讨论分析发现,由于应用服务器多线程处理速度为秒级,应用服务器时间不统一,导致日志数据写入数据库时,数据会被多次计算。远程培训系统-部署运维问题现象及监控

个人门户首页操作响应时间过长。

通过在应用程序中加入相关时间监控日志,定位应用服务器处理时间过长。

通过应用服务器资源监控发现IO资源占用较高。

部署运维问题分析诊断

通过对占用IO资源的Java线程进行分析,发现Log4j日志相关线程进行了大量写入操作,发现其日志级别设置过高,写入数据量过大。

通过以上几个方面的诊断,就可以全面地排查出系统的性能问题了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 傅里叶变换家族
  • Oracle Enterprise Manager:Oracle数据库管理的高效工具
  • 三菱机器人手柄维修示教器维修手操器面板等
  • 【Kubernetes知识点问答题】监控与升级 / ETCD 备份与恢复
  • df.write.csv
  • RK3399 android7.1 话柄电话功能
  • Datawhale X 李宏毅苹果书 AI夏令营 Task3 深度学习详解 -2 机器学习框架攻略
  • 探索 Logrus 日志框架:Go 语言的强大日志工具
  • 【WPS Excel】复制表格时,提示“图片太大,超过部份将被截去“ 问题
  • 提高开发效率的实用工具库VueUse
  • OPenCV结构分析与形状描述符(4)计算一个旋转矩形的四个顶点的函数boxPoints()的使用
  • 实时图像编辑大革新!Adobe发布TurboEdit:可以通过文本来编辑图像,编辑时间<0.5秒!
  • 11.2.软件系统分析与设计-数据库分析与设计
  • C语言-数据结构 无向图普里姆Prim算法(邻接矩阵存储)
  • 可交互、会学习、自成长机器人——李德毅院士
  • [笔记] php常见简单功能及函数
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • CEF与代理
  • IDEA常用插件整理
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • mysql 5.6 原生Online DDL解析
  • mysql中InnoDB引擎中页的概念
  • webpack4 一点通
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 多线程事务回滚
  • 服务器从安装到部署全过程(二)
  • 如何利用MongoDB打造TOP榜小程序
  • 深度学习中的信息论知识详解
  • 数组的操作
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 原生Ajax
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 蚂蚁金服CTO程立:真正的技术革命才刚刚开始
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​【已解决】npm install​卡主不动的情况
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Python 3 新特性:类型注解
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (八)c52学习之旅-中断实验
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)mysql使用Navicat 导出和导入数据库
  • (转)创业的注意事项
  • (转载)PyTorch代码规范最佳实践和样式指南
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...