性能测试day07_性能瓶颈和分析

https://www.cnblogs.com/leixiaobai/p/9463748.html

  其实如果之前都做的很到位的话,那么再加上APM工具(dynaTrace等),监控到非常细节,那么我们跑一个业务,我们就能完全清楚的知道每个请求的时间,也能知道请求所产生sql的时间,这样你自然而然都知道时间耗在哪里了,直接就能去调节时间消耗最多的请求了。

  对于系统调优分为前后端调优,前端之前有一篇专门讲过,现在有些项目用的是胖前端(前端带有数据库,请求数据不请求后端,直接请求前端数据库,前端数据库会定时刷新同步数据库,其实这个主要目的就是减少对后端的请求),这里我们主要说一下后端,后端就包括web服务器、app(应用)服务器、DB。也因为基本上所有性能问题都是后端的原因。

  影响最大的调优:后端影响最大的性能问题都是DB的问题。那么解决数据库的性能问题一般都是什么呢?

解决IO问题,数据文件读取速度的提升,比如硬盘变为ssd。
如果不是IO的问题呢?可以解决读写分离,对于读可以采用redis.
那么如果还不行呢?就要考虑优化sql了,通过sql的执行计划(看sql的执行过程及时间)->判断是否有索引->分析影响最大和最易调优和组合(可以冗余属性,对于多表查询的数据可以适当加多一个字段在表里存放,尽量避免多表查询)
  最易调优:

代码调优(一般代码的开销是cpu),因为代码是自己写的,所以最容易调优。
配置和应用平台的调整。
  组合调优(让系统整体都没有明显瓶颈):

有资源不用是浪费;
无节制的调优是毫无意义的,要考虑性价比。

性能调优模型必讲->理发师模型

  通过数据我们可以做出两张关系图,第一张是用户数和响应时间的图,这边我们想一想为什么响应时间会持续上升呢?是不是处理能力一定的情况下,出现了排队的情况,类似于cpu队列。第二个图是用户和TPS的关系图,可以知道,处理能力恒定,一旦处理能力饱满开始排队,响应时间处理按照处理时间开始堆叠。其实理发师模型就是理想系统的原型图,特别适合我们去分析研究性能问题。

  那么好了,如果我们想要调优,本质上就是提升资源,也就是理发师的个数对不对?那么假设增加理发师人数10倍,那么处理能力就会提升10倍吗?这个不一定,因为出现了多个理发师的时候,就会出现理发师调度的问题?是不是就需要管理人员?那么就意味着部分人员不能做理发师需要单独拿出来做管理或者其他,那么从原则上来讲提升了10倍的人数后处理能力会低于之前的10倍处理能力吧。所以在理发师人数增多的过程中,刚开始由于要进行任务调度,有可能tps出现稍微下滑的现象。而且理发师增多,那么队列也就能排的越长,那么出现各种问题的概率也就越大。那么为了避免这个问题怎么办呢?可以通过异步队列(比如MQ)进行处理。

  在做性能测试时候,

我们一般会先做单用户串行负载,如果长时间跑下来响应时间没有变化,那么说明不存在排队或者资源泄露的问题。(下图的A点)
然后再做一个理想的小用户性能测试,如果此时响应时间随着用户上升也上升了一段时间后又平稳说明了什么呢?此时我们需要查看TPS,如果响应时间上升的时候,TPS也上升又说明了什么呢?那么是不是有可能对于一个业务有多个因素影响,其中一个因素比较慢,但是其他的都比较快,所以总体来讲是慢的但是tps依旧没到瓶颈点。下图是常见的用户数和响应时间还有TPS的关系图,在我们性能测试过程中出现的三者关系图都可以参考这个图来看,B点就是最大处理能力的点,C点是客户无法接受的响应时间点。
  

  如何判断调优,实际上就是A、B、C三点的右移,在同场景下如果结果右移证明调优成功。不过大家也要知道不是负载最高就一定是有瓶颈,因为每一种架构都有该架构的性能上限的。

  我们平时做性能的时候,一般都会做事务对吧,以登陆为例,假设我们登陆TPS为100时,响应时间为5s,那么我们知道是哪里用了5秒吗?实际上这只是一个时间的总和(前端、应用端、数据库端、网络等时间总和),那么此时我们就需要拆分这个时间,怎么做呢?还记得我之前说的APM监控吗?一般的APM都是很贵的,所以一般需要我们自己打点,我们可以让开发帮我们在做每一件事情都记录时间点,假设登陆,那么我们可以记录总的后端处理时间,然后让开发呈现在页面或者以其它形式给我们,然后再对数据库处理返回记录一个时间,那么后端的应用端和数据库端的时间我们就能差不多知道了。如果开发将时间抛出在了界面,那么我们就可以通过关联先拿到这个值,然后再通过lr_user_data_point将该时间值记录下来,在场景测试中,我们可以查看User Defined Data Points可以进行查看。(如果不清楚lr函数使用可以百度)

  其实上面的打探针操作就相当于我们做了个小的APM,如果记录的时间差不丢界面的话也可以丢日志里面,然后我们把日志丢influxdb里面进行排序读取出来也是可以的。

性能测试执行:

