zoukankan      html  css  js  c++  java
  • 【性能测试】性能分析方法

    一、性能分析的常用手段

    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)JVM:中间件是运行在JVM之上的,我需要监控jvm堆内存使用情况。包括GC频率,线程状态等。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加速,让响应数据里用户更近,回避缓解网络瓶颈

    作者:gtea 博客地址:https://www.cnblogs.com/gtea
  • 相关阅读:
    python内置模块collections介绍
    Python的set集合详解
    不同 Python 数据类型的搜寻
    Python 分支、循环、条件与枚举
    ssrf爆破mysql
    php反序列化
    thinkphp历史漏洞
    Thinkphp 缓存RCE
    绕WAF文章收集
    mssql手工盲注
  • 原文地址:https://www.cnblogs.com/gtea/p/15195404.html
Copyright © 2011-2022 走看看