性能优化理论篇 | 彻底弄懂系统平均负载

news2024/12/24 21:11:49

Linux 上的进程状态

要讨论系统平均负载,首先要了解Linux 上的进程状态。

标志名称内核名称及解释
R运行中或可运行TASK_RUNNING。进程正在执行或等待执行。可以在用户空间(用户代码)或内核空间(内核代码)中运行。
S可中断睡眠TASK_INTERRUPTIBLE。进程正在等待满足某个条件,例如访问资源或接收到信号(例如,子进程的输出)。
D不可中断睡眠TASK_UNINTERRUPTIBLE。进程处于睡眠状态,与S标志类似,但不会响应信号。通常用于在中断或终止进程可能导致设备或进程处于未定义状态时。通常用于I/O操作。进程也会在其内存页被转储或加载到扩展内存(即“交换”)时进入此状态。
T停止TASK_STOPPED。进程已被适当的信号停止。可以通过另一个信号恢复。
t跟踪TASK_TRACED。进程正在被调试,并且其执行被跟踪。为了测试其状态,它会被暂时暂停。
Z僵尸EXIT_ZOMBIE。子进程已完成操作,并希望向父进程报告其退出代码。不幸的是,有时父进程没有正确处理子进程,在这种情况下,子进程就会变成僵尸。
X死亡EXIT_DEAD。进程已结束,父进程已清理子进程。所有进程资源都被释放。在正常情况下,这种状态不应该是可见的。

下图展示了进程的不同状态以及它们之间的相互转换。

现在我们可以开始介绍平均负载了。

平均负载(load average)

根据手册(man 5 proc loadavg),loadavg统计的是状态 为R 和 D 中进程数。

  • R状态:表示进程当前正在运行(Running)或处于可运行状态(Runnable),这个状态的进程要么正在被CPU执行,要么准备好被执行,但正在等待CPU资源的调度。

  • D状态:表示进程处于不可中断睡眠状态(Uninterruptible Sleep),这种状态通常发生在进程正在等待某种系统资源(例如磁盘I/O操作的完成)。D 状态的进程不能被中断,也无法响应常规信号,

需要注意的是R 状态既可以表示正在执行,也可以表示排队等待执行。
在这里插入图片描述

可以使用Linux系统提供的uptime命令查看系统的平均负载。

$ uptime
13:40:40 up 38 days, 1:07, 1 user, load average: 0.25, 0.14, 0.14

load average后面的3个数字给出的是3个周期的平均负载:

  • 过去 1分钟
  • 过去 5 分钟
  • 过去 15 分钟

平均负载应结合 CPU 数量的背景下考虑。

单 CPU 系统

假设单 CPU 系统上的1/5/15分钟的平均负载值为 6.00 5.48 3.25。这意味着该系统在最后一分钟需要处理 600% 的负载,超出其处理能力的 500%。

多处理器与多核

假设是在有 12 个 CPU的系统上,由于 1 分钟的“平均负载”为“6.00”,这意味着只有 50% 的计算能力被利用。意味着“平均负载”正常

假设是在有 24 个 CPU的系统上,这意味着只有 16.6% 的计算能力被利用。意味系统未得到充分利用。
在这里插入图片描述

1分钟,5分钟,15分钟的“平均负载”有什么用?

“平均负载”这个指标有助于确定系统对计算的需求是随时间增加还是随时间减少。

下图中系统中的“平均负载”一直在增加,该系统15 分钟的“平均负载”为“3.25”。5 分钟的“平均负载”为“5.48”,而最近 1 分钟的“平均负载”为“6.00”。这表明该系统对计算的需求正在增加。
在这里插入图片描述

而对于下图,系统中的“平均负载”一直在减少,该系统15 分钟的“平均负载”为“5.05”。5 分钟的“平均负载”为“3.53”,而最近 1 分钟的“平均负载”为“0。42”。这表明该系统的负载一直呈下降趋势。

