在理解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进程的起点是它们被创建的时刻。例如,父进程可以通过fork()系统调用启动子进程。一旦启动,进程将进入运行或可运行状态。在进程运行时,它可能会进入需要等待特定资源或信号的代码路径。在等待资源的同时,这个进程将自愿放弃CPU周期,进入两种睡眠状态之一。
此外,我们可以暂停运行中的进程并将其置于停止状态。通常,这是通过向进程发送SIGSTOP信号来实现的。这种状态下的进程将继续存在,直到它被杀死或通过SIGCONT信号恢复。最后,当进程终止并进入僵尸状态时,该进程将完成其生命周期,直到其父进程将其从进程表中清除。
运行或可运行状态(R):当新进程启动时,它将处于运行或可运行状态。在运行状态下,进程占用CPU内核来执行其代码和逻辑。然而,线程调度算法可能会迫使运行中的进程放弃其执行权。这是为了确保每个进程都能公平分享CPU资源。在这种情况下,进程将被放置在运行队列中,其状态现在是可运行状态,等待轮到它执行。
虽然运行状态和可运行状态是不同的,但它们被组合成一个由R字符表示的单一状态。
睡眠状态:可中断(S)和不可中断(D):在进程执行期间,它可能会遇到需要请求外部资源的代码部分。主要是对这些资源的请求是基于IO的,例如从磁盘读取文件或提出网络请求。由于没有资源,这个进程无法进行,它将停滞不前,什么都不做。在此类事件中,他们应该放弃CPU周期,放弃其他准备运行的任务,从而进入睡眠状态。
有两种不同的睡眠状态:不可中断睡眠状态(D)和可中断睡眠状态(S)。不可中断的睡眠状态只会等待资源可用,然后才能进入可运行状态,并且不会对任何信号做出反应。另一方面,可中断的睡眠状态将对信号和资源可用性做出反应。
停止状态(T):从运行或可运行状态,我们可以使用SIGSTOP或SIGTSTP信号将进程置于停止状态(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的进程。
可以用常见两种场景来解释:
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的计算机上可以。
这里引用下一篇简单理解的博文信息:
交通类比


这基本上就是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
以上就是Linux 负载探索的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号