当系统响应缓慢时,一般会用top或uptime命令查看系统负载是否过高。 例如输入uptime命令显示如下图,其中23:47:19表示现在的时间,up 260 days,14:39表示系统运行了多久,1 user表示当前登录用户数,最重要的是 load average,有三个数值,分别表示过去1分钟、5分钟、15分钟系统的负载。系统负载的英文解释为:

System load averages is the average number of processes that are either in a runnable or uninterruptable state. A process in a runnable state is either using the CPU or waiting to use the CPU. A
process in uninterruptable state is waiting for some I/O access, eg waiting for disk. The averages are taken over the three time intervals. Load averages are not normalized for the number of
CPUs in a system, so a load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.

系统负载表示每分钟处于可运行状态(运行态和就绪态)以及不可中断状态(等待io)的进程数目,且没有做归一化处理。

图1 uptime命令显示图

当平均负载等于CPU核数时是比较合理的状态,不会存在进程等待且也不会有CPU空闲浪费,查看CPU核数的命令如下:

grep 'model name'  /proc/cpuinfo | wc -l

uptime命令过去1分钟,5分钟,15分钟的负载隐含了系统负载的变化趋势,假如这三个指标的值差不多,说明系统比较稳定,假如过去1分钟的负载比过去15分钟大很多,说明系统负载在增加,反之,则说明负载在减小。

平均负载和CPU使用率不是一个概念,平均负载高不能说明CPU使用率高,因为平均负载除了包括正在使用CPU的进程,还包括在等待CPU的进程和等待io的进程。

CPU使用率表示单位时间CPU的利用情况,CPU使用率和平均负载的关系有三个场景:

  1. CPU密集型进程,大量使用CPU会使CPU利用率和平均负载都增高。
  2. IO密集型进程,会使平均负载增高但CPU使用率不一定会增高。
  3. 大量等待CPU的进程调度会使平均负载增高,CPU使用率也会增高

可使用stress模拟这三种情况,stress为linux下的压测工具,并用mpstat和pidstat查看根源,mpstat显示CPU的使用情况,pidstat监视linux任务的统计信息,安装如下:

yum install stress sysstat

stress命令常用参数如下:

-c, --cpu N
    spawn N workers spinning on sqrt()

-i, --io N
    spawn N workers spinning on sync()

-t, --timeout N
    timeout after N seconds

1.用stress模拟CPU密集型进程

用uptime查看负载

用mpstat查看CPU使用情况,如下,其中-P的含义为

-P { cpu [,...] | ON | ALL }
  Indicate the processor number for which statistics are to be reported. cpu is the processor number. Note that processor 0 is the first processor. The ON keyword indicates that statistics
are to be reported for every online processor, whereas the ALL keyword indicates that statistics are to be reported for all processors.表示显示哪个处理器的使用情况. 5表示统计间隔为5s

可以看到CPU使用率很高,pidstat查看具体占用CPU的进程,进程stress占的CPU达到99%,-u的含义为Report CPU utilization,5表示间隔5秒,1表示输出一组数据就停止,假如不加1,则会一直输出。

2.stress模拟io密集型进程

uptime查看负载,可以看到负载已经很高(单核CPU)

mpstat查看负载升高原因,可以看到CPU0的iowait高达88.31%,说明CPU有大量的时间在等待磁盘io,负载是由io进程导致,iowait含义:%iowait
Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.

定位具体的进程,可以看到是stress-ng-hdd,wait含义

Percentage of CPU spent by the task while waiting to run.

3.stress模拟大量进程场景

uptime查看负载

mpstat可以看到CPU利用率已经很高

pidstat查看每个进程的CPU使用情况,四个stress进程均在有较高的百分比在等待CPU(%wait)

当uptime负载较高时,可能是CPU使用率较高,也可能是io进程较多,可以用mpstat查看CPU使用情况,并用pidstat查看定位具体进程

