首页 > 其他分享 >系统负载介绍

系统负载介绍

时间:2023-03-18 22:31:31浏览次数:36  
标签:状态 负载 系统 介绍 running 进程 磁盘 等待

负载

负载就是cpu在一段时间内正在处理以及等待cpu处理的进程数之和的统计信息,也就是cpu使用队列的长度统计信息,这个数字越小越好(如果超过CPU核心*0.7就是不正常)

负载分为两大部分:CPU负载、IO负载

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

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

多任务操作系统

Linux操作系统能够同时处理几个不同名称的任务。但是同时运行多个任务的过程中,cpu和磁盘这些有限的硬件资源就需要被这些任务程序共享。即便很短的时间间隔内,需要一边在这些任务之间进行切换到一边进行处理,这就是多任务。

运行中的任务较少的情况下,系统并不是等待此类切换动作的发生。但是当任务增加时,例如任务A正在CPU上执行计算,接下来如果任务B和C也想进行计算,那么就需要等待CPU空闲。也就是说,即便是运行处理某任务,也要等到轮到他时才能运行,此类等待状态就表现为程序运行延迟。

top或htop输出中包含“load average”

系统负载介绍_等待状态

Load average从左边起依次是过去1分钟、5分钟、15分钟内,单位时间的等待任务数,也就是表示平均有多少任务正处于等待状态。在load average较高的情况下,这就说明等待运行的任务较多,因此轮到该任务运行的等待时间就会出现较大的延迟,即反映了此时负载较高。

进程调度

进程调度也被一些人称为cpu上下文切换意思是:CPU切换到另一个进程需要保存当前进程的状态并恢复另一个进程的状态:当前运行任务转为就绪(或者挂起、中断)状态,另一个被选定的就绪任务成为当前任务。进程调度包括保存当前任务的运行环境,恢复将要运行任务的运行环境。

在linux内核中,每一个进程都存在一个名为“进程描述符”的管理表。该进程描述符会调整为按照优先级降序排序,已按合理的顺序运行进程(任务)。这个调整即为进程调度器的工作。

调度器划分并管理进程的状态,如:

等待分配cpu资源的状态。 等待磁盘输入输出完毕的状态。 下面在说一下进程的状态区别:

系统负载介绍_键盘输入_02

下面举例来说明进程状态转变:

这里有三个进程A、B、C同时运行。首先,每个进程在生成后都是可运行状态,也就是running状态的开始,而不是现在运行状态,由于在linux内核中无法区别正在运行的状态和可运行的等待状态,下面将可运行状态和正在运行状态都称为running状态。

进程A:running 进程B:running 进程C:running running的三个进程立即成为调度对象。此时,假设调度器给进程A分配了CPU的运行权限。

进程A:running (正在运行) 进程B:running 进程C:running 进程A分配了CPU,所以进程A开始处理。进程B和C则在此等待进程A迁出CPU。假设进程A进行若干计算之后,需要从磁盘读取数据。那么在A发出读取磁盘数据的请求之后,到请求数据到达之前,将不进行任何工作。此状态称为“因等待I/O操作结束而被阻塞”。在I/O完成处理前,进程A就一直处于等待中,就会转为不可中断睡眠状态(uninterruptible),并不使用CPU。于是调度器查看进程B和进程C的优先级计算结果,将CPU运行权限交给优先级较高的一方。这里假设进程B的优先级高于进程C。

进程A:uninterruptible (等待磁盘输入输出/不可中断状态) 进程B:running (正在运行) 进程C:running 进程B刚开始运行,就需要等待用户的键盘输入。于是B进入等待用户键盘输入状态,同样被阻塞。结果就变成了进程A和进程B都是等待输出,运行进程C。这时进程A和进程B都是等待状态,但是等待磁盘输入输出和等待键盘输入为不同的状态。等待键盘输入是无限期的事件等待,而读取磁盘则是必须短时间内完成的事件等待,这是两种不同的等待状态。各进程状态如下所示:

进程A:uninterruptible (等待磁盘输入输出/不可中断状态) 进程B:interruptible (等待键盘输入输出/可中断状态) 进程C:running (正在运行) 这次假设进程C在运行的过程中,进程A请求的数据从磁盘到达了缓冲装置。紧接着硬盘对内核发起中断信号,内核知道磁盘读取完成,将进程A恢复为可运行状态。

进程A:running (正在运行) 进程B:interruptible (等待键盘输入输出/可中断状态) 进程C:running (正在运行) 此后进程C也会变为某种等待状态。如CPU的占用时间超出了上限、任务结束、进入I/O等待。一旦满足这些条件,调度器就可以完成从进程C到进程A的进程状态切换。

负载的意义:

负载表示的是“等待进程的平均数”。在上面的进程状态变换过程中,除了running状态,其他都是等待状态,那么其他状态都会加入到负载等待进程中吗?

事实证明,只有进程处于运行态(running)和不可中断状态(interruptible)才会被加入到负载等待进程中,也就是下面这两种情况的进程才会表现为负载的值。

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

下面描述一种直观感受的场景说明为什么只有运行态(running)和可中断状态(interruptible)才会被加入负载。

