在本文中,我们将解释 Linux 系统中最关键的管理任务之一——关于系统 / CPU 的负载load和平均负载Load average的性能监控。

首先来看所有的类 UNIX 系统中两个重要的表述:

  • 系统负载 / CPU 负载 – 衡量 Linux 系统的 CPU 过载或利用率低的指标,即处于运算状态或等待状态的 CPU 核心数。
  • 平均负载 – 通过固定的时间周期如 1、5、15 分钟计算出的平均的系统负载。

Linux 中,平均负载一般指在内核运行队列中被标记为运行或不可打断状态的进程的平均数。

注意:

  • 几乎没有 Linux 或类 Unix 系统不为用户展示平均负载的值。
  • 完全空闲的 Linux 系统平均负载为 0,不包括空闲进程。
  • 绝大多数类 Unix 系统只统计运行和等待状态的进程。但是在 Linux 中,平均负载也包括处于不可打断的睡眠状态的进程——它们是在等待其它系统资源如磁盘 I/O 等的进程。

如何监测 Linux 系统平均负载

有诸多方式监测系统平均负载,如 uptime,它会展示系统运行时间、用户数量及平均负载:

  1. $ uptime
  2. 07:13:53 up 8 days, 19 min, 1 user, load average: 1.98, 2.15, 2.21

平均负载的数字从左到右的含义依次为:

  • 最近 1 分钟的平均负载为 1.98
  • 最近 5 分钟的平均负载为 2.15
  • 最近 15 分钟的平均负载为 2.21

高平均负载意味着系统是过载的:许多进程在等待 CPU 时间。

下一节将介绍平均负载和 CPU 核数的关系。此外,常用的工具 top 和 glances 可以实时显示 Linux 系统的运行状态:

Top命令

  1. $ top

显示运行中的Linux进程:

  1. top - 12:51:42 up 2:11, 1 user, load average: 1.22, 1.12, 1.26
  2. Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie
  3. %Cpu(s): 17.4 us, 2.9 sy, 0.3 ni, 74.8 id, 4.6 wa, 0.0 hi, 0.0 si, 0.0 st
  4. KiB Mem : 8069036 total, 388060 free, 4381184 used, 3299792 buff/cache
  5. KiB Swap: 3906556 total, 3901876 free, 4680 used. 2807464 avail Mem
  6. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  7. 6265 tecmint 20 0 1244348 170680 83616 S 13.3 2.1 6:47.72 Headset
  8. 2301 tecmint 9 -11 640332 13344 9932 S 6.7 0.2 2:18.96 pulseaudio
  9. 2459 tecmint 20 0 1707692 315628 62992 S 6.7 3.9 6:55.45 cinnamon
  10. 2957 tecmint 20 0 2644644 1.035g 137968 S 6.7 13.5 50:11.13 firefox
  11. 3208 tecmint 20 0 507060 52136 33152 S 6.7 0.6 0:04.34 gnome-terminal-
  12. 3272 tecmint 20 0 1521380 391324 178348 S 6.7 4.8 6:21.01 chrome
  13. 6220 tecmint 20 0 1595392 106964 76836 S 6.7 1.3 3:31.94 Headset
  14. 1 root 20 0 120056 6204 3964 S 0.0 0.1 0:01.83 systemd
  15. 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
  16. 3 root 20 0 0 0 0 S 0.0 0.0 0:00.10 ksoftirqd/0
  17. 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H
  18. ....

Glances 工具

  1. $ glances

