外链论坛

 找回密码
 立即注册
搜索
查看: 41|回复: 2

你晓得大型网站的压力测试及优化办法怎么做吗?

[复制链接]

3007

主题

148

回帖

9911万

积分

论坛元老

Rank: 8Rank: 8

积分
99119253
发表于 2024-8-31 11:57:25 | 显示全部楼层 |阅读模式

摘要: 性能测试在大型网站系统的设计和研发中非常重要,一般会和容量预估等工作结合在一块,穿插在系统研发区别方法。性能测试能够帮忙咱们即时发掘系统的性能短板,评定系统的能力,在这个基本在上再进行针对性的性能优化。

木桶理论应用在系统优化中

木桶理论又叫作短板理论,其核心思想是一只木桶盛水多少,并不取决于最高的木板,而取决于最短的那块木板。

木桶原理应用在系统分析中,即系统的最后性能取决于系统中性能表现最差的组件,为了提高系统整体性能,对系统中表现最差的组件进行优化能够得到最好的效果。

在网站系统中,用户的拜访请求到达服务器,而后服务器返回数据并展示给用户,这个过程要经过非常多处理,每一个过程的低效都会影响系统整体表现出来的性能。

根据木桶理论,倘若一台服务器性能非常强大,持有充足的内存资源和CPU资源,然则磁盘I/O性能不足,那样系统的总体性能是取决于当前最慢的磁盘I/O速度,而不是当前最优越的CPU内存,此时,磁盘I/O便是系统的性能瓶颈。

典型的例如运用Redis进行存储的系统,因为Redis本身性能非常优秀,一般状况下存储并不会制约系统的性能,在海量请求的状况下,Redis的吞吐量会非常大,此时候制约系统的性能瓶颈就变成网络带宽。

压力测试怎样实施

性能测试在大型网站系统的设计和研发中非常重要,一般会和容量预估等工作结合在一块,穿插在系统研发区别方法

性能测试能够帮忙咱们即时发掘系统的性能短板,评定系统的能力,在这个基本在上再进行针对性的性能优化。

同期,压力测试还能够帮忙咱们验证系统的稳定性和靠谱性。

一个完整的性能测试方法一般包含以下几个方面: 

1.压力测试及生成性能报告

压力测试一个重点是怎样产生压力,一般能够经过自己编写脚本模拟请求,运用成熟的压测工具进行。

压力测试很重要的一点是如何使得模拟压测的数据尽可能真实,越接近真实用户越好。

2.按照性能报告定位系统瓶颈,进行针对性优化,测试和优化的工作能够平常研发并行

压力测试完成以后,咱们会拿到一个压测报告,这个报告一般会告诉咱们系统的QPS、TPS、响应时延等数据,

这些数据能够咱们对服务器的性能有个整体的认识发掘存在的问题,然则不可帮忙咱们定位问题。

这个时候咱们能够从系统的各个组件入手,关注系统的CPU、内存、IO、网络,对比这些环节对整体性能的影响,确定性能问题是系统哪一部分导致的,而后针对性的在系统中逐个优化。

3.估算容量承载能力,恰当规划系统资源

进行压力测试的一个重要目的是让现有的服务器资源发挥最大的价值,

经过前期的测试和分析,此时咱们对系统整体的性能有了一个认识,对服务器的承载能力有了预估,

这个时候咱们能够结合业务规模配置服务器数量,CDN资源等,让最少的资源产生最大的价值。

常用压力测试工具选型

压力测试很关键的一点是怎样产生压力,选取哪款测试工具很重要,大的互联网机构如百度/腾讯等,都有专门的测试研发团队,研发机构内部应用的测试工具,以便更好的适应机构的业务,做为SAAS服务的重要部分,几个云服务供给纷纷开放了压测及性能监控服务。

都数机构还是会选取自己完成测试工作,这儿关注一下常用的压力测试工具。

1.几款流行的压力测试工具 

(1)JMeter

Apache JMeter是Apache组织研发的基于Java的压力测试工具,用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试行业。 它能够用于测试静态和动态资源例如静态文件、Java小服务程序、CGI脚本、Java 对象、数据库, FTP服务器, 等等。