那么对于一个系统而言,平均负载多少才算正常了?其实没有一个具体细致的标准,不同的应用程序有不同的标准。但是有一个大概的经验值:如果系统的平均负载 除以 CPU核数 大于0.7时,而且15、5、1分钟的平均负载是呈增长趋势,我们可能就需要注意了。

平均负载相关的误解

误解 1 – 平均负载是系统/CPU 上当前运行的进程数

这是最常见的一个误解(由于对进程状态缺乏了解而导致的),正如我们上面多次强调的那样,平均负载包括处于 R 状态(正在运行和准备运行)和 D 状态(不可中断睡眠状态)的进程。如果平均负载仅仅只是指正在运行的进程数,则它永远不会大于系统中的计算逻辑CPU核数。

误解 2 平均负载过高总是与处理器有关

前面介绍过平均负载包括处于 R 状态(正在运行和准备运行)和 D 状态(不可中断睡眠状态)的进程。

这意味着这些进程可以:

  • 等待 CPU(R)
  • 在 CPU 上运行 ®
  • 等待磁盘(D)
  • 等待内存页面从磁盘(D)加载。

因此,以下3个组件都会影响平均负载的计算结果,并不一定就是 处理器的问题,例如如果系统的物理内存(RAM)被耗尽,操作系统会频繁地将内存页面从RAM转储到磁盘上的交换空间。这个过程会导致磁盘I/O操作增加,从而增加系统的负载平均值(处于D状态的进程变多了)。

  • CPU
  • disk
  • RAM memory (耗尽,需要使用交换空间).

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

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

相关文章

【项目】基于Vue3.2+ElementUI Plus+Vite 通用后台管理系统

构建项目 环境配置 全局安装vue脚手架 npm install -g vue/cli-init打开脚手架图形化界面 vue ui创建项目 在图形化界面创建项目根据要求填写项目相关信息选择手动配置勾选配置项目选择配置项目然后我们就搭建完成啦🥳,构建可能需要一点时间&#xff0…

Navicat Premium Lite For Linux,一款免费的专业可视化 SQL 数据库设计工具,支持各种数据库并行连接,在业界可是大名鼎鼎!

Navicat Premium Lite For Linux,一款免费的专业可视化 SQL 数据库设计工具,支持各种数据库并行连接,在业界可是大名鼎鼎! Navicat 是一个可视化数据库、数据表设计软件,支持MySQL、MariaDB、SQLite、MongoDB、Redshi…

论文阅读笔记:ST-MetaNet-1

目录 前言 摘要 CCS 关键词 介绍 时空相关性的复杂组合 空间相关性 时间相关性 时空相关性的多样性 本篇博客结语 前言 读这篇论文边读边学,每天坚持发博客,看到哪学到哪,这系列文章既有翻译,又有深度详细解释&#xff…

Rust学习笔记1--下载安装和使用

一、下载和安装: 官网:https://www.rust-lang.org/ 直接下载即可,windows:按照教程执行步骤。 二、使用: 2.1 在vscode中安装rust 2.2 编译与运行rust文件: 后缀名rs: 编译: …

org.springframework.boot.autoconfigure.AutoConfiguration.imports 配置没有生效

在spring3.x以后,自动配置需要配置在org.springframework.boot.autoconfigure.AutoConfiguration.imports 文件中 如果你配置了却没生效,有可能是创建的目录不对,正常情况下, META-INF.spring 是一个两层目录,如果是从别的地方复制…

第51集《大佛顶首楞严经》