Glances – Linux系统监测工具:

  1. TecMint (LinuxMint 18 64bit / Linux 4.4.0-21-generic) Uptime: 2:16:06
  2. CPU 16.4% nice: 0.1% LOAD 4-core MEM 60.5% active: 4.90G SWAP 0.1%
  3. user: 10.2% irq: 0.0% 1 min: 1.20 total: 7.70G inactive: 2.07G total: 3.73G
  4. system: 3.4% iowait: 2.7% 5 min: 1.16 used: 4.66G buffers: 242M used: 4.57M
  5. idle: 83.6% steal: 0.0% 15 min: 1.24 free: 3.04G cached: 2.58G free: 3.72G
  6. NETWORK Rx/s Tx/s TASKS 253 (883 thr), 1 run, 252 slp, 0 oth sorted automatically by cpu_percent, flat view
  7. enp1s0 525Kb 31Kb
  8. lo 2Kb 2Kb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Command
  9. wlp2s0 0b 0b 14.6 13.3 2.53G 1.03G 2957 tecmint 0 S 51:49.10 0 40K /usr/lib/firefox/firefox
  10. 7.4 2.2 1.16G 176M 6265 tecmint 0 S 7:08.18 0 0 /usr/lib/Headset/Headset --type=renderer --no-sandbox --primordial-pipe-token=879B36514C6BEDB183D3E4142774D1DF --lan
  11. DISK I/O R/s W/s 4.9 3.9 1.63G 310M 2459 tecmint 0 R 7:12.18 0 0 cinnamon --replace
  12. ram0 0 0 4.2 0.2 625M 13.0M 2301 tecmint -11 S 2:29.72 0 0 /usr/bin/pulseaudio --start --log-target=syslog
  13. ram1 0 0 4.2 1.3 1.52G 105M 6220 tecmint 0 S 3:42.64 0 0 /usr/lib/Headset/Headset
  14. ram10 0 0 2.9 0.8 409M 66.7M 6240 tecmint 0 S 2:40.44 0 0 /usr/lib/Headset/Headset --type=gpu-process --no-sandbox --supports-dual-gpus=false --gpu-driver-bug-workarounds=7,2
  15. ram11 0 0 2.9 1.8 531M 142M 1690 root 0 S 6:03.79 0 0 /usr/lib/xorg/Xorg :0 -audit 0 -auth /var/lib/mdm/:0.Xauth -nolisten tcp vt8
  16. ram12 0 0 2.6 0.3 79.3M 23.8M 9651 tecmint 0 R 0:00.71 0 0 /usr/bin/python3 /usr/bin/glances
  17. ram13 0 0 1.6 4.8 1.45G 382M 3272 tecmint 0 S 6:25.30 0 4K /opt/google/chrome/chrome
  18. ...

这些工具中的平均负载是从 /proc/loadavg 文件中读取的,也可以直接使用 cat 命令查看:

  1. $ cat /proc/loadavg
  2. 2.48 1.69 1.42 5/889 10570

想要图形样式监测平均负载,请戳:ttyload – 终端中颜色编码图形显示 Linux 平均负载

在桌面计算机中,可以使用图形用户接口工具查看系统平均负载。

理解系统平均负载和 CPU 核心数的关系

考虑了 CPU 核心数的影响,才能解释系统负载。

多处理器 Vs 多核处理器

  • 多处理器 – 一个计算机系统中集成两个或多个物理 CPU
  • 多核处理器 – 单个物理 CPU 有两个或多个单独的核并行工作(也叫处理单元)。双核意味着有两个处理单元,4 核有 4 个处理单元,以此类推。

此外,Intel 引入了超线程技术用来提高并行计算能力。

通过超线程技术,在操作系统中,单个物理 CPU 表现的和两个逻辑 CPU 一样。(实际在硬件上只有一个 CPU)。

注意,单个 CPU 核同一时间只能执行一个任务,于是产生了多 CPU/处理器、多核 CPU,以及多线程技术。

多 CPU 时,多个程序可以同时执行。如今的 Intel CPU 使用了多核心和超线程技术。

可以使用 nproc 或 lscpu 命令查看系统中的处理器单元数量。

  1. $ nproc
  2. 4
  3. # 或者
  4. lscpu

也可以使用 grep 命令

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

为了进一步理解系统负载,需要做一些假设。假设系统负载如下:

  1. 23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35

在单核系统中意味着:

  • CPU 被充分利用(100%);最近的 1 分钟有 1 个进程在运行。
  • CPU 有 60% 处于空闲状态;在最近的 5 分钟没有进程等待 CPU 时间。
  • CPU 平均过载了 235%;最近的 15 分钟平均有 2.35 个进程在等待 CPU 时间。

在双核系统中意味着:

  • 有一个 CPU 处于完全空闲状态,另一个 CPU 被使用;最近的 1 分钟没有进程等待 CPU 时间。
  • CPU 平均 160% 处于空闲状态;最近的 5 分钟没有进程等待 CPU 时间。
  • CPU 平均过载了 135%;最近的 15 分钟有 1.35 个进程等待 CPU 时间。

