Linux进程状态与系统负载检测

news2025/1/15 16:51:59

1.基础知识-进程的5个状态

进程可以分为五个状态,分别是:

1)创建状态

一个应用程序从系统上启动,首先就是进入创建状态,需要获取系统资源创建进程管理块(PCB)完成资源分配。

2) 就绪状态

在创建状态完成之后,进程已经准备好,但是还未获得处理器资源,无法运行。

3) 运行状态

获取处理器资源,被系统调度,开始进入运行状态。如果进程的时间片用完了就进入就绪状态。

4) 阻塞状态

在运行状态期间,如果进行了阻塞的操作,如耗时的I/O操作,此时进程暂时无法操作就进入到了阻塞状态,在这些操作完成后就进入就绪状态。

5) 终止状态

进程结束或者被系统终止,进入终止状态

进程的状态转换图如下所示:

2.通过linux内核源码深入理解进程状态转变

在Linux内核源码中(include/linux/sched.h)找到进程状态的定义。

#define TASK_RUNNING 0
#define TASK_INTERRUPTIBLE 1
#define TASK_UNINTERRUPTIBLE 2
#define __TASK_STOPPED 4
#define __TASK_TRACED 8
/* in tsk->exit_state */
#define EXIT_ZOMBIE 16
#define EXIT_DEAD 32
/* in tsk->state again */
#define TASK_DEAD 64
#define TASK_WAKEKILL 128
#define TASK_WAKING 256
#define TASK_PARKED 512
#define TASK_STATE_MAX 1024

重要的进程状态含义如下表所示:

定义

含义

TASK_RUNNING

可执行状态(执行状态、执行等待状态)。可运行状态的进程,是指正在使用CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。进程处于可运行状态,但并不意味着进程已经实际上已分配到CPU ,它可能会一直等到调度器选中它。该状态只是确保进程一旦被 CPU 选中时立马可以运行,而无需等待外部事件。(就绪和运行两种状态)

TASK_INTERRUPTIBLE

等待状态。等待状态可被信号解除。这是针对等待某事件或其他资源而睡眠的进程设置的。在内核发送信号给该进程时表明等待的事件已经发生或资源已经可用,进程状态变为TASK_RUNNING,此时只要被调度器选中就立即可恢复运行。

TASK_UNINTERRUPTIBLE

等待状态。等待状态不可被信号解除。处于此状态,不能由外部信号唤醒,只能由内核亲自唤醒。

TASK_STOPPED

表示进程特意停止运行。比如在调试程序时,进程被调试器暂停下来。

可以通过如下流程图深入理解几个状态的变化:

TASK_INTERRUPTIBLE 和TASK_UNINTERRUPTIBLE 的区别

1)TASK_INTERRUPTIBLE(可中断的睡眠状态)

TASK_INTERRUPTIBLE是可以被信号和wake_up()唤醒的,当信号到来时,进程会被设置为可运行。可中断的睡眠状态的进程会睡眠直到某个条件变为真,比如说产生一个硬件中断、释放进程正在等待的系统资源或是传递一个信号都可以是唤醒进程的条件。系统中绝大多数进程处于这个状态。

2)TASK_UNINTERRUPTIBLE(不可中断的睡眠状态)

TASK_UNINTERRUPTIBLE只能被wake_up()唤醒。不可中断睡眠状态与可中断睡眠状态类似,但是它有一个例外,那就是把信号传递到这种睡眠状态的进程不能改变它的状态,也就是说它不响应信号的唤醒。不可中断睡眠状态一般较少用到,但在一些特定情况下这种状态还是很有用的,比如说:进程必须等待,不能被中断,直到某个特定的事件发生。

TASK_UNINTERRUPTIBLE状态存在的意义就在于,内核的某些处理流程是不能被打断的。如果响应异步信号,程序的执行流程中就会被插入一段用于处理异步信号的流程(这个插入的流程可能只存在于内核态,也可能延伸到用户态),于是原有的流程就被中断了。

不可中断状态的进程,可以这么理解:

这个进程现在基本上不在CPU 执行指令,但是它还是占用这个 CPU。

这个进程在做一些事情(大部分是磁盘I/O),做的这个事情不能被打断。

为啥不能被打断,因为系统觉得它做的这个事情很重要,如果打断了可能结果很严重(比如进程正在读写磁盘数据,把它打断了可能会导致进程的数据和磁盘上的数据不一致的情况)。

