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

性能服务器图片介绍大图,服务端图片图片上传接口性能压测总结

服务端图片上传接口性能压测总结一。性能测试时需要关注点用户操作的相应时间服务器资源使用情况是否合理应用服务器和数据库资源使用是否合理系统能否实现扩展系统最多支持多少用户访问、系统最

服务端图片上传接口性能压测总结

一。性能测试时需要关注点

用户操作的相应时间

服务器资源使用情况是否合理

应用服务器和数据库资源使用是否合理

系统能否实现扩展

系统最多支持多少用户访问、系统最大业务处理量是多少

系统性能可能存在的瓶颈在哪里

更换那些设备可以提高性能

二。性能压测需求分析

一个系统的吞度量(承压能力)与request对CPU的消耗、外部接口、IO等等紧密关联。单个reqeust 对CPU消耗越高,外部系统接口、IO影响速度越慢,系统吞吐能力越低,反之越高。

系统吞吐量几个重要参数:QPS(TPS)、并发数、响应时间

QPS(TPS):每秒钟request/事务 数量

并发数: 系统同时处理的request/事务数

响应时间:  一般取平均响应时间

理解了上面三个要素的意义之后,就能推算出它们之间的关系:

QPS(TPS)= 并发数/平均响应时间    或者   并发数 = QPS*平均响应时间

一个系统吞吐量通常由QPS(TPS)、并发数两个因素决定,每套系统这两个值都有一个相对极限值,在应用场景访问压力下,只要某一项达到系统最高值,系统的吞吐量就上不去了,如果压力继续增大,系统的吞吐量反而会下降,原因是系统超负荷工作,上下文切换、内存等等其它消耗导致系统性能下降。

在原始需求描述中是这样:

文件上传:来自小强的Ngix接口

一天:1个接口 42万,共4台服务器6个接口,42*6=252万个文件

高峰期1分钟:538个文件,538*6=3228个文件

在性能测试方法论中,很典型的方法就是二八原则,量化业务需求。

二八原则:指80%的业务量在20%的时间里完成。

按二八原则来计算 (2520000X80%)/(20%X24X3600)=116.6 个请求/秒 ,这个数据是4台服务器的,再除以4 就是 116.6/4=29.1个请求/每秒

高峰期 峰值  538*6/60=53.8个请求/每秒

按计算出来的数据,被压测接口 目前的QPS是29.1个请求/每秒,在高峰时能 QPS 53.8个请求/每秒

三。 环境准备

1. 被测服务器:因为被测接口是线上真实使用的,不能直接拿线上的测试,要小强单独部署一台 同网络环境,同调优设置的服务器。

208.43.106.202

24 核 32G

2. 压测服务器:与被压测服务器是同一网络环境,安装有jdk1.8

208.43.106.198 物理机

8 核 8G

3. 网络带宽:100M

4. 压测工具:jmeter 2.2.1

5.jmeter所需第三方jar包:通过实现jmeter基类,实现对被压测接口的调用,把代码编译成jar包,放入jmeter安装目录下的lib/ext目录里

6. 压测脚本:本地 生成 jmx脚本

关于第4步到第6步的操作以后放在Jmeter性能测试脚本编写中详细描述

7.测试数据准备:本次实例中使用的是460K左右的图片文件

四。初步性能测试

首先,我们来解释两个概念:压力测试和负载测试

负载测试:通常描述一种特定类型的压力测试——增加用户数量以对应用程序进行压力测试。比如实际中我们说从比较小的负载开始,逐渐增加模拟用户的数量, 直到应用程序响应时间超时,就是说的负载测试。

压力测试:通过逐步增加系统 负载,确定在什么负载条件下系统处于失效状态,以此来获得系统能提供的最大服务级别。

操作步骤:

1. 连接测试服务器

ssh -p58022 -i .ssh/tanhongbo tanhongbo@208.43.106.198

2. 上传jmeter工具包和测试图片,jmeter脚本

rsync -rave 'ssh -p 58022' --progress  -r upload.jmx  tanhongbo@208.43.106.198:/home/tanhongbo

rsync -rave 'ssh -p 58022' --progress  -r IMG_0084.jpg  tanhongbo@208.43.106.198:/home/tanhongbo