入手
环境(软硬件、数据、参数)
记录环境、数据
跑一下(看看系统大概性能,了解整体系统情况)
简单分析(前端工具,刷新看看性能,评估瓶颈点和响应时间)
数据整理(分析大概的瓶颈点)
重现定位问题(层层探针,定位基于监控)
调优(记住调优不是测试的工作,如何协调开发是调优的关键以及自己的见识决定了调优)
报告(思路清晰,测试目的决定报告)
更多调优的具体思路可以查看下阿里云的测试分析及调优:https://help.aliyun.com/document_detail/29342.html?spm=a2c4g.11186623.6.612.5oUhZg

web服务器、app(应用)服务器、DB后端性能瓶颈和分析的更多相关文章

  1. 21. 无法执行该操作,因为链接服务器”Server_202”的 OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务”

    无法执行该操作,因为链接服务器”Server_202”的 OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务” 原因:调用存储过程的方式有问题,必须用JDBC方式调用存储过程才可以正常 ...

  2. RxJava(五) onErrorResumeNext操作符实现app与服务器间token机制

    欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51533586 本文出自:[余志强的博客] 一.需求场景: 在开发Ap ...

  3. 关于:无法创建链接服务器 "ORCL" 的 OLE DB 访问接口 "OraOLEDB.Oracle" 的实例 (错误:7302)

    本人接触和使用Oracle数据库才有一个季度的时间,问题比较白,大神请无视本文. 环境: 1.数据服务器,windows2008R2,Oracle11g 2.报表服务器,windows2008R2,S ...

  4. Web服务器、Web容器、Application服务器、反向代理服务器的区别与联系

    在Web开发中,经常会听到Web服务器(Web Server).Web容器(Web Container).应用服务器(Application Server).反向代理服务器(Reverse Proxy ...

  5. 5分钟Serverless实践 | 构建无服务器的敏感词过滤后端系统

    前言 在上一篇“5分钟Serverless实践”系列文章中,我们介绍了什么是Serverless,以及如何构建一个无服务器的图片鉴黄Web应用,本文将延续这个话题,以敏感词过滤为例,介绍如何构建一个无 ...

  6. Web服务器与数据库服务器分离 导入 Excel数据至数据库

    一般情况一般项目WEB服务器与数据库均部署在一台服务器,文件上传,数据导入在一台服务器完成.web服务器与数据库服务器分离,文件上传与数据导入将分布在两台服务器或多台服务器之间.本案例为两台服务器,具 ...

  7. PHP Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  8. 部署Eclipse中的Web项目到Tomcat服务器运行

    用Eclipse开发Web项目时,可以通过Tomcat服务器运行Web项目,此时Web项目被部署在[WorkSpace]\.metadata\.plugins\org.eclipse.wst.serv ...

  9. WEB服务器、应用程序服务器、HTTP服务器区别

    很清晰的解释了WEB服务器.应用程序服务器.HTTP服务器区别 转载自 http://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575.html WE ...

随机推荐

  1. 【Docker】Docker是什么?怎么安装?怎么用?

     从今天开始学习Docker,通过对网上资料的搜集与学习,记录一下. 是什么 ? Docker是一个基于LXC实现的类似于VMs的超轻量级虚拟机. 它与VMs的区别在于,VMs提供的是一个完整的操作系 ...

  2. DateTime.Now与DateTime.Today的区别

    区别如下图: DateTime.Now: 不仅显示日期 还显示当前时间: DateTime.Today: 只显示当前日期,没有时间

  3. html的framset使用

    frameset主要用在显示多个页面的需求下: 看代码: <html> <head> <title>html frameset test</title> ...

  4. 江铖:乳腺癌识别By AI

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云加社区技术沙龙 发表于云+社区专栏 演讲嘉宾:江铖,腾讯觅影高级研究员.多年以来一直从事计算机视觉相关的研究.加入腾讯以后,负责腾讯 ...

  5. 【c++】动态绑定

    C++的函数调用默认不使用动态绑定.要触发动态绑定,必须满足两个条件: 只有指定为虚函数的成员函数才能进行动态绑定 必须通过基类类型的引用或指针进行函数调用 因为每个派生类对象中都拥有基类部分,所以可 ...

  6. linux下查看memcache版本

    用telnet 127.0.0.1 11211命令连接上memcache, 然后直接输入stats就可以得到memcache服务器的版本

  7. SQLSTATE[HY000] [2002] No such file or directory in

    这个错误将数据库配置信息的localhost改成127.0.0.1就行了

  8. 1.JDBC基础

    JDBC全称Java Database Connectivity,即Java数据库连接.(以下以MySQL为例,使用MySQL语句) Sun公司提供了标准JDBC API接口,没有实现具体类.各个数据 ...

  9. mysql数据库详解

    001 数据库应用系统设计 1.规划   2.需求分析   3.概念模型设计   4.逻辑设计   5.物理设计   6.程序编制及调试   7.运行及维护. 002 创建数据库 CREATE DAT ...

  10. java 多线程执行过程

    1.分支线程执行 过程: 2.线程运行的状态:五大状态 线程: 从新建状态  就绪状态   运行状态  挂起(阻塞)状态 死亡状态(结束,销毁) 3. 多线程:在同一个时间执行多个任务的操作,现在的软 ...