性能测试知多少---性能分析与调优的原理

  最近一直纠结性能分析与调优如何下手,先从硬件开始,还是先从代码或数据库。从操作系统(CPU调度,内存管理,进程调度,磁盘I/O)、网络、协议(HTTP, TCP/IP ),还是从应用程序代码,数据库调优,中间件配置等方面入手。

  单一个中间件又分web中间件(apache 、IIS),应用中间件(tomcat 、weblogic 、webSphere )等,虽然都是中间件,每一样拎出来往深了学都不是一朝一夕之功。但调优对于每一项的要求又不仅仅是“知道”或“会使用”这么简单。起码要达到“如何更好的使用”。

  常看到性能测试书中说,性能测试不单单是性能测试工程师一个人的事儿。需要DBA 、开发人员、运维人员的配合完成。但是在不少情况下性能测试是由性能测试人员独立完成的,退一步就算由其它人员的协助,了解系统架构的的各个模块对于自身的提高也有很大帮助,同进也更能得到别人的尊重。

  再说性能调优之前,我们有必要再提一下进行测试的目的,或者我们进行性能测试的初衷是什么?

能力验证:验证某系统在一定条件具有什么样的能力。

能力规划:如何使系统达到我们要求的性能能力。

应用程序诊断:比如内存泄漏,通过功能测试很难发现,但通过性能测试却很容易发现。

性能调优:满足用户需求,进一步进行系统分析找出瓶颈,优化瓶颈,提高系统整体性能。

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386  

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1、接口自动化之为什么要做接口自动化、2、接口自动化之request全局观、3、接口自动化之接口实战等,UP主更多精彩视频,请关注UP账号。icon-default.png?t=N7T8https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337 

一般系统的瓶颈                                                                                          

性能测试调优需要先发现瓶颈,那么系统一般会存在哪些瓶颈:

硬件上的性能瓶颈

一般指的是CPU、内存、磁盘I/O 方面的问题,分为服务器硬件瓶颈、网络瓶颈(对局域网可以不考虑)、服务器操作系统瓶颈(参数配置)、中间件瓶颈(参数配置、数据库、web服务器等)、应用瓶颈(SQL 语句、数据库设计、业务逻辑、算法等)。

应用软件上的性能瓶颈

一般指的是应用服务器、web 服务器等应用软件,还包括数据库系统。

例如:中间件weblogic 平台上配置的JDBC连接池的参数设置不合理,造成的瓶颈。

应用程序上的性能瓶颈

一般指的是开发人员新开发出来的应用程序。

例如,程序架构规划不合理,程序本身设计有问题(串行处理、请求的处理线程不够),造成系统在大量用户方位时性能低下而造成的瓶颈。

操作系统上的性能瓶颈

一般指的是windows、UNIX、Linux等操作系统。

例如,在进行性能测试,出现物理内存不足时,虚拟内存设置也不合理,虚拟内存的交换效率就会大大降低,从而导致行为的响应时间大大增加,这时认为操作系统上出现性能瓶颈。

网络设备上的性能瓶颈

一般指的是防火墙、动态负载均衡器、交换机等设备。

例如,在动态负载均衡器上设置了动态分发负载的机制,当发现某个应用服务器上的硬件资源已经到达极限时,动态负载均衡器将后续的交易请求发送到其他负载较轻的应用服务器上。在测试时发现,动态负载均衡器没有起到相应的作用,这时可以认为网络瓶颈。

  性能测试出现的原因及其定位十分复杂,这里只是简单介绍常见的几种瓶颈类型和特征,而性能测试所需要做的就是根据各种情况因素综合考虑,然后协助开发人员\DBA\运维人员一起定位性能瓶颈。

一般性能调优步骤                                                                                      

一般性能问题调优的步骤:

步骤一:确定问题

应用程序代码:在通常情况下,很多程序的性能问题都是写出来的,因此对于发现瓶颈的模块,应该首先检查一下代码。

数据库配置:经常引起整个系统运行缓慢,一些诸如oracle 的大型数据库都是需要DBA进行正确的参数调整才能投产的。

操作系统配置:不合理就可能引起系统瓶颈。

硬件设置:硬盘速度、内存大小等都是容易引起瓶颈的原因,因此这些都是分析的重点。

网络:网络负载过重导致网络冲突和网络延迟。