rsync -rave 'ssh -p 58022' --progress  -r apache-jmeter-2.12.zip tanhongbo@208.43.106.198:/home/tanhongbo

3. 将jmeter工具包copy到ec2-user用户目录下(因为权限问题,操作需要在ec2-user目录下执行)

cp -fr apache-jmeter-2.12.zip /tmp/

sudo su - ec2-user

cp -fr /tmp/apache-jmeter-2.12.zip ./

4. 解压jmeter工具包

unzip -cv apache-jmeter-2.12.zip

5. 将 upload.jmx和IMG_0084.jpg文件都copy到apache-jmeter-2.12/bin下

6. 执行jmeter的性能测试脚本

cd  /apache-jmeter-2.12/bin   (这里因为执行性能测试是短时间的,所以没把jmeter的bin目录放入环境变量,而是直接跑到jmter的bin目录下执行)

./jmeter -n -t upload.jmx -l out.jtl >run.log

可以再开一个终端的tab  查看压测执行时的具体日志

tail -10f run.log

先解释一个概念:吞吐量:默认情况下表示每秒完成的请求数  计算方式为请求数/请求总处理时间

或者是  F=VU * R / T

其中F为吞吐量,VU表示虚拟用户个数,R表示每个虚拟用户发出的请求数,T表示性能测试所用的时间

在操作时,通过多线程并发的方式来模拟多个用户访问同一请求的情况,我们通过不断加压的方式,从最初的10个并发依次加压,等到100个并发允许10次时,吞吐一直在2.2/s左右徘徊,平均响应时间已经比92个并发时的平均响应时间增加很多,已经出现部分请求因为超时无法得到响应的情况,在·150个并发时已经出现19%的timeout,就是说在100个并发时已经是临界点。而这时的吞吐量只是2.2/s,和我们计算出来要求满足线上要求的29.1/s差距非常大。简单解释一下就是,每秒只能处理完2.2个请求,而线上每秒就要有29.1个请求进来,完全满足不了要求

61e57b5e253cfbf6278732196914ac2f.png

性能测试监控关键指标说明:

Ø  资源指标

CPU使用率:指用户进程与系统进程消耗的CPU时间百分比,长时间情况下,一般可接受上限不超过85%。

内存利用率:内存利用率=(1-空闲内存/总内存大小)*100%,一般至少有10%可用内存,内存使用率可接受上限为85%。

磁盘I/O: 磁盘主要用于存取数据,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据的时候对应的是写IO操作,取数据的时候对应的是是读IO操作,一般使用% Disk Time(磁盘用于读写操作所占用的时间百分比)度量磁盘读写性能。

网络带宽:一般使用计数器Bytes Total/sec来度量,Bytes Total/sec表示为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。

Ø  系统指标:

并发用户数:某一物理时刻同时向系统提交请求的用户数。

在线用户数:某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求。

平均响应时间:系统处理事务的响应时间的平均值。事务的响应时间是从客户端提交访问请求到客户端接收到服务器响应所消耗的时间。对于系统快速响应类页面,一般响应时间为3秒左右。

事务成功率:性能测试中,定义事务用于度量一个或者多个业务流程的性能指标,如用户登录、保存订单、提交订单操作均可定义为事务。单位时间内系统可以成功完成多少个定义的事务,在一定程度上反应了系统的处理能力,一般以事务成功率来度量

超时错误率:主要指事务由于超时或系统内部其它错误导致失败占总事务的比率

因为首次性能压测时没有获得被测服务器权限,因此没有获取被测服务器的资源指标来做判断。这里可以使用

dstat -cmlnd  命令来获取服务器上 cpu,内存,I/o,网络的数据

上述操作就是压力测试和负载测试混合的测试方式来进行初步性能测试。

五。开发技术方案优化

从上一步的测试结果得到的数据,当前的负载情况完全满足不了线上用户量的访问。因此 需要开发从代码方面进行优化

eb85a16b96f8d01fe18e056a43a6beb6.png

六。  再次压测

操作步骤:

1. 再次执行压测

./jmeter -n -t upload.jmx -l out.jtl >run.log

再次压测后并发测试时的吞吐量 为110/s,已经超过一天的高峰时qps 538*6/60=53.8

ddc1a5a4eb3c8dd690f386876be87282.png

