linux学习

CPU问题-平均负载

一、平均负载介绍

  1. 概念:平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数
  2. 反映的是整体的负载情况
  3. 平均负载最理想的情况是等于 CPU 个数
  4. 在实际生产环境中,平均负载的值分析:
    1. 当平均负载高于 CPU 数量 70% 的时候,就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。
    2. 但 70% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。当发现负载有明显升高趋势时,比如说负载翻倍了,再去做分析和调查。

二、查看平均负载的工具

在查看平均负载中可以用到的工具:

  1. uptime:最简单

  2. top:提供了更全的指标,界面简单,不够直观,交互性差

  3. htop:提供了更直观的界面和更丰富的交互功能,允许用户使用鼠标进行交互操作

  4. 命令结果介绍

    [root@zilong ~]# uptime
    11:01:53 up 4 days, 19:26,  2 users,  load average: 0.08, 0.04, 0.05

    命令的分析:

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

三、找出平均负载升高的根源

  1. 平均负载升高的根源:
    1. CPU 密集型进程,使用大量 CPU 会导致平均负载升高,cpu使用率也会升高;
    2. I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
    3. 大量进程等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。
  2. 使用到的工具:sysstat包含了常用的 Linux 性能工具,用来监控和分析系统的性能。我们会用到这个包的两个命令 mpstat 和 pidstat。
    1. mpstat 是一个常用的多核 CPU 性能分析工具,用来实时查看每个 CPU 的性能指标,以及所有 CPU 的平均指标。
    2. pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。
  3. 找出根源的方法:
    1. 执行命令 watch -d uptime 如果平均负载的值远远高于cpu的个数
    2. 执行命令 mpstat -P ALL 5 1-----查找平均负载升高的原因
      1. 如果用户空间的cpu使用率非常高,接近或者达到100%,iowait 的值较低
        1. 执行命令 pidstat -u 5 1观察%wait 列,出现大量进程数值非常高-----判断为大量进程否则为CPU 密集型进程
      2. 如果系统cpu使用率高,iowait的值非常高------判断为I/O密集型进程
  4. 解决问题:
    1. 执行命令 pidstat -u 5 1 根据问题类型找到相应的进程
    2. 结合该进程的日志信息,分析问题

留言

您的邮箱地址不会被公开。 必填项已用 * 标注