步骤二:确定问题

  当确定了问题之后,我们要明确这个问题影响的是响应时间吞吐量,还是其他问题?是多数用户还是少数用户遇到了问题?如果是少数用户,这几个用户与其它用户的操作有什么不用?系统资源监控的结果是否正常?CPU的使用是否到达极限?I/O 情况如何?问题是否集中在某一类模块中? 是客户端还是服务器出现问题? 系统硬件配置是否够用?实际负载是否超过了系统的负载能力? 是否未对系统进行优化?

通过这些分析及一些与系统相关的问题,可以对系统瓶颈有更深入的了解,进而分析出真正的原因。

步骤三: 确定调整目标和解决方案

得高系统吞吐理,缩短响应时间,更好地支持并发。

步骤四:测试解决方案

对通过解决方案调优后的系统进行基准测试。(基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试)

步骤五:分析调优结果

系统调优是否达到或者超出了预定目标?系统是整体性能得到了改善,还是以系统某部分性能来解决其他问题。调优是否可以结束了。

  最后,如果达到了预期目标,调优工作就基本可以结束了。

下面算是一个技巧,如面试官问到一个性能问题假设,我不知道性能问题出在哪儿时,可以按照这个思路回答^_^

   • 查找瓶颈时按以下顺序,由易到难。
    服务器硬件瓶颈---〉网络瓶颈(对局域网,可以不考虑)---〉服务器操作系统瓶颈(参数配置)---〉中间件瓶颈(参数配置,数据库,web服务器等)---〉应用瓶颈(SQL语句、数据库设计、业务逻辑、算法等)
    注:以上过程并不是每个分析中都需要的,要根据测试目的和要求来确定分析的深度。对一些要求低的,我们分析到应用系统在将来大的负载压力(并发用户数、数据量)下,系统的硬件瓶颈在哪儿就够了。
    • 分段排除法 很有效

性能测试调优应该注意的要点:

  • 要点1: 在应用系统的设计开发过程中,应始终把性能放在考虑的范围内。
  • 要点2: 确定清晰明确的性能目标是关键。
  • 要点3: 必须保证调优后的程序运行正确。
  • 要点4: 系统的性能更大程度上取决于良好的设计,调优技巧只是一个辅助手段。
  • 要点5: 调优过程是迭代渐进的过程,每一次调优的结果都要反馈到后续的代码开发中去。
  • 要点6: 性能调优不能以牺牲代码的可读性和可维护性为代码。

  本文只介绍了一些性能调优的要关注的东西以及性能调优的一般要点。并没有具体说如何对系统的每个部件进行调优,如何要细说也不是一两书能说清的,对知识面的要求也非常高,是我目前的能力无法触摸的。

这里做个总结

  《性能测试知多少》系列基本完结,虽然时间拉得比较长,但我没有把它给太监。虽然内容都在空谈性能测试理论知识,但我认为这些东西对于你从事性能测试工作必不可少。当然,我在“ jmeter基础 ” 与“ loadrunner 技巧 ” 中讲解两个性能测试工具的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/129088.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Codeforces Round 882 (Div. 2)

目录 A. The Man who became a God 题目分析: B. Hamon Odyssey 题目分析: C. Vampiric Powers, anyone? 题目分析: A. The Man who became a God 题目分析: n个人分成k组,每一组的力量都是这样的,那么如果分成k组那么就会有k-1个力量不被统计…

Android 11 Framework 增加自定义API到系统中

基于 Android 11 源码 根据网上的教程, 自己先捣鼓一波: frameworks\base\services 创建 hzyd文件夹 Android.bp内容: android_library_import {name: "services.hzyd",aars: ["MobileSDK-release.aar"],sdk_version: "current", }修改 fra…

tmux工具

B站学习地址:tmux教程

【深度学习】pytorch——Tensor(张量)详解

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ pytorch——Tensor 简介创建Tensortorch.Tensor( )和torch.tensor( )的区别torch.Tensor( )torch.tensor( ) tensor可以是一个数(标量)、一维数组(向量)、二维数组&…

安全与HTTP协议:为何明文传输数据成为争议焦点?

🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 一、H…

学习小结,学而时习之,坚持学习之,温顾学习之

学习python一个多月了,之前也有接触过,还花了不少钱报班,看了看入门的头两节课,就止步了。每一种编程语言的入门感觉都差不多,学到现在,我对python的基本数据类型还是没掌握好啊,每次列表字典怎…

2015年亚太杯APMCM数学建模大赛C题识别网络中的错误连接求解全过程文档及程序

