zoukankan      html  css  js  c++  java
  • 【性能】性能调优思考

    我们可以通过事物的响应时间作为基础来分析:

    响应时间=网络的延迟时间+应用的延迟时间+数据库的延迟时间

    数据流转详细过程:

    1、从客户端(负载机)发起请求,通过网络传输到Web应用服务器。

    2、Web应用服务器收到请求后,不会马上处理,找到空闲的进程/线程,再进行应用程序的处理。比如说数据库的DML操作,应用程序生成SQL语句发往数据库服务器。

    3、数据库操作请求通过网络传输到数据库服务器,数据库拿到SQL语句后进行语法解析、域解析,生成SQL的执行计划,根据SQL的执行计划去数据库执行这条SQL语句。如果数据在缓存里面,直接从缓存里面把结果集通过网络返回给应用服务器,如果这条数据不在缓存中,需要到磁盘去找到这条数据,然后放到内存中再返回给应用服务器。

    4、应用服务器拿到返回结果后,不会马上处理,需要唤起空闲进程/线程后,再进行下一步的业务逻辑处理。

    5、如此循环反复,执行完成之后,再把返回结果集通过网络返回给客户端(负载机)。

    整个过程包括7个阶段:

    客户端→网络→Web容器(中间件)→应用程序→数据库→应用程序→客户端

    分析步骤:

    1、客户端(负载机)

      压力的发起点

      如果压测过程中发现应用程序的TPS、压力、并发上不去,第一个应该检查负载机,因为它是压力的发起点。

      负载机的性能瓶颈:网卡(上传下载)、CPU高、内存高

    2、网络

      网络错误率/丢包率

      在Linux下用sar命令查看

      更换网卡、增加带宽

    3、Web服务器

      硬件:CPU、内存、磁盘

      什么造成了CPU使用高

      什么造成了内存使用高

      什么造成了磁盘使用繁忙

    4、数据库服务器

      硬件:CPU、内存、磁盘

      什么造成了CPU使用高

      什么造成了内存使用高

      什么造成了磁盘使用繁忙

    5、Web容器(中间件)

      线程/进程排队,线程池配置不合理会占用过多的内存资源

      是否需要配置长链接keepalive,长连接的大小配置是否合适,长连接的超时时间配置是否合理

      gzip压缩是否开启(文件、图片)

    6、数据库

      SQL使用是否合理

      SQL执行效率

      数据库连接池是否繁忙

      数据库的配置是否合理

    7、应用程序

      JVM内存使用情况

      GC使用是否合理,是否停顿时间过长

      业务逻辑

      算法

    分析思路总结:

    CPU、内存、磁盘之间的关系

    1、CPU

      就像人的大脑,主要负责相关事情的逻辑判断、运算以及实际处理机制

      查询指令:cat /proc/cpuinfo

    2、内存

      大脑中的记忆区块,将眼睛、皮肤等收集到的信息纪录起来的地方,以供CPU进行判断

      CPU进行逻辑判断、运算的数据来源于内存

      查询指令:cat /proc/meminfo

    3、磁盘

      大脑中的记忆区块,将重要的数据记录起来,以便未来再次使用这些数据

      数据的最终的存储区域

      查询指令:fdisk -l

    总结:

      CPU先从内存中拿数据进行处理、校验、判断,处理完之后把数据返回给内存,需要存储的东西由内存放到磁盘中进行处理。CPU不会直接操作磁盘中的数据,它操作的是内存。内存是中间介质,内存足够大,内存中存放的数据就多,CPU能够直接处理的数据就更多,这样处理速度就快。

      我们用工人、车间、仓库来类比CPU、内存、磁盘。工人相当于CPU,在车间进行材料加工,车间相当于内存,车间的材料不够就要去仓库里面去取,仓库就相当于磁盘。只有车间足够大,工人才可以一直在车间进行加工,不需要取仓库取源材料,这样效率更高,速度更快。

    内存与磁盘以及虚拟内存的关系

    虚拟内存

      从磁盘上虚拟出来的一段地址空间当内存用,它的速度比物理内存要慢。

    操作系统分析方向

    CPU→内存→磁盘

  • 相关阅读:
    顺序栈的模拟
    Maven安装教程详解
    C# CRC
    Oracle知识分类之常见规范
    Oracle知识分类之异常
    el-tree树结构的数据封装
    sessionStorage和localStorage
    el-form 中为el-input 添加正则校验 以及el-input正则限制
    动态组件与父子传值的灵活应用 ref控制子组件 props,emit传值
    el-tree树组件的封装 (运用递归对接口返回当前菜单数据为对象处理)
  • 原文地址:https://www.cnblogs.com/gtea/p/14164580.html
Copyright © 2011-2022 走看看