0

0

Linux 负载探索

看不見的法師

看不見的法師

发布时间:2025-07-22 08:40:28

|

812人浏览过

|

来源于php中文网

原创

在理解linux的平均负载之前,需要先了解linux的进程状态。

Linux进程状态可以通过man ps命令查看。

PROCESS STATE CODES    Here are the different values that the s, stat and state output     specifiers (header "STAT" or "S") will display to describe the    state of a process:       D    uninterruptible sleep (usually IO)       R    running or runnable (on run queue)       S    interruptible sleep (waiting for an event to complete)       T    stopped by job control signal       t    stopped by debugger during the tracing       W    paging (not valid since the 2.6.xx kernel)       X    dead (should never be seen)       Z    defunct ("zombie") process, terminated but not reaped by its parent

与信号相关的不同进程状态

Linux 负载探索

任何Linux进程的起点是它们被创建的时刻。例如,父进程可以通过fork()系统调用启动子进程。一旦启动,进程将进入运行或可运行状态。在进程运行时,它可能会进入需要等待特定资源或信号的代码路径。在等待资源的同时,这个进程将自愿放弃CPU周期,进入两种睡眠状态之一。

此外,我们可以暂停运行中的进程并将其置于停止状态。通常,这是通过向进程发送SIGSTOP信号来实现的。这种状态下的进程将继续存在,直到它被杀死或通过SIGCONT信号恢复。最后,当进程终止并进入僵尸状态时,该进程将完成其生命周期,直到其父进程将其从进程表中清除。

运行或可运行状态(R):当新进程启动时,它将处于运行或可运行状态。在运行状态下,进程占用CPU内核来执行其代码和逻辑。然而,线程调度算法可能会迫使运行中的进程放弃其执行权。这是为了确保每个进程都能公平分享CPU资源。在这种情况下,进程将被放置在运行队列中,其状态现在是可运行状态,等待轮到它执行。

虽然运行状态和可运行状态是不同的,但它们被组合成一个由R字符表示的单一状态。

睡眠状态:可中断(S)和不可中断(D):在进程执行期间,它可能会遇到需要请求外部资源的代码部分。主要是对这些资源的请求是基于IO的,例如从磁盘读取文件或提出网络请求。由于没有资源,这个进程无法进行,它将停滞不前,什么都不做。在此类事件中,他们应该放弃CPU周期,放弃其他准备运行的任务,从而进入睡眠状态。

有两种不同的睡眠状态:不可中断睡眠状态(D)和可中断睡眠状态(S)。不可中断的睡眠状态只会等待资源可用,然后才能进入可运行状态,并且不会对任何信号做出反应。另一方面,可中断的睡眠状态将对信号和资源可用性做出反应。

停止状态(T):从运行或可运行状态,我们可以使用SIGSTOPSIGTSTP信号将进程置于停止状态(T)。这两个信号的区别在于,我们发送的SIGSTOP是编程的,例如运行kill -STOP {pid}。此外,进程不能忽略此信号,并将进入停止状态。另一方面,我们使用键盘CTRL + Z发送SIGTSTP信号。与SIGSTOP不同,该进程可以选择忽略此信号,并在收到SIGTSTP后继续执行。

在这种状态下,我们可以通过发送SIGCONT信号将进程恢复到运行或可运行状态。

僵尸状态(Z):当进程完成执行或终止时,它将向父进程发送SIGCHLD信号并进入僵尸状态。僵尸进程,也称为已停用进程,将保持此状态,直到父进程将其从进程表中清除。要从进程表中清除终止的子进程,父进程必须使用wait()waitpid()系统调用读取子进程的退出值。

Linux负载平均值查看方法

# 方法一:uptime
$ uptime
18:05:12 up 518 days,  5:22,  1 user,  load average: 0.00, 0.01, 0.05
<h1>方法二:top</h1><p>top - 18:05:24 up 518 days,  5:22,  1 user,  load average: 0.00, 0.01, 0.05</p><h1>方法三:cat /proc/loadavg</h1><p>$ cat /proc/loadavg
0.00 0.01 0.05 3/192 30524

平均负载的3个数值分别代表1分钟、5分钟、15分钟系统的平均负载情况。通过这三个数值的变化,我们可以知道系统最近一段时间的压力变化趋势。

Unix中负载的名称解释:

系统负载/CPU负载 - 是衡量Linux系统中CPU利用率过高或不足的指标;CPU正在执行或处于等待状态的进程数量。平均负载——是在给定的1、5和15分钟时间内计算的平均系统负载。Linux源码解释:

单位时间内,系统中处于可运行状态和不可中断状态的平均进程数。

在Linux中,从技术上讲,负载平均值是其(内核)执行队列中标记为运行或不间断的进程的运行平均值。

CPU平均负载与CPU使用率的区别:

平均负载:指单位时间内,处于可运行状态和不可中断的进程数。