2015年亚太杯APMCM数学建模大赛 C题 识别网络中的错误连接 原题再现 网络是描述真实系统结构的强大工具——社交网络描述人与人之间的关系,万维网描述网页之间的超链接关系。随着现代技术的发展,我们积累了越来越多的网络数据,但这些数据部…

最近面试者对接口测试的理解真把我给笑拥了~

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

Hadoop PseudoDistributed Mode 伪分布式

Hadoop PseudoDistributed Mode 伪分布式加粗样式 hadoop101hadoop102hadoop103192.168.171.101192.168.171.102192.168.171.103namenodesecondary namenoderecource managerdatanodedatanodedatanodenodemanagernodemanagernodemanagerjob historyjob logjob logjob log 1. …

从零开始的JSON库教程(一)

本文是学习github大佬miloyip而做的读书笔记,项目点此进入 目录 1、JSON是什么 2、搭建编译环境 3、头文件与API设计 4、JSON的语法子集 5、单元测试 6、宏的编写技巧 7、实现解析器 8、关于断言 1、JSON是什么 JSON(JavaScript Object Notati…

UI设计一定不能错过的4款常用工具

虽然设计审美很重要,但软件只是一种工具,但就像走楼梯和坐电梯到达顶层一样,电梯的效率显然更高,易于使用的设计工具也是如此。让我们了解一下UI设计的主流软件,以及如何选择合适的设计软件。 即时设计 软件介绍 即…

uniapp小程序九宫格抽奖

定义好奖品下标,计时器开始抽奖,请求接口,出现中奖奖品之后,获取中奖商品对应的奖品下标,再次计时器判断当前移动的小标是否为中奖商品的下标,并且是否转到3圈(防止转1圈就停止)&…

Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)

转自 Mac -- zsh-最新全网超详细的个性化终端(Terminal)颜色及vim颜色配置(亲测可行)_mac zsh-CSDN博客 以下都是苹果 设置,这是简化版的,详细的看我引用的 个性化终端颜色背景设置 显示检查器 打开终端,鼠标在终端中,右击&…

【后端开发】手写一个简单的线程池

半同步半异步线程池 半同步半异步线程池分为三层: 同步服务层 —— 处理来自上层的任务请求,将它们加入到排队层中等待处理。 同步排队层 —— 实际上是一个“同步队列”,允许多线程添加/取出任务,并保证线程安全。 异步服务层…

烂大街的测试左移和右移!

01、测试左移与右移的定义 通俗的讲:左移是往开发阶段移,右移是往发布之后移。 正常测试:提测后的测试工作——到——发布验证完成阶段。 测试左移:提测之前的测试。 如:代码单元测试,代码质量检测&…

Nacos报错Connection refused (Connection refused)(最后原因醉了,非常醉)

目录 一、问题产生二、排查思路1.nacos拒绝连接,排查思路:2.Nacos启动成功但是拒绝连接的几种原因: 三、实操过程(着急解决问题直接看这个)1.启动Nacos2.查看Nacos启动日志3.根据日志处理问题4.修改Nacos5.重启Nacos 一…

c++qt学习对象树

1.当创建的对象在堆区时候,如果指定的父亲是QObject派生下来的类或者QObject子类派生下来的类,可以不用管理释放的操作,将对象会放在对象树中。 2.一定程度上简化了内存回收机制 构造顺序与析构顺序相反

SpringBoot整合Activiti7——全局监听器(八)

文章目录 一、全局监听器事件类型配置方式(选)日志监听器代码实现xml文件创建全局监听器全局配置类测试流程部署流程启动流程 一、全局监听器 它是引擎范围的事件监听器,可以捕获所有的Activiti事件。 事件类型 ActivitiEventType 枚举类中包含全部事件类型 配置方…

跳跳狗小游戏

欢迎来到程序小院 跳跳狗 玩法:一直弹跳的狗狗,鼠标点击屏幕左右方向键进行弹跳,弹到不同物品会有不同的分数减扣,规定的时间3分钟内完成狗狗弹跳,快去跳跳狗吧^^。开始游戏https://www.ormcc.com/play/gameStart/198…

MySQL用户管理和授权

目录 一.用户管理 1.1.新建用户 1.2.查看用户 1.3.重命名用户rename 1.4.删除用户 1.5.修改当前登录用户密码 1.6.修改其他用户密码 1.7.忘记root 密码并找回 二.数据库用户授权 2.1.all privilege包含的权限 2.2.授予权限 ①允许指定用户查询指定数据库表 ②允许…