Linux系统cpu负载浅析

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_34258344/article/details/102584504

cpu负载就是cpu在一段时间内正在处理以及等待cpu处理的进程数之和的统计信息,也就是cpu使用队列的长度统计信息,这个数字越小越好。

维基百科关于系统负载的解释:
the system Load is a measure of the amount of work that a compute system is doing。

负载最具代表的是CPU负载I/O负载

有一类程序不会频繁地从磁盘输入输出,但是处理完成需要相当长的时间。因为该程序主要被用来做计算、逻辑判断等处理,所以程序的处理速度主要依赖于cpu的计算速度。此类cpu负载的程序称为“计算密集型程序”。

有一类程序主要从磁盘保存的大量数据中搜索找出任意文件。这种搜索程序的处理速度并不依赖于cpu,而是依赖于磁盘的读取速度,也就是输入输出(input/output,I/O)。磁盘越快,检索花费的时间就越短。此类I/O负载的程序称为“I/O密集型程序”。

当我们的电脑使用固态硬盘的时候,会发现启动系统和启动应用程序速度比传统的机械硬盘快,就是因为程序读写很快,cpu减少了等待I/O的时间。

我们同时运行多个程序,这些运行中的程序就是进程。当系统有只一个cpu核心的时候,从微观上看,同一时刻只有一个进程在执行,当这个程序是计算密集型程序时,在它的时间片内独占cpu进行疯狂运算,时间片到期后换下一个进程执行,当这个程序是I/O密集型程序时,在它的时间片内独占cpu,cpu可能空闲,等待I/O读取数据,这就造成了cpu资源浪费。

在Linux系统中,进程一般有5种状态:

状态 说明
就绪态(running) 进程可以运行(包括正在运行和等待运行的进程)
浅度睡眠(interruptible) 收到信号或资源到位后被唤醒
深度睡眠(uninterruptible) 一般收到信号不可被唤醒,资源到位后被唤醒
暂停态(runnable) 进程暂停执行
僵死态(zombie) 进程执行结束,但尚未消亡

只有进程处于就绪态(running)和浅度睡眠状态(interruptible)才会被加入到负载等待进程中,也就是下面这两种情况的进程才会表现为负载的值:

  • 需要立即使用CPU,也还需等待其他进程用完CPU
  • 需要继续处理,也必须等待磁盘输入输出完成才能进行

Load Average 就是一段时间(1分钟、5分钟、15分钟)内平均Load,把cpu比喻成一架桥来理解一下Load Average:

系统负荷为0,意味着大桥上一辆车也没有。
系统负荷为0.5,意味着大桥一半的路段有车。
系统负荷为1.0,意味着大桥的所有路段都有车,也就是说大桥已经"满"了。但是必须注意的是,直到此时大桥还是能顺畅通行的。
系统负荷为1.7,意味着车辆太多了,大桥已经被占满了(100%),后面等着上桥的车辆为桥面车辆的70%。以此类推,系统负荷2.0,意味着等待上桥的车辆与桥面的车辆一样多;系统负荷3.0,意味着等待上桥的车辆是桥面车辆的2倍。总之,当系统负荷大于1,后面的车辆就必须等待了;系统负荷越大,过桥就必须等得越久。

CPU的系统负荷,基本上等同于上面的类比。大桥的通行能力,就是CPU的最大工作量;桥梁上的车辆,就是一个个等待CPU处理的进程(process)。如果CPU每分钟最多处理100个进程,那么系统负荷0.2,意味着CPU在这1分钟里只处理20个进程;系统负荷1.0,意味着CPU在这1分钟里正好处理100个进程;系统负荷1.7,意味着除了CPU正在处理的100个进程以外,还有70个进程正排队等着CPU处理。

使用如下命令可以查看系统负载情况:

top

在这里插入图片描述
下面逐一来解释:

top - 14:13:09 up  3:27,  4 users,  load average: 0.00, 0.00, 0.00
任务: 304 total,   1 running, 227 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.1 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2017124 total,    81684 free,  1324148 used,   611292 buff/cache
KiB Swap:   969960 total,   954588 free,    15372 used.   504452 avail Mem 

进程 USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                                                                    
  3668 ljr       20   0   51384   4192   3376 R   1.0  0.2   0:04.18 top                                                                       
  3699 ljr       20   0   51356   4236   3448 S   0.7  0.2   0:00.30 top                                                                       
  1768 ljr       20   0 3616496 179840  79644 S   0.3  8.9   0:19.58 gnome-shell                                                               
  3616 ljr       20   0  822184  43500  32980 S   0.3  2.2   0:01.04 gnome-terminal-                                                           

第一行:概述信息

数据 含义
top - 14:13:09 表示系统当前时间
up 3:27 表示系统已经运行时间
4 users 当前登录的用户数
load average: 0.00, 0.00, 0.00 分别表示内核任务队列在1分钟、5分钟、15分钟的长度,也就是通常我们说的负载。

第二行:任务信息

数据 含义
任务: 304 total 当前系统的进程总数
1 running 当前系统中有1个正在运行的进程
227 sleeping 当前系统中有227个休眠的进程
0 stopped 停止进程数为0
0 zombie 僵死进程数为0

第三行:cpu信息

%Cpu(s) 含义
0.1 us 用户空间进程占用CPU时间的百分比
0.2 sy 内核空间进程占用CPU时间的百分比
0.0 ni ni表示nice的意思,也就是哪些用户进程被提升优先级之后,占用的CPU运行时间
99.7 id 系统空闲时间
0.0 wa CPU在等待I/O的时间
0.0 hi CPU处理软中断(soft interrupt)的时间百分比
0.0 si CPU处理硬中断(hard interrupt)的时间百分比
0.0 st 表示在有虚拟机的时候,被虚拟机占用的CPU时间。st表示窃取的意思,steal的意思

第三行:内存使用信息

KiB Mem 含义
2017124 total 系统可用的物理内存总量
81684 free 当前的空闲内存总量
1324148 used 当前已经使用的物理内存总量
611292 buff/cache 用作系统内核缓存的物理内存总量

第四行:被缓冲的交换区总量

KiB Mem 含义
969960 total 系统全部的交换区总量
954588 free 空闲的交换区总量
15372 used 当前已经使用的交换区总量
504452 avail Mem 被缓冲的交换区总量

第五行:进程信息

字段 含义
PID 进程ID
USER 当前进程的用户
PR 进程执行优先级
NI 当前进程的NICE值,nice值可以调整进程运行的优先级
VIRT 当前进程对虚拟内存使用量
RES 当前进程的物理内存使用量
SHR 当前进程的共享内存使用量
S 当前进程的状态,可以是R= 正在运行状态,S=休眠状态,D=不可中断的睡眠状态,T=跟踪/停止,Z=僵尸进程
%CPU 当前进程使用CPU的百分比
%MEM 当前进程使用内存的百分比
TIME+ 当前进程的累计CPU占用时间
COMMAND 当前进程的命令行

top是我们常见的查看系统负载的工具,除此之外,我们还可以用以下工具查看和分析系统负载:

工具 描述
uptime 平均负载
vmstat 包括系统范围的cpu平均负载
mpstat 查看所有cpu核信息
top 监控每个cpu用量
sar -u 查看cpu信息
pidstat 每个进程cpu用量分解
perf cpu剖析与跟踪,性能计数分析

perf可以跟踪到进程内部具体函数耗时情况,可以指定内核函数进行统计,用法可参考帮助信息:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_34258344/article/details/102584504