如:在很占用CPU资源的处理中,例如在进行动画编码的过程中,虽然想进行其他相同类型的处理,结果系统反映却变得很慢,还有从磁盘读取大量数据时,系统的反映也同样会变的很慢。但是另一方面,无论有多少等待键盘输入输出操作的进程,也不会让系统响应变慢。

造成CPU低而负载高场景

通过上面的具体分析负载的意义就很明显了,负载总结为一句话就是:需要运行处理但又必须等待队列前的进程处理完成的进程个数。具体来说,也就是如下两种情况:

等待被授权予CPU运行权限的进程 等待磁盘I/O完成的进程 cpu低而负载高也就是说等待磁盘I/O完成的进程过多,就会导致队列长度过大,这样就体现到负载过大了,但实际是此时cpu被分配去执行别的任务或空闲,具体场景有如下几种。

场景一:磁盘读写请求过多就会导致大量I/O等待

上面说过,cpu的工作效率要高于磁盘,而进程在cpu上面运行需要访问磁盘文件,这个时候cpu会向内核发起调用文件的请求,让内核去磁盘取文件,这个时候会切换到其他进程或者空闲,这个任务就会转换为不可中断睡眠状态。当这种读写请求过多就会导致不可中断睡眠状态的进程过多,从而导致负载高,cpu低的情况。

场景二:MySQL中存在没有索引的语句或存在死锁等情况

我们都知道MySQL的数据是存储在硬盘中,如果需要进行sql查询,需要先把数据从磁盘加载到内存中。当在数据特别大的时候,如果执行的sql语句没有索引,就会造成扫描表的行数过大导致I/O阻塞,或者是语句中存在死锁,也会造成I/O阻塞,从而导致不可中断睡眠进程过多,导致负载过大。

具体解决方法可以在MySQL中运行show full processlist命令查看线程等待情况,把其中的语句拿出来进行优化。

场景三:外接硬盘故障,常见有挂了NFS,但是NFS server故障

比如我们的系统挂载了外接硬盘如NFS共享存储,经常会有大量的读写请求去访问NFS存储的文件,如果这个时候NFS Server故障,那么就会导致进程读写请求一直获取不到资源,从而进程一直是不可中断状态,造成负载很高。

标签:状态,负载,系统,介绍,running,进程,磁盘,等待
From: https://blog.51cto.com/sdwml/6129839

相关文章

  • 【THM】Careers in Cyber(网络安全职业介绍)-学习
    本文相关的TryHackMe实验房间链接:https://tryhackme.com/room/careersincyber本文介绍:了解网络安全领域的不同职业。简介网络安全行业有许多不同的工作种类,主要分为进......
  • RHEL 7配置HAProxy实现Web负载均衡
    本文将简单介绍使用HAProxy实现web负载均衡,主要内容包括基于权重的轮询、为HAProxy配置https、配置http重定向为https、配置HAProxy使用独立日志。一、测试环境HAProxy:......
  • (固态硬盘)虚拟机安装Win7操作系统
    固态硬盘Vmware上安装Win7虚拟机我的笔记本是固态硬盘,要安装个win7操作系统做一些测试,刚开始怎么将光驱加载下载的ISO文件,启动时总是失败。大概是下面这样的显示。我尝......
  • 状态机——看待计算机系统的眼光
    一句话:系统本身就是一个计算+存储系统,该系统为其他软件系统提供共同的抽象概念和运行环境,不同系统之间存在通信关系。基本组成与三大任务计算机要完成的三大任务就是存储......
  • 抖音SEO矩阵系统如何运营?如何开发?
    抖音SEO,顾名思义抖音搜索排名优化,目前短视频平台如火如荼,抖音也凭借自身优势,迅猛发展,据相关数据统计,目前抖音平台日活用户已超8亿,抖音搜索超4亿,商业价值巨大,这无疑也是2023......
  • 会声会影2023旗舰版新增七大功能介绍
    2023年开端,我们不仅迎来了疫情的结束,也迎来了会声会影的重磅更新!2023年会声会影带来了七大新功能,其中包含了瞩目的标题与转场的更新,另外也进行了多项功能的增强,包括GIF创作......
  • linux系统离线安装docker(分步法&一键法)
    https://blog.csdn.net/chexlong/article/details/127932711 1前言在有的项目场景中,服务器是不允许连接外网的。此时若想在服务器上安装部署docker容器,就不能采用在......
  • 0x09_自制操作系统My-OS实现Timer
    一般机器都会有一个计时器的设备,在一定时间内不断发送中断信号,我们接收这个中断信号搞一个timer++这就是计时器了把class06改07 naskfunc.asm;naskfunc;TAB=4[F......
  • CentOS7系统编译安装简易Zabbix6.0
    系统环境设置系统交换分区(本文使用云主机安装)设置交换分区,现在很多云主机,默认都是关闭交换分区,关于交换分区的优缺点,可以自百度,这一步非必须,可以跳过。1、设置交换......
  • python介绍
     二进制编码ASSIC每一个字符统一都需要8个bit来存储计算机容量1位=1bit8bit=1byte=1字节1024bytes=1kbytes=1KB1024个字符,小文档,几百k可以表示一张图片1024......