2.监控服务器性能数据

执行命令 dstat -cmlnd

得到结果, 根据被压服务器 cpu ,内存, load ,I/O, 网络等数据展示,目前 CPU 和内存 还有很大的空间,但网络带宽已经快要占满,目前的瓶颈主要在网络上

1b1b7c4e232972fe86ce9e2bec3a2075.png

在测试结果已经满足预期目标的基础上进行了稳定性测试,得到了吞吐率为196.3/S的数据

稳定性测试:亦可称可靠性测试)通过给系统加载一定的业务压力,让系统持续运行一段时间,检测系统是否能够稳定运行。这里进行稳定性测试时一般运行1-3个小时,当时因为网络不稳定,只运行了半个小时。

七。 总结

首先,需要了解性能测试的基本需要,在分析需求后得到性能测试的基本目标数据和峰值数据。其次,准备的测试环境要与线上真实环境一样。最先进行负载测试和压力测试,测试结果满足需求目标的情况下才能往下走,否则就要进行被测服务代码层面的优化。满足需求目标后,再持续压测一段时间,观察被测服务器的各项性能数据是否已达到瓶颈.归纳来说,性能测试就是执行、监控—〉分析—〉调优不断进行的过程,即监控是为分析提供更多的参考数据,分析是为了进行调优,调优是解决当前系统存在的性能瓶颈,为用户提供更好、更快的客户体验



推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 深入解析CAS机制:全面替代传统锁的底层原理与应用
    本文深入探讨了CAS(Compare-and-Swap)机制,分析了其作为传统锁的替代方案在并发控制中的优势与原理。CAS通过原子操作确保数据的一致性,避免了传统锁带来的性能瓶颈和死锁问题。文章详细解析了CAS的工作机制,并结合实际应用场景,展示了其在高并发环境下的高效性和可靠性。 ... [详细]
  • 数字图书馆近期展出了一批精选的Linux经典著作,这些书籍虽然部分较为陈旧,但依然具有重要的参考价值。如需转载相关内容,请务必注明来源:小文论坛(http://www.xiaowenbbs.com)。 ... [详细]
  • 在深入掌握Spring框架的事务管理之前,了解其背后的数据库事务基础至关重要。Spring的事务管理功能虽然强大且灵活,但其核心依赖于数据库自身的事务处理机制。因此,熟悉数据库事务的基本概念和特性是必不可少的。这包括事务的ACID属性、隔离级别以及常见的事务管理策略等。通过这些基础知识的学习,可以更好地理解和应用Spring中的事务管理配置。 ... [详细]
  • Visual Studio Code (VSCode) 是一款功能强大的源代码编辑器,支持多种编程语言,具备丰富的扩展生态。本文将详细介绍如何在 macOS 上安装、配置并使用 VSCode。 ... [详细]
  • 从0到1搭建大数据平台
    从0到1搭建大数据平台 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 2021年Java开发实战:当前时间戳转换方法详解与实用网址推荐
    在当前的就业市场中,金九银十过后,金三银四也即将到来。本文将分享一些实用的面试技巧和题目,特别是针对正在寻找新工作机会的Java开发者。作者在准备字节跳动的面试过程中积累了丰富的经验,并成功获得了Offer。文中详细介绍了如何将当前时间戳进行转换的方法,并推荐了一些实用的在线资源,帮助读者更好地应对技术面试。 ... [详细]
  • 如何利用Java 5 Executor框架高效构建和管理线程池
    Java 5 引入了 Executor 框架,为开发人员提供了一种高效管理和构建线程池的方法。该框架通过将任务提交与任务执行分离,简化了多线程编程的复杂性。利用 Executor 框架,开发人员可以更灵活地控制线程的创建、分配和管理,从而提高服务器端应用的性能和响应能力。此外,该框架还提供了多种线程池实现,如固定线程池、缓存线程池和单线程池,以适应不同的应用场景和需求。 ... [详细]
  • 尽管我们尽最大努力,任何软件开发过程中都难免会出现缺陷。为了更有效地提升对支持部门的协助与支撑,本文探讨了多种策略和最佳实践,旨在通过改进沟通、增强培训和支持流程来减少这些缺陷的影响,并提高整体服务质量和客户满意度。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
author-avatar
手机用户2502926207
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有