注:

信号本质:信号是在软件层次上对中断机制的一种模拟

信号事件的发生有两个来源:

硬件来源:(比如我们按下了键盘或者其它硬件故障);

软件来源:最常用发送信号的系统函数是kill, raise, alarm和setitimer以及sigqueue函数,软件来源还包括一些非法运算等操作。

3. Linux负载与进程状态的关系

3.1 top命令查看负载

通过top命令可以查看系统负载:

[root@localhost ~]# top


top - 12:26:46 up 1 day, 13:32, 2 users, load average: 0.00, 0.00, 0.00


其中:load average后的三个数字分别代表系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 。

3.2 Linux平均负载

CPU使用率和平均负载容易混淆,但二者并不等同。

1)定义

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的任务数(CPU、磁盘、不间断锁),它和 CPU使用率没有直接的关系。

CPU使用率表示单位时间CPU的利用情况。

2)CPU使用率和平均负载区别的原因

Linux内核源码中Linux 负载平均数不仅跟踪 runnable 的任务,而且还跟踪处于 uninterruptible sleep 状态的任务。而 uninterruptible 状态的进程其实是不占 CPU 的。所以平均负载(loadaverage)并不代表CPU使用率。

3) CPU使用率和平均负载的关系有三个场景

a)CPU密集型进程,大量使用CPU会使CPU利用率和平均负载都增高。

b) IO密集型进程,会使平均负载增高但CPU使用率不一定会增高。

c) 大量等待CPU的进程调度会使平均负载增高,CPU使用率也会增高。

4) 根据平均负载的数值对系统状态进行判断

如果负载小于CPU核心数,那么大概率是CPU使用导致,如果负载远高于CPU核心数,例如单核CPU,但是负载跑到了几十,那么大概率是磁盘发生问题导致。

参考文章:

https://mp.weixin.qq.com/s/1Pl4tT_Nq-fEZrtRpILiig

https://blog.csdn.net/qq_25854057/article/details/120769493

https://www.cnblogs.com/embedded-linux/p/7043569.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Dextran-Azide,Dextran-N3结构式;叠氮修饰的葡聚糖 科研用试剂说明

Dextran-N3,叠氮基团葡聚糖 英文名称:Dextran-Azide,Dextran-N3 中文名:叠氮修饰的葡聚糖 存储条件:-20C,避光,避湿 外观: 固体或类白色絮状,取决于分子量 溶剂:溶于大部分有机溶剂&…

kafka单节点部署,手把手从零到一

kafka单节点部署 书接上回:zookeeper单节点部署,手把手从零到一 建议配套观看 2、kafka的单节点部署 2.1、下载 这里如果和zookeeper相似的就不再赘述,直接上命令 wget https://archive.apache.org/dist/kafka/2.8.2/kafka_2.12-2.8.2.tgz…

深入了解ArrayBlockingQueue 阻塞队列

1. 前言 开始正式了解阻塞队列之前,我们需要了解什么是队列。 队列有什么作用。其实队列的作用就是解耦,更加确切的说应该是生产者以及消费者 之间的解耦 今天就让我们来看下ArrayBlockingQueue 的实现。虽然通过名称就可以看到,无非是通过数…

Theory for the information-based decomposition of stock price