理解 Linux 的平均负载和性能监控的更多相关文章

  1. 怎么理解linux的平均负载及平均负载高后的排查工具

    什么是平均负载 平均负载可以对于我们来说及熟悉又陌生,但我们问平均负载是什么,但大部分人都回答说平均负载不就是单位时间内CPU使用率吗?其实并不是这样的,如果可以的话,可以 man uptime 来了 ...

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

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

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

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

  4. [进程管理] 理解 Linux 的处理器负载均值

    原文链接: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages http://www.gracecode. ...

  5. Linux、Windows如何进行性能监控与调优

    1.Linux命令行工具 推荐:CentOS 7 1.1 top命令 top命令的输出如下: top命令的输出可以分为两部分:前半部分是系统统计信息,后半部分是进程信息.在统计信息中, 第1行是任务队 ...

  6. 理解 Linux 的处理器负载均值

    原文链接: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages 你可能对于 Linux 的负载均值(loa ...

  7. [转]理解Linux的处理器负载均值

    [转自]http://www.mike.org.cn/articles/understanding-of-linux-processor-load-average/ 你可能对于Linux的负载均值(l ...

  8. linux系统平均负载高(load average)

    系统平均负载高(load average) 问题现象 两个案例都是:系统平均负载高,但cpu,内存,磁盘io都正常 什么是系统平均负载 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进 ...

  9. Linux下的java虚拟机性能监控与故障处理命令

    java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用. 1.jstack 该命令用于生成当前时刻虚拟机的线程快 ...

随机推荐

  1. 使用python遍历文件夹取出特定的字符串

    # -*- coding: utf-8 -* import re import os # 需要处理的文件夹路径(绝对路径) path = u"/Users/a140/Downloads/te ...

  2. ELK构建MySQL慢日志收集平台详解

    上篇文章<中小团队快速构建SQL自动审核系统>我们完成了SQL的自动审核与执行,不仅提高了效率还受到了同事的肯定,心里美滋滋.但关于慢查询的收集及处理也耗费了我们太多的时间和精力,如何在这 ...

  3. C#语法之委托和事件

    从大学就开始做C#这块,也做C#几年了,最近又从ios转回.Net,继续做C#,之前也没有写博客的习惯,写博客也是从我做ios的时候开始的,现在既然又做回了.net,那就写点关于.Net的博客,可能在 ...

  4. [有料组每日学习分享计划--00087]32行代码帮你导出IOS酷我音乐下载的无损音乐

    需求与研究: 1.IOS的酷我音乐软件,还是不错滴,可以直接下载APE或是320K的MP3音乐,但是我发现PC上的酷我反而没这个功能,而且其他的音乐软件一般只能下载中低品质的音乐.所以能够从IOS中找 ...

  5. MVC中页面传值方式总结

    MVC中的页面传值,通常指Controller和view之间的数据传递,经常用到的有几种方式,总结如下: 一.Controller----------->View(控制器传到视图) 1.View ...

  6. PHP 集成开发环境比较

    专注了这么些年技术,没有养成记录和积累的习惯.如今乐于开源和分享经验,却停笔踌躇,不知该从何处说起.开通博客也有一段时间了,也没能写出一篇像样的文章,其实这篇文章也是被我拉壮丁似的用来练手的.思前想后 ...

  7. mysql replace语句

    语法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 REPLACE [LOW_PRIORITY | DELAYED]     [INTO] tbl_name     [ ...

  8. Python__组合数据类型

    组合数据:集合类型.序列类型(元组类型.列表类型).字典类型 集合: 定义:集合是多个元素的无序组合.(无序,唯一,Python中要求放入集合中的数据类型是不可变的). 集合用大括号 {}表示,元素间 ...

  9. Springboot --- Spring Security (一)

      文章部分图片来自参考资料 问题 : Spring Security 内部实现的原理是什么 概述 Spring Security 是个安全框架,可以提供认证,防止网络功能等功能,可以结合 sprin ...

  10. T-SQL学习的笔记,以备查阅

    create database MyDatabseOne; --创建数据库 drop database MydatabaseOne; --删除数据库; --如果直接点"执行"将是执 ...