请大家打开讲义第 111 页。癸三,结责迷情。 当我们在修学首楞严王三昧的时候,要把握两个很重要的原则:第一个就是它修学的方法,第二个就是它修学的目标。 那么,首楞严王的修学方法是什么呢(这一点蕅益大师…

零基础读懂 DDPM 数学推导

零基础读懂 DDPM 数学推导 完整PDF文件可以在工坊获得,以下是内容截图。

为何显示keyerror fruit,如何解决??

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

【docker综合篇】关于我用docker搭建了6个应用服务的事

最近一直在捣鼓docker,利用测试服务器,本着犯错就重来(重装系统)的大无畏精神,不断尝试,总结经验,然后在网上搜寻一些关于docker有关的服务镜像,并搭建起来。看着一个个服务在我的服务器跑起来,…

【QT】基于UDP/TCP/串口 的Ymodom通讯协议客户端

【QT】基于UDP/TCP/串口的Ymodom通讯协议客户端 前言Ymodom实现QT实现开源库的二次开发-1开源库的二次开发-2 串口方式实现TCP方式实现UDP方式实现补充:文件读取补充:QT 封装成EXE 前言 Qt 运行环境 Desktop_Qt_5_11_2_MSVC2015_64bit ,基于…

PowerShell自动化Windows系统管理任务

​ 大家好,我是程序员小羊! 前言 Windows系统管理涉及许多繁琐的任务,如用户管理、文件操作、系统更新、网络配置等。PowerShell作为Windows的命令行工具和脚本语言,可以极大地简化这些管理任务。本文将探讨如何使用PowerShell自动…

【教学类-75-01】20240817“通义万相图片最大化+透明png”的修图流程

背景需求: 打印了袜子配对的PDF模版,做预测试 【教学类-74-02】彩色袜子配对02--左右配对-CSDN博客文章浏览阅读497次,点赞10次,收藏9次。【教学类-74-02】彩色袜子配对02--左右配对https://blog.csdn.net/reasonsummer/article…

09:链表的介绍

链表 1、算法的定义2、链表 1、算法的定义 通俗的定义:解题的方法与步骤。       狭义的定义:对存储的数据的操作。       广义的定义:无论数据是如何存储的,对数据从操作都是一样的。 到目前为止我们可以通过2种结构来存储…

关于订单最终一致性解决方案

背景 整体的交易架构主要由两部分组成:C端交易平台 - B端交易平台 由于组织架构的特殊性,并没有采用两阶段提交、三阶段提交这种刚性分布式事务的方案。 主要采用了基于TCC思想的TOC柔性事务补偿方案。 柔性事务:遵循BASE原则,…

Redis7.x安装系列教程(四)集群部署原理详解

1、什么是集群部署 Redis集群(cluster)是Redis的一种分布式运行模式,通过分片(sharding)提供数据的自动分区和管理,实现数据的高可用性和可扩展性。 在集群模式下,数据分布在多个Redis节点上,节点分为主节点和从节点。主节点负责…

Pytorch如何判断两个模型的权重是否相同(比较权重差异/参数字典)

参考资料: GPT-4o mini的回答 第一种方法是使用md5sum这个命令(Linux上),但是由于环境的不同,哪怕是load之后转存似乎都会有差,所以效果不大。 第二种方法是使用代码比较,这段代码是我找GPT要的,感觉非常不…

Linux线程间通信学习记录(线程同步)

0.线程间通信的方法 (1).全局变量(要结合同步机制) (2).信号量 (3).P操作 (4).V操作 一.线程同步 同步:指的是多个任务按照约定的先后次序相互…

OpenCV图像滤波(19)计算图像每个像素点的邻域内的平方和函数sqrBoxFilter()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算覆盖在滤波器上的像素值的平方和。 对于源图像中的每一个像素 (x, y),函数计算那些与放置在像素 (x, y) 上的滤波器重叠的邻域像…

【百度】25届秋招内推码

内推码 IV1RBB 介绍 📣 百度TPG技术中台事业群组—深度学习技术平台部 25届校招正在进行中,可通过定向内推形式get校招绿色通道 ! 欢迎联系我定向内推 🌟【部门介绍】 飞桨(PaddlePaddle)以百度多年的深度…

坐牢第二十七天(聊天室)

基于UDP的网络聊天室 一.项目需求: 1.如果有用户登录,其他用户可以收到这个人的登录信息 2.如果有人发送信息,其他用户可以收到这个人的群聊信息 3.如果有人下线,其他用户可以收到这个人的下线信息 4.服务器可以发送系统信息…