文章目录MotivationThe potential of Brogaard DecompositionIntuitions for Brogaard decompositionTechnique details in Brogaard decompositionDefine the VAR systemIdentify the VAR systemVariance decompositionSummaryMain ReferencesMotivation Brogaard et al. (20…

1000字带您了解网络设备的接口分类和接口编号规则

通过本文,您可以了解到设备的接口分类和接口编号规则。 文章目录一、接口分类1.1 物理接口1.1.1 管理接口1.1.1 业务接口LAN侧接口WAN侧接口1.2 逻辑接口二、接口编号规则2.1 物理接口编号规则三、总结一、接口分类 接口是设备与网络中的其它设备交换数据并相互作用…

3.3 行列式的几何意义

文章目录二维面积三维体积多维体积行列式是线性代数一个非常重要的内容,也是非常难的领域.行列式在欧几里得空间里还有特殊的几何意义。二维面积 &esmp; 两个向量围成的平行四边形的面积就是这两个向量组成的矩阵的行列式的绝对值。以两个向量(3.−2)T(3.-2)^…

结构体 · 内存对齐

欢迎来到 Claffic 的博客 💞💞💞 前言: 在初识C语言中简单介绍了结构体,结构体可以理解为不同类型数据的集合体,但是你想过结构体的大小是如何计算的吗?看完这篇博客,你就能给自己答…

Linux 计算机网络 route 路由表、多网段与 bond 的故事

Linux 计算机网络 route 路由表、多网段与 bond 的故事 序 在之前的章节中,介绍了计算机网络的发展以及各种解析,在之中我们提到了每个主机设备都会维护一张自己的路由表,通过路由表来确定在不同网络之间,怎么将数据规划传输到各…

1988-2020年31省基尼系数数据

1、时间:1988-2020年 2、范围:31省 3、指标:包括省基尼系数年度数据,省城市和农村基尼系数年度 4、来源及计算方法说明附在文件内 5、指标说明: 基尼系数(英文:Gini index、Gini Coefficie…

LeetCode 94. 二叉树的中序遍历

🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓LeetCode 94. 二叉树的中序遍历,做好准备了么,那么开始吧。 🌲🌲🐴🐴 一、题目名称 LeetC…

Mybatis获取参数

Mybatis获取参数 配置模板 mybatis获取参数值的两种方式 1、&{}: 字符串拼接 2、#{}: 占位符赋值 MyBatis获取参数值的各种情况: MyBatis获取参数值的各种情况: 1、mapper接口方法的参数为单个的字面量类型 可以通过&#xf…

双系统下 linux挂载window磁盘

如果想让linux访问window分区磁盘,呈只读状态,解决办法是bios取消window快速开机。永久挂载windows磁盘 https://blog.csdn.net/yuehenmiss/article/details/124737456 # 创建挂载目录 sudo mkdir /window # 挂载分区 sudo mount /dev/sda1 /window # 查…

产品经理必懂知识之计算机基础知识

作为产品经理,非常有必要了解一下计算机的发展历史,今天带大家一起,大概地了解一下计算机的基础知识,希望能够帮助到大家,框架如下: 一、计算机发展史 1.1计算机的诞生 1946年第一台电子计算机问世美国宾…

YOLOv8训练自己的数据集(超详细)

一、准备深度学习环境 本人的笔记本电脑系统是:Windows10 YOLO系列最新版本的YOLOv8已经发布了,详细介绍可以参考我前面写的博客,目前ultralytics已经发布了部分代码以及说明,可以在github上下载YOLOv8代码,代码文件夹…

一种车辆纵向控制切换算法设计思路

传统及主流的纵向控制切换算法: 例如《某避障控制策略研究》硕士论文: 在CarSim中设定节气门开度及制动踏板力为0,测得不同车速工况下车辆自然滑行的减速度。为了避免在控制过程中车辆驱动与制动切换的过于频繁,在其两侧设置了宽…

VUE_vue-cli 卸载不掉的问题解决

nodejs版本最好在v17以下,推荐使用v16.19.0 问题 由于项目需要旧版的 vue-cli ,所以需要事先卸载新版本; 运行命令全局卸载: yarn global remove vue/cli// 查看当前版本确定是否卸载 vue --version结果还是旧版本,…

使用ResNet34实现CIFAR100数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用ResNet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到32X32,因为算力相关的…

5.8.1、TCP的连接建立

TCP 是面向连接的协议,它基于运输连接来传送 TCP 报文段。 TCP 运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。 TCP 运输连接有以下三个阶段 建立 TCP 连接:通过 “三报文握手” 建立 TCP 连接数据传送:也就是基于已建立的…

【PostgreSQL】手把手教学PostgreSQL

目录 1、PostgreSQL介绍 2、在ubuntu上通过命令安装 3、进入postgres用户 4、查看所有数据库 5、创建数据库 6、删除数据库 7、查看版本号(注意:在sudo su - postgres下) 8、远程连接 1、PostgreSQL介绍 官网:PostgreSQL: T…

SiC碳化硅功率器件测试哪些方面?碳化硅功率器件测试系统NSAT-2000

SiC碳化硅功率半导体器件具有耐压高、热稳定好、开关损耗低、功率密度高等特点,被广泛应用在电动汽车、风能发电、光伏发电等新能源领域。 近年来,全球半导体功率器件的制造环节以较快速度向我国转移。目前,我国已经成为全球最重要的半导体功率器件封测基…