如何进行性能分析

2023-11-11

一、性能分析的常用手段

1、空间换时间,利用内存缓存从磁盘上取出的数据,CPU可以直接访问内存,从而比从磁盘读取数据更高的效率。

2、时间换空间,当空间成为瓶颈的时候,切开数据分批次处理,用更少空间完成任务的处理。

3、分而治之,把任务切分,分开执行。

4、异步处理,业务链路上有任务时间消耗较长,可以拆分业务,减少阻塞影响,常见的异步处理有MQ(消息队列)。

5、并行,用多个进程或者线程同时处理业务,缩短业务处理时间。

6、离用户更近一点,比如CDN技术,把用户请求的静态资源放在离用户更近的地方。

 

二、性能分析方法

1、自低而上:通过监控硬件及操作系统性能指标来分析性能问题。

2、自顶而下:通过负载生成来观测被测试系统的性能,比如响应时间、吞吐量。

 

三、性能分析流程

1、检查RT:响应时间

2、检查TPS:每秒完成事务数

3、检查负载机资源消耗,是否有性能问题:CPU使用率

4、检查web服务器的资源消耗:

  1)检查CPU的使用率;

  2)检查内存的使用情况;

  3)检查磁盘使用情况;

  4)检查占用的带宽;

  5)分析web页面的响应组成

5、检查中间件的配置问题

6、数据库服务器资源消耗分析:

  1)检查CPU的使用率;

  2)检查内存的使用情况;

  3)检查磁盘使用情况;

  4)数据库监控

7、SQL分析:

  1)定位不合理的sql占比;

  2)索引是否正常应用;

  3)检查共享sql是否合理范围;

  4)检查解析是否合理;

  5)检查数据ER结构是否合理;

  6)检查数据热点问题;

  7)检查数据分布是否合理;

  8)检查碎片整理

 

四、系统性能关注点

  1、系统资源

  (1)CPU过高:

    1)计算量大,比如运算、连接查询、数据统计;

    2)非空闲等待,同一资源被不同线程请求,而此资源又需要保证一致性,只能前一个释放后一个再访问,导致等待;

    3)过多的系统调用,系统调用操作系统所提供的程序接口;

    4)过多的中断,中断是CPU用来响应请求的机制。

  (2)内存吃紧,解决办法就是加内存,或者减少不必要的调用。

  (3)磁盘繁忙,数据读写频繁。

  (4)高并发造成网络拥堵。

  2、操作系统

  (1)系统负载:load average(CPU的任务队列长度)

  (2)系统连接数的控制,操作系统为了安全会限制外部及内部建立TCP连接的数量,在服务器环境需要提供大量的服务,                    此 时需要修改这个TCP连接数的限制。

  (3)缓存:操作系统存在缓存机制,内存不够时,有虚拟内存,哲学都是提高IO效率的有效手段。

  3、数据库

  系统性能的好坏很大部分是由数据库系统应用数据库设计如何使用数据库来决定的。

       简单地把这些应用系统分为:

  •   OLTP:联机事务处理系统
  •   OLAP:联机分析处理系统

       以下为OLTP和OLAP的粗略比较:

  

  (1)对于OLTP类型的常规办法是:

    1)优化业务过程,尽量减少数据请求,不管是读还是写

    2)优化sql语句提交效率

  (2)对于OLAP类型的常规办法是:

    1)预处理,比如物化、多维数据,先把数据放在后台统计,生成一个较小的数据集,然后程序对物化后的数据进行访                        问,减小系统压力。

    2)分而治之,比如并行查询

    3)优化语句提高效率

  (3)OLTP类型关注点:

    1)慢查询

    2)大事务

    3)死锁

    4)DB Time高

    5)磁盘IO等待时间

    6)对于一些热点数据,可以置入内存,提高响应数据,常见的缓存如memcache、redis等,Hibernate这种ORM模型的                      框架也提供二级缓存支撑。

4、中间件

  J2EE架构的程序多数运行在Tomcat、Jboss、WebLogic、Jetty等中间件上。

  (1)JVMJava Virtual Machine,Java虚拟机 ):中间件是运行在JVM之上的,我需要监控jvm堆内存使用情况。包括GC(Garbage Collection,垃圾回收)频率,线程状态等。Full GC操作是对堆空间进行全面回收,所以频繁得Full GC会影响响应时间。监控线程运行状态主要关注Blocked状态线程,此状态说明当前线程运行相对较慢,长时间的Blocked可能是因为线程阻塞,甚至造成死锁。

  (2)Thread pool(线程池):中间件在接收用户请求时为了节省建立连接、销毁连接的资源消耗,设计建立线程池,需要监控其使用情况,一般超过使用率时,可以考虑加大连接池数量。

  (3)DB Connections pool(数据库连接池):为了节省程序与DB建立连接、释放连接的资源消耗,设计数据库连接池,一般超过使用率时,可以考虑加大连接池数量。

  Thread pool和DB Connections pool,我们都可以通过netstat命令统计其连接数