JMeter 能够用于对服务器、网络或对象模拟巨大的负载,来在区别压力类别下测试它们的强度和分析整体性能。

另一,JMeter能够对应用程序做功能回归测试,经过创建带有断言的脚本来验证你的程序是不是返回了期望的结果。

为了最大限度的灵活性,JMeter准许运用正则表达式创建断言。

(2)LoadRunner

LoadRunner是惠普旗下一款自动负载测试工具,它能预测系统行径,优化性能。LoadRunner强调的是全部企业的系统,它经过模拟实质用户的操作行径和实行实时性能监测,来帮忙更快的确认和查询问题。另外,LoadRunner 能支持最宽范的协议和技术,量身定做地供给处理方法

(3)其他测试工具

Siege是一款开源的压力测试工具,能够按照配置对一个WEB站点进行多用户的并发拜访

记录每一个用户所有请求过程的相应时间,并在必定数量的并发拜访下重复进行。

TCPCopy是一种请求复制(所有基于tcp的packets)工具,能够把在线请求导入到测试系统中去。

TCPCopy的特点是能够拷贝线上真实流量,模拟用户数据。

2.性能测试工具的横向对比

这儿对比主流的 JMeter和LoadRunner,通常来讲,除了自研测试工具的机构,互联网机构运用JMeter做为测试工具的较多。

JMeterLoadRunner研发语言纯Java研发运用C语言研发支持应用对Java为主的系统支持较好支持比较全面是不是收费开源免费商场软件学习成本应用简单,上手快,Java自定义测试计划功能繁杂,学习成本高协议支持支持平常的HTTP/FTP/SMP等支持较全面自定义测试支持运用Java编写Sample运用完善的组件进行定制化测试组件功能Thread Group, Samplers, Listeners, Pre & Post processors一套完整的测试组件,例如VU Generator, Controller, Analyzer, Load generator, Load calculator 和protocol advisor.

怎样监控系统资源,定位性能瓶颈

压力测试能够暴露系统性能问题,如高并发下拜访缓慢,服务宕机等,然则经过压测不可详细到哪里存在瓶颈,必须要在压测同期协同适当的资源监控,帮忙咱们定位问题。

1.配置恰当的资源监控方法

(1)运用nmon监控系统性能

nmon是Linux上广泛运用的监控与分析工具,相针对其它有些系统资源监控工具来讲,nmon所记录的信息是比较全面的,它能在系统运行过程中实时地捉捕系统资源的运用状况,并且能输出结果到文件中,而后经过nmon_analyzer工具产生数据文件与图形化结果。

nmon所记录的数据包括以下有些方面:

  ● cpu占用率

  ● 内存运用状况

  ● 磁盘I/O速度、传输和读写比率

  ● 文件系统的运用

  ● 网络I/O速度、传输和读写比率、错误统计率与传输包的体积

  ● 消耗资源最多的进程

  ● 计算机仔细信息和资源

  ● 页面空间和页面I/O速度

● 用户自定义的磁盘组

  ● 网络文件系统

(2)运用rpc.rstatd监控系统性能

rpc.rstatd一般协同LoadRunner一块运用重视与系统服务rpc.statd进行区分。

rstatd后台程序能够从系统核心中获取系统性能统计的关联信息,将结果返回给调用程序。

进行压力测试时,LoadRunner客户端经过给服务器上的 rstatd 后台程序发送请求,来收集应用或数据库服务器的性能数据。

(3)针对区别的服务恰当配置资源监控方法

以Java服务为例,在压测同期能够对JVM虚拟机进行性能监控,这方面常用的有Jvisualvm、jps、jstack等。

下面是Jvisualvm的应用界面,能够监控本地和远程的JVM实例运行状态。

针对测试报告进行针对性优化

在压力测试发掘问题以后,就要进行有针对性的优化。针对区别的系统,这个过程的策略并不是确定的,然则大概能够划分为以下几个过程: 

1.定位性能瓶颈,找出系统存在的问题 

