• 【linux】性能优化


    这张图谱出自倪朋飞;

    1、什么是性能指标

    这里一定会想到 “高并发” 和 “响应快”,这里词正对应的就是 “吞吐” 和 “延时”。我们知道随着应用负载的体系,系统资源的使用就会提高,甚至达到极限。而性能问题的本质,就是系统资源已经达到瓶颈,但请求处理还是不够快,无法支撑更多的请求。

    性能分析就是找到应用或系统的瓶颈,并设法去避免或者缓解它们,从而高效的利用系统资源来处理更多的请求。这里包含六部:

    • 选择指标评估应用程序和系统的性能;
    • 为应用程序和系统设置性能目标;
    • 进行性能基准测试;
    • 性能分析定位瓶颈;
    • 优化系统和应用程序;
    • 性能监控和告警;

    Linux 性能工具图谱:

    top、uptime命令执行后的平均负载如何理解

    怎么理解平均负载

    每当系统变慢的时候,我们下意识的就会想到使用top或者uptime命令来查看系统当前运行的状态,其中一个非常重要的指标便是平均负载,例如下面的一组数据

    1. $ uptime
    2. 10:35:11 up 9 min, 1 user, load average: 0.03, 0.14, 0.13

    前几列数据很简单,当前时间,系统运行时间,正在登陆的用户数,而最后的便是平均负载,显示的是1分钟、5分钟、15分钟的平均负载

    那么到底如何理解平均负载呢?用man命令查看uptime的一些帮助信息

    总是会有人理解为平均负载是单位时间内的CPU使用率,0.03表示单位时间内的CPU使用率是3%,但其实并不是这样的,上面的英文介绍也说了平均负载是可运行不可中断状态的平均进程数

    可运行状态:是指正在使用CPU或者正在等待CPU的进程,也就是ps命令看到的处于R状态的进程
    不可中断状态:是指正在处于内核态关键流程中的进程,并且这些进程是不可打断的,比如常见的等待硬件设备的IO操作,也就是ps命令看到的处于D状态的进程
    当一个进程向磁盘读写数据的时候,为了保证数据的一致性,在得到磁盘恢复之前他是不能被其他进程或者中断打断的也就是处于不可中断状态,这其实也是一种保护机制

    也就是说平均负载其实是平均活跃进程数,例如当平均负载为2时,如果是在只有2个CPU的系统上意味着所有的CPU都被占用,在4个CPU的系统上,意味着CPU有50%的空闲,在1个CPU的系统上意味着有一半的进程竞争不到CPU

    那平均负载和CPU平均使用率之间有何差别呢?

    平均负载的含义是处于运行状态和中断状态的平均进程数,所以包括了正在使用CPU的进程,等待CPU的进程以及等待IO的进程,而CPU平均使用率就是单位时间内CPU的繁忙情况

    CPU密集型进程:使用大量的CPU会使平均负载升高,这时两者的含义大致相等
    IO密集型进程:等待IO也会导致平均负载升高,但是CPU的使用率不一定升高
    大量等待CPU的进程也会导致平均负载升高,这时CPU的使用率也会比较高
    平均负载为多少时合适
    通过上面也可以知道,平均负载的值和CPU的个数息息相关,首先使用命令查看CPU的个数

    1. $ grep 'model name' /proc/cpuinfo | wc -l
    2. 2

    有了CPU的个数,通过平均负载的值与个数进行比较那么就可以判断当前系统是否过载

    平均负载给了我们三个参考值,分别是1分钟、5分钟、15分钟的值,这其实是反应一个系统的负载情况的趋势

    如果三个数组基本相同或者相差不大,那么说明系统比较平稳的运行
    如果 1 分钟的值远小于 15 分钟的值,就说明系统最近 1 分钟的负载在减少,而过去
    15 分钟内却有很大的负载。
    如果 1 分钟的值远大于 15 分钟的值,就说明最近 1 分钟的负载在增加,这种
    增加有可能只是临时性的,也有可能还会持续增加下去,所以就需要持续观察。一旦 1
    分钟的平均负载接近或超过了 CPU 的个数,就意味着系统正在发生过载的问题,这时就
    得分析调查是哪里导致的问题,并要想办法优化了

    设我们在一个单 CPU 系统上看到平均负载为 1.73,0.60,7.98,那
    么说明在过去 1 分钟内,系统有 73% 的超载,而在 15 分钟内,有 698% 的超载,从整体
    趋势来看,系统的负载在降低

    一般来说当平均负载超过CPU数据的70%的时候,就需要分析排查负载过高的问题了

    top命令

    top后按1键,看到每个cp的使用情况

    在图1中,

    第一行:

        10:08:45 — 当前系统时间
        10 days, 3:05 — 系统已经运行了10天3小时5分钟(在这期间没有重启过)
        1 users — 当前有1个用户登录系统
        load average: 0.00, 0.00, 0.00 — load average后面的三个数分别是1分钟、5分钟、15分钟的负载情况。

    load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

     第二行:
        Tasks — 任务(进程),系统现在共有135个进程,其中处于运行中的有1个,134个在休眠(sleep),stoped状态的有0个,zombie状态(僵尸)的有0个。

    第三行:cpu状态

        0.3% us — 用户空间占用CPU的百分比。
        0.0% sy — 内核空间占用CPU的百分比。
        0.0% ni — 改变过优先级的进程占用CPU的百分比
        99.7% id — 空闲CPU百分比
        0.0% wa — IO等待占用CPU的百分比
        0.0% hi — 硬中断(Hardware IRQ)占用CPU的百分比
        0.0% si — 软中断(Software Interrupts)占用CPU的百分比
     

       第四行:内存状态

        3808060k total — 物理内存总量(4GB)
        3660048k used — 使用中的内存总量(3.6GB)
        148012k free — 空闲内存总量(148M)
        359760k buffers — 缓存的内存量 (359M)
     

    第五行显示交换分区使用情况,包括总的交换分区、使用的、空闲的和用于高速缓存的大小。第六行显示的项目最多,下面列出了详细解释。

    PID(Process ID):进程标示号。
    USER:进程所有者的用户名。
    PR:进程的优先级别。
    NI:进程的优先级别数值。
    VIRT:进程占用的虚拟内存值。
    RES:进程占用的物理内存值。
    SHR:进程使用的共享内存值。
    S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。
    %CPU:该进程占用的CPU使用率。
    %MEM:该进程占用的物理内存和总内存的百分比。
    TIME+:该进程启动后占用的总的CPU时间。
    Command:进程启动的启动命令名称,如果这一行显示不下,进程会有一个完整的命令行。
    top命令使用过程中,还可以使用一些交互的命令来完成其它参数的功能。这些命令是通过快捷键启动的。
    <空格>:立刻刷新。
    P:根据CPU使用大小进行排序。
    T:根据时间、累计时间排序。
    q:退出top命令。
    m:切换显示内存信息。
    t:切换显示进程和CPU状态信息。
    c:切换显示命令名称和完整命令行。
    M:根据使用内存大小进行排序。
    W:将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

    top、uptime命令执行后的平均负载如何理解_uptime 平均负载_四五又十的博客-CSDN博客

    linux top命令查看内存及多核CPU的使用讲述_top 查看内存_风月无边的博客-CSDN博客


     

  • 相关阅读:
    微信小程序前后端交互与WXS的应用
    linux安装MySql
    第2关:节点删除与创建
    简单聊一聊一种很新的DCDC电源-BOB电源
    数字人解决方案——AniTalker声音驱动肖像生成生动多样的头部说话视频算法解析
    FPGA的电源供电
    关于运维,阿里云、字节、华科的专家如是说
    音视频项目—基于FFmpeg和SDL的音视频播放器解析(十六)
    【测试】SonarLint连接SonarQube服务扫描
    SpringBoot整合Websocket,实现作为客户端接收消息的同时作为服务端向下游客户发送消息
  • 原文地址:https://blog.csdn.net/qq_35789269/article/details/133199513