Linux 的平均负载和性能监控

Linux 系统中最关键的管理任务之一——关于系统 / CPU 的负载和平均负载的性能监控。 首先来看所有的类 UNIX 系统中两个重要的表述: * 系统负载 / CPU 负载 – 衡量 Linux 系统的 CPU 过载或利用率低的指标,即处于运算状态或等待状态的 CPU 核心数。 * 平均负载 – 通过固定的时间周期如 1、5、15 分钟计算出的平均的系统负载。 Linux 中,平均负载一般指在内核运行队列中被标记为运行或不可打断状态的进程的平均数。 注意: * 几乎没有 Linux 或类 Unix 系统不为用户展示平均负载的值。 * 完全空闲的 Linux 系统平均负载为 0,不包括空闲进程。 * 绝大多数类 Unix 系统只统计运行和等待状态的进程。但是在 Linux 中,平均负载也包括处于不可打断的睡眠状态的进程——它们是在等待其它系统资源如磁盘 I/O 等的进程。 ### 如何监测 Linux 系统平均负载 有诸多方式监测系统平均负载,如 uptime,它会展示系统运行时间、用户数量及平均负载: $ uptime 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命令 $ top 显示运行中的Linux进程: top - 12:51:42 up 2:11, 1 user, load average: 1.22, 1.12, 1.26 Tasks: 243 total, 1 running, 242 sleeping, 0 stopped, 0 zombie %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 KiB Mem : 8069036 total, 388060 free, 4381184 used, 3299792 buff/cache KiB Swap: 3906556 total, 3901876 free, 4680 used. 2807464 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6265 tecmint 20 0 1244348 170680 83616 S 13.3 2.1 6:47.72 Headset 2301 tecmint 9 -11 640332 13344 9932 S 6.7 0.2 2:18.96 pulseaudio .... #### Glances 工具 $ glances Glances – Linux系统监测工具: TecMint (LinuxMint 18 64bit / Linux 4.4.0-21-generic) Uptime: 2:16:06 CPU 16.4% nice: 0.1% LOAD 4-core MEM 60.5% active: 4.90G SWAP 0.1% user: 10.2% irq: 0.0% 1 min: 1.20 total: 7.70G inactive: 2.07G total: 3.73G system: 3.4% iowait: 2.7% 5 min: 1.16 used: 4.66G buffers: 242M used: 4.57M ... 这些工具中的平均负载是从 /proc/loadavg 文件中读取的,也可以直接使用 cat 命令查看: $ cat /proc/loadavg 2.48 1.69 1.42 5/889 10570 在桌面计算机中,可以使用图形用户接口工具查看系统平均负载。 ### 理解系统平均负载和 CPU 核心数的关系 考虑了 CPU 核心数的影响,才能解释系统负载。 #### 多处理器 Vs 多核处理器 * 多处理器 – 一个计算机系统中集成两个或多个物理 CPU * 多核处理器 – 单个物理 CPU 有两个或多个单独的核并行工作(也叫处理单元)。双核意味着有两个处理单元,4 核有 4 个处理单元,以此类推。 此外,Intel 引入了超线程技术用来提高并行计算能力。 通过超线程技术,在操作系统中,单个物理 CPU 表现的和两个逻辑 CPU 一样。(实际在硬件上只有一个 CPU)。 注意,单个 CPU 核同一时间只能执行一个任务,于是产生了多 CPU/处理器、多核 CPU,以及多线程技术。 多 CPU 时,多个程序可以同时执行。如今的 Intel CPU 使用了多核心和超线程技术。 可以使用 nproc 或 lscpu 命令查看系统中的处理器单元数量。 $ nproc 4 # 或者 lscpu 也可以使用 grep 命令: $ grep 'model name' /proc/cpuinfo | wc -l 4 为了进一步理解系统负载,需要做一些假设。假设系统负载如下: 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 时间。 总而言之,如果你是系统管理员,你应该关注高的平均负载。平均负载高于 CPU 核心数意味着需要增加 CPU,反之则意味着 CPU 未被充分利用。
联系我们

邮箱 626512443@qq.com
电话 18611320371(微信)
QQ群 235681453

Copyright © 2015-2022

备案号:京ICP备15003423号-3