区别系统的特点区别,在性能瓶颈上区别的表现,通常来讲,下面的几个方面一般存在比很强的优化空间:

(1)磁盘I/O及文件操作

因为磁盘I/O读写的速度要比内存慢非常多,程序在运行过程中,倘若需要等待磁盘I/O完成,那样低效的I/O操作会拖累全部系统。

(2)网络操作

对网络数据进行读写的状况与磁盘I/O类似。因为网络环境的不确定性,尤其是对互联网上数据的读写,网络操作的速度可能比本地磁盘I/O更慢。

(3)CPU

对计算资源需求较高的应用,因为长期、不间断地海量占用CPU资源,那样对CPU的争夺将引起性能问题。如科学计算、3D渲染等对CPU需要旺盛的应用。

(4)高并发下的上下文切换及锁竞争等

高并发程序倘若做好优化,存在海量的锁竞争,激烈得锁竞争将会显著增多线程上下文切换的开销,对性能导致极重的影响

(5)数据库

大部分应用程序都离不开数据库,而海量数据的读写操作可能是相当费时的。而应用程序可能需要等待数据库操作完成返回请求的结果集,那样缓慢的同步操作将作为系统瓶颈。

2.确定调节目的,提出处理方法

找到系统的性能问题以后,需要作出对应的处理方法

典型的影响性能的问题,例如

(1)系统对高并发的场景响应不足,如数据库连接池过低,服务器连接数超过上限,数据库锁掌控思虑不足等

(2)内存泄密,如在长期运行下,内存正常释放,出现宕机等

(3)数据库优化不足,业务日益增长,相关表众多,SQL不足优化等

定位到以上问题,接下来便是提出恰当调节目的

例如服务器资源有限,能够经过配置更加多设备,服务上云等进行优化;

倘若对高并发支持欠好,就能够在代码层面优化,加强并发支持;

数据库性能问题,如慢查找等问题,就能够进行 SQL语句优化等。

3.实施处理方法,进行迭代研发

上一步的分析给出了一个初步的性能优化方法,接下来便是针对方法说到的内容进行针对性的改进。

这个过程能够应用敏捷的思想进行迭代,在研发完成后,为了对比优化结果,能够对调优后的系统进行小范围测试。

4.进行基准测试并分析调优结果

据述明一切,性能优化的结果不可简单的经过 “感觉系统变快了”来衡量,最好是经过对比优化前后的测试结果,用图表的方式直观的把优化结果展示出来。基准测试指的是经过设计科学的测试工具和方式办法,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。对比测试结果,结合容量评定等工作,能够让系统发挥最大的效用。

一个周期的优化工作完成以后,最好是总结反思一下,例如这次优化是不是达到了目的?系统的整体性能是不是得到了改善?用户体验是不是得到了提高?以及怎样在接下来的研发工作中做的更好。

运用JMeter进行压力测试实践

JMeter是日前流行的测试工具,这儿简单的介绍一下关联的应用。

1.JMeter安装与运用

Linux下可直接下载安装,MAC系统进入http://jmeter.apache.org/download_jmeter.cgi下载apache-jmeter-3.1.tgz。

下载完毕后解压,得到安装包,进入到进入解压目录/bin/,单击jmeter图案,就可起步JMeter。

2.基本组件简介

应用JMeter需要熟练有些基本的概念,这是编辑测试计划的界面:

(1)Threads 线程组

这个组件重点用来掌控Jmeter并发时产生线程的数量,在它的下一级菜单下仅有一个组件(线程组),能够这么理解每一个线程便是一个虚拟的用户。所有的其他类型组件必须是(线程组)节点的子节点。

(2)ConfigElement 配置单元

和Sample组件一块工作,重点用来配置Sample怎样来发起请求拜访服务器,这个东西的重点特点是能够有些Sample的一起配置放在一个元素里面方便管理,配置单元是有功效域的。功效域和树的那个关系同样越是上级节点的功效域越大,越是接近叶子节点的

功效域就越小,能够复写上级功效域的配置。

(3)Timer 按时