CPU使用率:正在使用CPU的进程。

可以从定义看到两者的不同,CPU平均负载不仅包括了正在使用CPU的进程,还包括等待CPU和等待I/O的进程。而CPU使用率指的是正在使用CPU的进程。

可以用常见两种场景来解释:

Insou AI
Insou AI

Insou AI 是一款强大的人工智能助手,旨在帮助你轻松创建引人入胜的内容和令人印象深刻的演示。

下载

CPU密集型的进程:因为进程大量的使用CPU,所以平均负载会比较高,CPU使用率也会跟着很高。

I/O密集型进程:这个会出现很多进程在等待I/O的操作,会存在很多进程处于不可中断状态,所以负载会变高,但是CPU使用率不一定会很高。

负载平均值简单理解:

一个具有多个CPU或多核CPU的系统。在这样的系统上,负载平均数的工作方式略有不同。例如,如果您在单个CPU系统上的平均负载为2,这意味着您的系统被100%超载——在整个期间,一个进程正在使用CPU,而另一个进程正在等待。在一个有两个CPU的系统上,这将是完全的使用——两个不同的进程一直在使用两个不同的CPU。在一个有四个CPU的系统上,这将是一半的使用——两个进程使用两个CPU,而两个CPU闲置。

要了解负载平均数,需要知道系统有多少个CPU。平均负载6.03表示单个CPU的系统被严重超载,但在一台有8个CPU的计算机上可以。

这里引用下一篇简单理解的博文信息:

交通类比

Linux 负载探索Linux 负载探索

这基本上就是CPU负载。“汽车”是使用一段CPU时间(“过桥”)或排队使用CPU的进程。Unix将此称为运行队列长度:当前正在运行的进程数加上等待(排队)运行的进程数之和。

负载平均值的排查:

系统平均负载指是处于可运行状态和不可中断状态的进程的平均数量。

即单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和CPU使用率并没有直接关系。

可运行状态的进程,包括正在使用CPU的进程,和正在等待CPU的进程。对应于ps命令输出的STAT列中状态为R的进程。状态R:running or runnable (on run queue)

不可中断状态的进程,表示正在等待其它系统资源的进程,例如等待磁盘I/O。对应于ps命令输出的STAT列中状态为D的进程。状态D:uninterruptible sleep (usually IO)。

不可中断状态实际上是系统对进程和硬件设备的一种保护机制。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的。

由于在Linux操作系统里,Load是一个定义及其含混的指标,排查loadavg高就是一个很复杂的过程。其基本思路就是,根据引起Load变化的根源是R状态任务增多,还是D状态任务增多。

推荐大家可以阅读下面文章:

Solving the Mystery

https://www.php.cn/link/90256d5c6119498ae5e11944224ee417

理解Linux系统负荷

https://www.php.cn/link/526b2103e4390c4996db8c15102957fe

可以查看原文:

https://www.php.cn/link/5aaa384f657cd101b3a1752998130672

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
登录token无效
登录token无效

登录token无效解决方法:1、检查token的有效期限,如果token已经过期,需要重新获取一个新的token;2、检查token的签名,如果签名不正确,需要重新获取一个新的token;3、检查密钥的正确性,如果密钥不正确,需要重新获取一个新的token;4、使用HTTPS协议传输token,建议使用HTTPS协议进行传输 ;5、使用双因素认证,双因素认证可以提高账户的安全性。

6655

2023.09.14

登录token无效怎么办
登录token无效怎么办

登录token无效的解决办法有检查Token是否过期、检查Token是否正确、检查Token是否被篡改、检查Token是否与用户匹配、清除缓存或Cookie、检查网络连接和服务器状态、重新登录或请求新的Token、联系技术支持或开发人员等。本专题为大家提供token相关的文章、下载、课程内容,供大家免费下载体验。

844

2023.09.14

token怎么获取
token怎么获取

获取token值的方法:1、小程序调用“wx.login()”获取 临时登录凭证code,并回传到开发者服务器;2、开发者服务器以code换取,用户唯一标识openid和会话密钥“session_key”。想了解更详细的内容,可以阅读本专题下面的文章。

1092

2023.12.21

token什么意思
token什么意思

token是一种用于表示用户权限、记录交易信息、支付虚拟货币的数字货币。可以用来在特定的网络上进行交易,用来购买或出售特定的虚拟货币,也可以用来支付特定的服务费用。想了解更多token什么意思的相关内容可以访问本专题下面的文章。

2209

2024.03.01

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

766

2023.08.10

页面置换算法
页面置换算法

页面置换算法是操作系统中用来决定在内存中哪些页面应该被换出以便为新的页面提供空间的算法。本专题为大家提供页面置换算法的相关文章,大家可以免费体验。

502

2023.08.14

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2927

2024.08.16

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

1564

2023.06.21

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10.7万人学习

Git 教程
Git 教程

共21课时 | 4.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号