5、应用程序

  不同的架构存在不同的性能短板,抽象层次越高(低层封装程度越高),开发效率越高,对开发人员的要求越低,性能风险越高。往往性能风险都会集中在这一层次。

我们常见的SSH架构是MVC模型

  • view展现层:复制展现的内容,
  • Controller负责请求接收,前台逻辑跳转;
  • Model层实现业务逻辑,返回数据;数据层负责与数据库打交道。

6、web服务

关注点:

  (1)页面的Size:动态数据、CSS、JS、图片等的大小

  (2)隐藏的,无用的数据传输

 

web性能优化方向:

  (1)页面静态化,先进行静态化然后提供访问,减少DB的负担

  (2)减少页面的size

  (3)砍掉无用的请求,无用的数据传输

  (4)对数据做异步处理,事情分为多步,先完成优先级高的事情

  (5)智能DNS及CDN加速,让响应数据离用户更近,回避缓解网络瓶颈

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何进行性能分析 的相关文章

  • 从功能测试转型测试开发,薪资涨了20K,1000字讲述转型必经之路...

    身处职场之中 犹如逆水行舟不进则退 想要不被后浪拍死在沙滩上 就要不断学习新知识 接受新事物 要得到更好的发展 就要紧跟发展趋势 不断转型才能保持竞争力 在职场中占有一席之地 转型不是一件容易的事 涉及到转型 革新 就要突破现有的框架 必然
  • 资深测试老鸟整理,性能测试-常见调优详细,卷起来...

    目录 导读 前言 一 Python编程入门到精通 二 接口自动化项目实战 三 Web自动化项目实战 四 App自动化项目实战 五 一线大厂简历 六 测试开发DevOps体系 七 常用自动化测试工具 八 JMeter性能测试 九 总结 尾部小
  • Python web自动化测试 —— 文件上传

    文件上传三种方式 一 查看元素标签 如果是input 则可以参照文本框输入的形式进行文件上传 方法 和用户输入是一样的 使用send keys 1 2 3 4 5 步骤 1 找到定位元素 2 输入文件路径 ele driver find e
  • 性能测试工具有哪些?原理是什么?怎么选择适合的工具?

    前言 本篇文章主要简单总结下性能测试工具的原理以及如何选型 性能测试和功能测试不同 性能测试的执行是基本功能的重复和并发 需要模拟多用户 在性能测试执行时需要监控指标参数 同时性能测试的结果不是那么显而易见 需要对数据进行分析 这些特点决定
  • 性能测试_Day_10(负载测试-获得最大可接受用户并发数)

    目录 如何理解负载测试 如何实现负载测试 jpgc Standard Set插件安装 jpgc Standard Set使用方法 负载测试分析指标 获得最大可接受用户并发数 区间值 负载测试分析指标 获得最大可接受用户并发数 真实值 负载测
  • 性能测试连载 (11)- jmeter 的线程数与压力模式

    咨询微信 uhz2008 需求 下面有3个场景 思考一下在jmeter里面如何设计 场景1 有一个项目 500用户同时登录 响应时间能达到多少 场景2 考勤打卡 最大吞吐量能达到多少 每秒最大能完成多少笔打卡业务 场景3 银行业务 如果需要
  • 性能测试连载 (10)-数据错误率分析

    概述 性能测试脚本跑完了之后 我们除了要收集瓶颈数据 还有分析错误数据 通常一套脚本跑完 错误类型不止一种 但是jmeter只会在聚合报告里面给出一个总体的错误率 错误率 jmeter里的错误率是如何统计的 在返回的数据里面 只要succe
  • JMeter接口压测和性能监测

    引言 今天我来和大家分享一篇关于JMeter接口压测和性能监测的文章 在现代互联网时代 应用程序的性能已经成为了一个非常重要的问题 并且对于许多公司的生存和发展都起着至关重要的作用 而在这其中 JMeter是一个非常实用的工具 可以帮助我们
  • 软件测试终极难题:先学性能测试还是先学自动化测试?

    应该先学性能 还是应该先学自动化 这个问题是很多想要提升的人都会比较犹豫的 因为不知道怎么学更好 更合适 那今天我们就来给大家讲讲这个问题 在选择这两个方向的时候 我们应该先明确测试方法都是做什么的 性能测试首先我们是要解决这个软件功能已经
  • Redis缓存知识-穿透、击穿、雪崩

    目录 一 Redis介绍 二 Redis做缓存服务器 三 缓存穿透 击穿 雪崩 1 缓存穿透 2 缓存击穿 3 缓存雪崩 大家好 我是杨叔 每天进步一点点 关注我的微信公众号 程序员杨叔 获取更多测试开发技术知识 今天分享的内容是 Redi
  • Parasoft VS Borland SilkTest,谁的功能测试更全面?

    你知道测试金字塔吗 为了用开发实践来扩大测试规模 如何以正确的数量设计合适类型的自动化测试 测试金字塔是一个很好的指南 测试金字塔是一个很好的视觉隐喻 它描述了不同的测试层 以及每一层要做多少测试 Parasoft测试金字塔 虽然测试自动化
  • YSlow--Web前端性能测试工具

    1 介绍 YSlow是Yahoo发布的一款基于FireFox的插件 这个插件可以分析网站的页面 并告诉你为了提高网站性能 如何基于某些规则进行优化 它可以分析任何网站 并为每一个规则产生一个整体报告 如果页面可以进行优化 则YSlow会列出
  • 用Sipp 对Asterisk 进行性能测试的工作笔记-1

    公司需要 对Asterisk 进行一定的性能测试 测试目标 1 IVR 支持多少路2 一对一通话 支持多少路3 不同编解码的性能影响 4 通话中 录音 支持多少路 测试工具 sipp http sipp sourceforge net 辅助
  • TestComplete数据驱动测试教程(三)——修改记录测试

    TestComplete是一款具有人工智能的自动UI测试工具 利用自动化测试工具和人工智能支持的混合对象识别引擎 轻松检测和测试每个桌面 Web和移动应用程序 本文中我们将讲解如何进行数据驱动的测试 方便大家更快更直接的学习TestComp
  • [性能测试]LR常见问题整理

    1 LR 脚本为空的解决方法 1 去掉ie设置中的第三方支持取消掉 2 在系统属性 高级 性能 数据执行保护中 添加loadrunner安装目录中的vugen exe文件 有可能是由于录制的URL地址采用的是localhost的问题 改成分
  • Linux性能监控 -- vmstat命令

    文章目录 示例 字段说明 示例 输入vmstat命令后 第一个参数表示每1秒获取一次服务器资源 第二个参数表示总共获取10次 若第二个参数不设置 则表示持续获取服务器资源 字段说明 数据项 含义 r 表示有多少任务需要CPU执行 通常与后5
  • 性能测试连载 (5)-jmeter 下的性能指标监听

    咨询微信 uhz2008 性能指标监听 概述 性能测试过程中 想要得到比较靠谱的性能数据 就不得不对各种性能数据进行动态监听 jmeter中提供了很多性能数据的监听器 我们通过监听器可以来分析性能瓶颈 本文用吞吐量模式 演示200线程的负载
  • 性能测试大致分为以下六种

    性能测试大致分为以下六种 第一种是Benchmark 标杆测试 又叫基准测试 主要是测试一些基础数据 给进一步建立性能模型提供依据 一般测试人员按照1并发用户来执行脚本 校验脚本正确与否 为之后的压力测试和负载测试做准备 第二种是Load
  • 测试报告和结果分析 —— allure整合pytest生成测试报告

    一 生成HTML测试报告的三种方式 1 unittest和HTMLTestRunner整合 2 allure和pytest整合 3 Jenkins中安装allure插件 Jenkins安装插件出错 不能正常使用 二 allure整合pyte
  • 测试:性能测试

    一 性能测试 性能测试是一种评估软件 系统或服务在特定条件下性能的过程 性能测试有助于确定系统的响应时间 吞吐量 可扩展性 稳定性和资源消耗等关键指标 一 响应时间 响应时间 Response Time 是性能测试中的一个重要指标 用于衡量