这个重点是用来调节(线程组),掌控线程每次运行测试规律例如说:发出请求)的时间间隔。当然这个下面还有非常多类型的按时器,她们重点功能便是调节时间间隔,但个个组件之间的策略有很大区别

(4)Pre Processors 前置处理器 / Post Processors 后置处理器

类似一个HOOK,在测试执行之前和执行之后执行有些脚本的规律。该组件我还详细运用过,但大致功能便是这般,非重点组件。

(5)Assert 断言

指的是针对Sample完成为了请求发送之后,判断一下返回的结果是否满足期望。

(6)Listener 监听器

这个组件区别于平时在Web编程的那种监听器,他是伴同着Jemeter测试的运行而从中抓取运行时期的数据的一个组件,经常运用的是聚合报告组件,从里面能够统计到测试的TPS,响应时间等关键测试数据。

3.进行第1个测试

(1)设置线程组参数

首要在TestPlan下面添加一个ThreadGroup组件,设置线程组组件各项参数。

 

线程数:最大测试时运用的线程数。

Ramp-Up Period : Jmeter达到指定最大线程数的时间。

循环次数 : 倘若是Forever,线程组中的线程将不间断的连续测试系统,当然能够设置每一个线程测试的次数,当完成为了规定次数后,该线程将自动退出线程组。

(2)添加Sampler信息

保留线程组后,接着在线程组下面添加Sample组件,咱们添加一个HTTP Request组件,

设置属性如下图:

Sampler暗示客户端发送某种格式规范的请求到服务端,因此各样各样的Sampler,如FTP/JDBC等。

这儿我添加了一个针对百度百科首页的拜访请求,端口为80,运用http协议。

(3)添加聚合报告的监听器组件

添加一个Aggregate Report的listener的监听器组件。

Aggregate Report 是 JMeter 常用的一个 Listener,中文被翻译为“聚合报告”。

(4)起步运行

点击RUN运行测试就可而后能够看到这次测试的Aggregate Report。

4.Jmeter中的几个重要测试指标释义

能够看到,上面的聚合报告中有非常多维度的信息,简单介绍几个比较重要的指标。

Label每一个 JMeter 的 element(例如 HTTP Request)都有一个 Name 属性,这儿表示便是 Name 属性的值#Samples暗示你这次测试中一共发出了多少个请求,倘若模拟10个用户,每一个用户迭代10次,那样这儿表示100Average平均响应时间——默认状况下是单个 Request 的平均响应时间,当运用了 Transaction Controller 时,能够以Transaction 为单位表示平均响应时间Median中位数,便是 50% 用户的响应时间90% Line90% 用户的响应时间,其他的几个能够类推Min最小响应时间Max最大响应时间Error%这次测试中显现错误的请求的数量/请求的总数Throughput吞吐量——默认状况暗示每秒完成的请求数(Request per Second)Received / Sent KB/Sec每秒从服务器端接收到/发送的数据量

以下列出,微X博客,QQ群,论坛,等交流方式。

QQ群:领测老贺聊软件测试 22386432

微X公众号: 领测软件测试网

外链博客:领测软件测试

喜马拉雅订阅频道:http://www.ximalaya.com/2581641/album/6011135蜻蜓FM订阅频道:http://www.qingting.fm/#/vchannels/198184

苹果广播:搜索“领测老贺”

荔枝FM:FM1663127 领测老贺聊软件测试

       日前暂定每周不定时更新,您的关注,转发,打赏便是咱们保持的动力!

领测软件测试网一个有逼格的软件测试网站

长按,识别二维码,加关注

加入领测老贺聊测试QQ群可扫描下面的二维码

回复

使用道具 举报

3004

主题

2万

回帖

9606万

积分

论坛元老

Rank: 8Rank: 8

积分
96066008
发表于 2024-10-16 03:50:48 | 显示全部楼层
你的见解真是独到,让我受益良多。
回复

使用道具 举报

3046

主题

2万

回帖

9909万

积分

论坛元老

Rank: 8Rank: 8

积分
99098928
发表于 2024-10-30 15:40:54 | 显示全部楼层
“板凳”(第三个回帖的人)‌
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-11-9 00:47 , Processed in 0.075763 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.