理解 Linux 的平均负载和性能监控
在本文中,我们将解释 Linux 系统中最关键的管理任务之一——关于系统 / CPU 的负载load和平均负载Load average的性能监控。
首先来看所有的类 UNIX 系统中两个重要的表述:
- 系统负载 / CPU 负载 – 衡量 Linux 系统的 CPU 过载或利用率低的指标,即处于运算状态或等待状态的 CPU 核心数。
- 平均负载 – 通过固定的时间周期如 1、5、15 分钟计算出的平均的系统负载。
Linux 中,平均负载一般指在内核运行队列中被标记为运行或不可打断状态的进程的平均数。
注意:
- 几乎没有 Linux 或类 Unix 系统不为用户展示平均负载的值。
- 完全空闲的 Linux 系统平均负载为 0,不包括空闲进程。
- 绝大多数类 Unix 系统只统计运行和等待状态的进程。但是在 Linux 中,平均负载也包括处于不可打断的睡眠状态的进程——它们是在等待其它系统资源如磁盘 I/O 等的进程。
如何监测 Linux 系统平均负载
有诸多方式监测系统平均负载,如 uptime,它会展示系统运行时间、用户数量及平均负载:
$ uptime07: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.26Tasks: 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 stKiB Mem : 8069036 total, 388060 free, 4381184 used, 3299792 buff/cacheKiB Swap: 3906556 total, 3901876 free, 4680 used. 2807464 avail MemPID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND6265 tecmint 20 0 1244348 170680 83616 S 13.3 2.1 6:47.72 Headset2301 tecmint 9 -11 640332 13344 9932 S 6.7 0.2 2:18.96 pulseaudio2459 tecmint 20 0 1707692 315628 62992 S 6.7 3.9 6:55.45 cinnamon2957 tecmint 20 0 2644644 1.035g 137968 S 6.7 13.5 50:11.13 firefox3208 tecmint 20 0 507060 52136 33152 S 6.7 0.6 0:04.34 gnome-terminal-3272 tecmint 20 0 1521380 391324 178348 S 6.7 4.8 6:21.01 chrome6220 tecmint 20 0 1595392 106964 76836 S 6.7 1.3 3:31.94 Headset1 root 20 0 120056 6204 3964 S 0.0 0.1 0:01.83 systemd2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd3 root 20 0 0 0 0 S 0.0 0.0 0:00.10 ksoftirqd/05 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H....
Glances 工具
$ glances
Glances – Linux系统监测工具:
TecMint (LinuxMint 18 64bit / Linux 4.4.0-21-generic) Uptime: 2:16:06CPU 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.73Gsystem: 3.4% iowait: 2.7% 5 min: 1.16 used: 4.66G buffers: 242M used: 4.57Midle: 83.6% steal: 0.0% 15 min: 1.24 free: 3.04G cached: 2.58G free: 3.72GNETWORK Rx/s Tx/s TASKS 253 (883 thr), 1 run, 252 slp, 0 oth sorted automatically by cpu_percent, flat viewenp1s0 525Kb 31Kblo 2Kb 2Kb CPU% MEM% VIRT RES PID USER NI S TIME+ IOR/s IOW/s Commandwlp2s0 0b 0b 14.6 13.3 2.53G 1.03G 2957 tecmint 0 S 51:49.10 0 40K /usr/lib/firefox/firefox7.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 --lanDISK I/O R/s W/s 4.9 3.9 1.63G 310M 2459 tecmint 0 R 7:12.18 0 0 cinnamon --replaceram0 0 0 4.2 0.2 625M 13.0M 2301 tecmint -11 S 2:29.72 0 0 /usr/bin/pulseaudio --start --log-target=syslogram1 0 0 4.2 1.3 1.52G 105M 6220 tecmint 0 S 3:42.64 0 0 /usr/lib/Headset/Headsetram10 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,2ram11 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 vt8ram12 0 0 2.6 0.3 79.3M 23.8M 9651 tecmint 0 R 0:00.71 0 0 /usr/bin/python3 /usr/bin/glancesram13 0 0 1.6 4.8 1.45G 382M 3272 tecmint 0 S 6:25.30 0 4K /opt/google/chrome/chrome...
这些工具中的平均负载是从 /proc/loadavg 文件中读取的,也可以直接使用 cat 命令查看:
$ cat /proc/loadavg2.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 命令查看系统中的处理器单元数量。
$ nproc4# 或者lscpu
也可以使用 grep 命令:
$ grep 'model name' /proc/cpuinfo | wc -l4
为了进一步理解系统负载,需要做一些假设。假设系统负载如下:
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 的平均负载和性能监控的更多相关文章
- 怎么理解linux的平均负载及平均负载高后的排查工具
什么是平均负载 平均负载可以对于我们来说及熟悉又陌生,但我们问平均负载是什么,但大部分人都回答说平均负载不就是单位时间内CPU使用率吗?其实并不是这样的,如果可以的话,可以 man uptime 来了 ...
- Linux系统中到底应该怎么理解系统的平均负载
02 | 基础篇:到底应该怎么理解“平均负载”? 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 upt ...
- linux之平均负载(学习笔记非原创)
什么是平均负载 [root@111 ~]# uptime 11:03:33 up 149 days, 17:34, 1 user, load average: 0.08, 0.05, 0.01 最后三 ...
- [进程管理] 理解 Linux 的处理器负载均值
原文链接: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages http://www.gracecode. ...
- Linux、Windows如何进行性能监控与调优
1.Linux命令行工具 推荐:CentOS 7 1.1 top命令 top命令的输出如下: top命令的输出可以分为两部分:前半部分是系统统计信息,后半部分是进程信息.在统计信息中, 第1行是任务队 ...
- 理解 Linux 的处理器负载均值
原文链接: http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages 你可能对于 Linux 的负载均值(loa ...
- [转]理解Linux的处理器负载均值
[转自]http://www.mike.org.cn/articles/understanding-of-linux-processor-load-average/ 你可能对于Linux的负载均值(l ...
- linux系统平均负载高(load average)
系统平均负载高(load average) 问题现象 两个案例都是:系统平均负载高,但cpu,内存,磁盘io都正常 什么是系统平均负载 平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进 ...
- Linux下的java虚拟机性能监控与故障处理命令
java包中提供了很多监控JVM的工具类,作为java程序员必须得掌握常用的几个工具,下面是几个常用的JVM性能监控与故障处理工具的介绍与使用. 1.jstack 该命令用于生成当前时刻虚拟机的线程快 ...
随机推荐
- 恶性bug解决,Encoding 1252 data could not be found. Make sure you have correct international codeset assembly installed and enabled
百度是没有的,google了下 这句话的意思是编码1252没找到,确保程序及是国际化格式 发生在我使用unity读取xlsx文件,在编辑器运行正常,但是发布出来不正常,报错 解决方案: 链接:http ...
- R语言之数据处理常用包
dplyr包是Hadley Wickham的新作,主要用于数据清洗和整理,该包专注dataframe数据格式,从而大幅提高了数据处理速度,并且提供了与其它数据库的接口:tidyr包的作者是Hadley ...
- linux内核学习之保护模式(一)
来源:http://blog.csdn.net/yishuige/article/details/50434746 这一章涉及intel8086系列cpu的保护模式编程,应该是学习内核编程,驱动编程及 ...
- 《深入理解Java虚拟机》目录
第一部分 走进Java 第1章 走进Java 第二部分 自动内存管理机制 第2章 Java内存区域与内存溢出异常 2.2 运行时数据区域 2.3 HotSpot虚拟机对象探秘 第3章 垃圾收集器与 ...
- ZooKeeper:架构和算法
ZooKeeper主要用来解决分布式应用场景中存在的一些问题,如:统一命名服务.状态同步服务.集群管理.分布式应用配置管理等. 它支持Standalone模式和分布式模式,在分布式模式下,能够为分布式 ...
- 虚拟化明星——深挖轻量级容器docker
docker是一个轻量级容器,属于操作系统层面的虚拟化技术,封装了文件系统(AUFS)以及网络互联,进程隔离等特性. 传统虚拟化架构: docker虚拟化架构: 可以看出,docker是没有Guest ...
- IOC给程序带来的好处
IOC(inversion of control)的中文解释是“控制反转”或者“依赖注入”,它的实现目的是:我们可以通过配置文件来控制程序的流程,达到程序代码的优化.初学者往往弄不清楚为什么我们可以通 ...
- Keepalived配置与使用--转载
作者: JeremyWei | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://weizhifeng.net/using-keepalived.html 介绍 ...
- echarts 雷达图的个性化设置
echarts 雷达图的个性化设置 function test() { let myChart = echarts.init(document.getElementById('levelImage') ...
- 为 Nginx 创建 windows 服务自启动
1.下载最新版的 Windows Service Wrapper 程序 下载地址:http://download.java.net/maven/2/com/sun/winsw/winsw/1.9/ 2 ...