linux平均负载的理解及原因排查的更多相关文章

  1. linux 平均负载 load average 的含义【转】

    文章来源: linux 平均负载 load average 的含义 load average 的含义 平均负载(load average)是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数 ...

  2. Linux性能调优 | 01 平均负载的理解和分析

    01 uptime命令 通常我们发现系统变慢时,我们都会执行top或者uptime命令,来查看当前系统的负载情况,比如像下面,我执行了uptime,系统返回的了结果. [root@lincoding ...

  3. linux 平均负载 load average 的含义

      load average 的含义 平均负载(load average)是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数. 以路况为例, 单核CPU.单车道 情况如下: 0.00-1. ...

  4. Linux系统中到底应该怎么理解系统的平均负载

    02 | 基础篇:到底应该怎么理解“平均负载”? 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 upt ...

  5. 1 理解Linux系统的“平均负载”

    什么是平均负载 我们知道使用top或uptime可以用来了解系统的负载情况. uptime 2 02:34:03 up 2 days, 20:14, 1 user, load average: 0.6 ...

  6. Linux性能优化实战:到底应该怎样理解平均负载(02)

    一.平均负载与CPU使用率并没有直接关系 1.平均负载 单位时间内,系统处于可运行状态和不可终端状态的平均进程数也就是平均活跃进程数,它和cpu使用率并没有直接关系, 可运行状态: 正在使用的cpu或 ...

  7. 理解 Linux 的平均负载和性能监控

      在本文中,我们将解释 Linux 系统中最关键的管理任务之一——关于系统 / CPU 的负载load和平均负载Load average的性能监控. 首先来看所有的类 UNIX 系统中两个重要的表述 ...

  8. linux之平均负载(学习笔记非原创)

    什么是平均负载 [root@111 ~]# uptime 11:03:33 up 149 days, 17:34, 1 user, load average: 0.08, 0.05, 0.01 最后三 ...

  9. 理解 uptime 的:“平均负载”? 如何模拟测试

    每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果. [root@ ...

随机推荐

  1. 如何安装ubuntu系统

    https://www.cnblogs.com/Chinasf/archive/2010/05/06/1728840.html    [Ubuntu 下挂ISO到虚拟光驱的方法] 各种方法参考如下论坛 ...

  2. Python h5py

    1.关于安装: 如果你使用的是Anaconda的话,安装命令如下: conda install h5py 如果没有,安装命令如下: pip install h5py 2.核心概念 读取HDF5文件,假 ...

  3. Exp3 免杀原理与实践_05齐帅

    Exp3 免杀原理与实践 20154305_齐帅 想要弄懂免杀,一定得先把基础问题弄明白啊~~ 一.基础问题回答 (1)杀软是如何检测出恶意代码的? - -检测特征码: 依靠分析总结出计算机病毒中常出 ...

  4. 多线程.Thread.Sleep方法

    多线程执行中,调用Thread.Sleep()方法 分情况: 1. 单核的情况下 是把当前正在工作的主线程停止(也就是从把线程变成非工作线程). 其他需要工作的线程来争夺CPU这个闲下来的核.谁争夺到 ...

  5. webstorm验证码

    2017-2-16 亲测可用 http://idea.imsxm.com/ webstorm10 注册码 User or company Name: EMBRACE ===== LICENSE KEY ...

  6. POJ1964-City Game

    给你N×M大的矩阵,里面分别有字符‘F'和’R',要找到一个最大的只有‘F'的矩阵,不能包含有’R‘.N,M<=1000. 一开始的思路是单调栈来求最大矩形面积,因为没看清题目不能包含’R'字符 ...

  7. let,const,var

    1.const定义的变量不可以修改,而且必须初始化. 1 const b = 2;//正确 2 // const b;//错误,必须初始化 3 console.log('函数外const定义b:' + ...

  8. 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)

    [.NET Core项目实战-统一认证平台]开篇及目录索引 本篇将介绍如何扩展Ocelot中间件实现自定义网关,并使用2种不同数据库来演示Ocelot配置信息存储和动态更新功能,内容也是从实际设计出发 ...

  9. 包建强的培训课程(15):Android App热修复技术

    @import url(/css/cuteeditor.css); Normal 0 10 pt 0 2 false false false EN-US ZH-CN X-NONE $([{£¥·‘“〈 ...

  10. Java的BIO,NIO和AIO的区别于演进

    作者:公众号:我是攻城师 前言 Java里面的IO模型种类较多,主要包括BIO,NIO和AIO,每个IO模型都有不一样的地方,那么这些IO模型是如何演变呢,底层的原理又是怎样的呢? 本文我们就来聊聊. ...