随机推荐

  • python将dataframe输出到word文档中

    python将文本 dataframe输出到word文档中 加载基本库 from docx import Document import pandas as pd temp name link dir south beizhu test d
  • 【2019.09.08】python 基于Excel设计实现的关键字驱动的自动化测试框架

    之前写过PO模式 数据驱动的测试框架 最近要做一个测试平台 先写一个关键字驱动的测试框架练练手 Excel 样式展示 如图 结果展示 代码 结构 读取excel usr bin env python coding utf 8 Time 20
  • UE4 C++ 一个Character踩地雷

    UE4 C 一个Character踩地雷 Fill out your copyright notice in the Description page of Project Settings pragma once include Core
  • MD5加密

    interface NSString LuckyMD5 NSString md5String MD5加密 32位 小写 param str 传入要加密的字符串 return 返回加密后的字符串 NSString MD5ForLower32B
  • 推荐系统公平性论文阅读(一)

    公平性 fariness 新的突破点 推荐系统的公平性 fairness 正在成为推荐系统领域的一个新的突破点 目前对于推荐系统这种需要落地的应用 单纯的在模型领域取得准确率等指标的突破已经不是唯一的追求 虽然fancy的模型依然重要 但是
  • 国产弱网测试神器 QNET零基础快速上手(上)

    01 APP弱网测试背景 App 在使用的过程中 难免会遇到不同的弱网络环境 像在公车上 在地铁 地下车库等 在这种情况下 手机常常会出现网络抖动 上行或下行超时 导致 APP 应用中出现丢包延迟 从而影响用户体验 作为软件测试工程师 我们
  • brew install报错Error: No developer tools installed. Error: Command failed with exit 128: git

    先来解决第一个问题 Error No developer tools installed Install the Command Line Tools xcode select install xcode select install 然后
  • 【C++】auto关键字的使用(C++11)

    1 auto简介 C语言中auto关键字专门用来修饰函数中定义的变量 表明 该变量为自动存储类型的变量 即该变量会被自动销毁掉 C 11中 标准委员会赋予了auto全新的含义即 auto不再是一个存储类型指示符 而是作为一个新的类型指示符来
  • web前端开发主要课程,CSS字体样式值,赶紧收藏!

    前言 基础知识是前端一面必问的 如果你在基础知识这一块翻车了 就算你框架再好 无济于事 因为对方就不会再给你展示的机会 千万不要因为基础错过了自己心怡的公司 本篇文章可能只是适用于刚毕业的同学或者毕业 2 年之内的小伙伴 大家酌情阅读 零基
  • linux中ldconfig的使用介绍

    ldconfig是一个动态链接库管理命令 其目的为了让动态链接库为系统所共享 ldconfig的主要用途 默认搜寻 lilb和 usr lib 以及配置文件 etc ld so conf内所列的目录下的库文件 搜索出可共享的动态链接库 库文
  • npm安装electron时卡死 ,而利用cnpm安装electron时失败(等一系列幺蛾子)

    按照这个教程 安装cnpm 并执行 cnpm install g electron 时出现 post install failure 部署失败 原因是cnpm只会安装electron的js脚本和js依赖 electron所需要的chromu
  • java求最小公倍数(亲测秒懂)

    直接上代码 public static int gcd int a int b int r while r a b 0 a b b r return b
  • [4G/5G/6G专题基础-154]: 5G无线准入控制RAC(Radio Admission Control)+ 其他准入控制

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 126234036 目录 第1章 什么是
  • Qt中的字符串类QByteArray功能讲解

    得把这话写在前面 不要看到有很多东西都不会就学不下去了 事实上这些不是全部要装到脑子里的 尝试着用的时候就查 现阶段是入门 毕竟之前没接触过 不要心急 勇敢牛牛 字符串类型 c gt char c gt std string Qt gt Q
  • vtk表面提取参数研究

    marching cubes是三维图形处理中常见的算法 实际使用中 对一个影像数据做表面提取 然后平滑得到一个组织表面是一个常用功能 下面这段代码是参考3d slicer的分割流程的代码 boneExtractor vtkMarchingC
  • 【牛客网】OR63 删除公共字符串

    一 题目描述 牛客网题目链接 删除公共字符 牛客题霸 牛客网 描述 输入两个字符串 从第一字符串中删除第二个字符串中所有的字符 例如 输入 They are students 和 aeiou 则删除之后的第一个字符串变成 Thy r std
  • ML2 Plugin框架说明

    在H版本中 ML2 Plugin被添加意图取代所有的Core Plugin 它采用了更加灵活的结构进行实现 下图即为ML2 Plugin的实现框架 作为一个Core Plugin ML2自然会实现network subnet port三种核
  • SpringBoot入门到精通(十一):整合Swagger3.0-定制RESTful与统一接口返回值

    整合Swagger3 0 定制RESTful与统一接口返回值 一 整合Swagger3 0 随着Spring Boot Spring Cloud等微服务的流行 在微服务的设计下 小公司微服务工程jar小的几十个 大公司大的工程拆分jar多则
  • C到C++的升级

    前言 C到C 的升级 是一次很有利的升级 他从一个面向过程的语言走向了一个面向对象的语言 他是对C很多的优化 解决了C中存在的许多不合适的地方 他的两个加号 一个是增加了新的类型 一个是增加了面向对象 他是对效率的一种提升 C当时的设计主要
  • 如何进行性能分析

    一 性能分析的常用手段 1 空间换时间 利用内存缓存从磁盘上取出的数据 CPU可以直接访问内存 从而比从磁盘读取数据更高的效率 2 时间换空间 当空间成为瓶颈的时候 切开数据分批次处理 用更少空间完成任务的处理 3 分而治之 把任务切分 分