【Linux性能优化】你知道什么是平衡负载么

什么是平衡负载

首先大家思考一下,当你发现自己的服务变慢时,你会首先使用什么命令来排查?我通常做的第一件事,就是执行top或者uptime命令来了解系统的负载情况。比如像下面这样,我在命令行里输入top命令,它就会像Windows系统中的任务处理器那样显示各个进程的资源占用状况。

        我在命令行里输入uptime 命令,系统也会随即给出以下结果:

                update中的参数分别是什么意思呢?它们分别是当前时间、系统运行时间以及正在登录用户数、系统在过去的1分钟、5分钟和15分钟内的平均负载。

22:29                 // 当前时间
up 3 days, 12:24      // 系统运行时间
2 user                // 正在登录用户数
2.44 4.13 4.42        // 1分钟、5分钟和15分钟内的平均负载

        我猜一定有人会说,平均负载不就是单位时间内的 CPU 使用率吗?上面的2.44,就代表CPU使用率是 244%,其实并不是这样。平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系。

        那具体的,什么是可运行状态和不可中断状态的进程?

        可运行状态的进程:正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于Running(运行)状态或者Runnable(就绪)状态的进程。

        不可中断状态的进程:正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的Uninterruptible Sleep状态也称为Disk Sleep的进程。比如当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。

        因此,你可以简单理解为,平均负载就是单位时间内的活跃进程数,但实际上是活跃进程数的指数衰减平均值。这个“指数衰减平均”的详细含义我们不用计较,这只是系统的一种更快速的计算方式,我们把它直接当成活跃进程数的平均值也没什么问题。

        那么我们进一步思考一下,我们查看平均负载时,这个值为多少时比较合理呢?

平均负载为多少时合理

        既然平均负载代表的是单位时间内的活跃进程数,那么在理想情况下,每个CPU都刚好运行着一个进程,可以使得CPU得到充分分利用。例如当负载为2时,对于双核CPU而言,意味着所有的 CPU 都刚好被完全占用。对于四核CPU而言,意味着有CPU有一半的空闲时间。而对于单核CPU而言,意味着有一半的进程竞争不到 CPU。

那么怎么能够直到自己的服务器有多少个CPU呢,可以使用以下命令进行查看:

$ grep 'model name' /proc/cpuinfo | wc -l
2

        这样,我们就可以根据自己服务的CPU数量以及平均负载来判断我们系统是否是否出现过载,一般情况下,如果均负载比 CPU 个数还大的时候,系统就已经出现了过载。

        新的问题又来了,我们在例子中可以看到平均负载有三个数值,到底该参考哪一个呢?实际上,我们都要看。三个不同时间间隔的平均值,其实给我们提供了分析系统负载趋势的数据来源,让我们能更全面、更立体地理解目前的负载状况。

        假设我们在一个单 CPU 系统上看到平均负载为 1.73,3.60,7.98,那么说明在过去 1 分钟内,系统有 73% 的超载,在5分钟内有260%的超载,而在 15 分钟内,有 698% 的超载,从整体趋势来看系统的负载是在不断的降低的。

        在实际的生产环境中,当平均负载高于 CPU 数量 70% 的时候,你就应该分析排查负载高的问题了。一旦负载过高,就可能导致进程响应变慢,进而影响服务的正常功能。70% 这个数字并不是绝对的,最推荐的方法,还是把系统的平均负载监控起来,然后根据更多的历史数据,判断负载的变化趋势。当发现负载有明显升高趋势时,比如说负载翻倍了,你再去做分析和调查。

        

平均负载与CPU使用率的关系

        请你思考一个问题,平均负载代表的是单位时间内平均活跃进程数,那平均负载高了是否一定就意味着 CPU 使用率高?

        其实并不一定,我们来具体分析一下。我们还是从平均负载的定义来,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包括等待 CPU 和等待 I/O 的进程。而CPU 使用率,是单位时间内 CPU 繁忙情况的统计,跟平均负载并不一定完全对应。例如:

  • 对于CPU 密集型进程而言,使用大量 CPU 会导致平均负载升高,此时这两者是一致的;
  • 对于I/O 密集型进程,等待 I/O 也会导致平均负载升高,但 CPU 使用率不一定很高;
  • 而对于大量等待 CPU 的进程调度也会导致平均负载升高,此时的 CPU 使用率也会比较高。

小结

平均负载提供了一个快速查看系统整体性能的手段,反映了整体的负载情况。具体的,平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。但只看平均负载本身,我们并不能直接发现,到底是哪里出现了瓶颈。因为平均负载高有可能是 CPU 密集型进程导致的,还可能是I/O 更繁忙了。

本文涉及到的Linux命令

top:是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。

ps:用于显示当前进程的状态,与top的区别是top显示资源的动态变化,ps显示的是瞬时的状态。

uptime:能够打印系统总共运行了多长时间和系统的平均负载。 uptime命令可以显示的信息显示依次为:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[高光谱]使用PyTorch的dataloader加载高光谱数据

本文实验的部分代码参考 Hyperspectral-Classificationhttps://github.com/eecn/Hyperspectral-Classification如果对dataloader的工作原理不太清楚可以参见 [Pytorch]DataSet和DataLoader逐句详解https://blog.csdn.net/weixin_37878740/article/details/129350390?spm1001…

网络货运平台源码 管理平台端+司机端APP+货主端APP源码

网络货运平台系统源码,网络货运平台源码 管理平台端司机端APP货主端APP 遵循政策要求的八项基本功能,结合货主、实际承运人、监管方等多方业务场景,构建人、车、货、企一体的标准化网络货运平台系统。具有信息发布、线上交易、全程监控、金融…

数据库基础——6.排序与分页

这篇文章来讲一下数据库的排序与分页 目录 1.排序数据 1.1排序规则 1.2 单列排序 1.3 多列排序 2.分页 2.1 背景 2.2 实现规则 2.3 拓展 1.排序数据 1.1排序规则 使用 ORDER BY 子句排序 ASC(ascend):升序 ; DESC&a…

vue项目中使用depcheck检查缺失的依赖项目

使用depcheck检查缺失的项目依赖 由来:今天在做地铁的时候,刷短视频发现一个非常好用的东西,分享一下 它可以帮助我们找出问题,在 package.json 中,每个依赖包如何被使用、哪些依赖包没有用处、哪些依赖包缺失。它是解…

2023年,推荐10个让你事半功倍的CSS在线生产力工具

1、CSS Gradient CSS Gradient 是一个在线工具,可以帮助用户创建并生成 CSS 渐变代码。用户可以使用该工具中提供的图形用户界面来调整颜色、方向和渐变类型,然后生成相应的 CSS 代码。用户可以将生成的代码复制并粘贴到自己的 CSS 样式表中&#xff0c…

Linux——操作系统详解

目录 一.操作系统的含义 1.操作系统是什么? 2.那么操作系统为什么要对软硬件资源进行管理呢?这样做的好处在哪里? 3.操作系统又是怎么进行管理的? 如何理解“先描述,再组织”? 二.总结: …

音乐小白乐器选择,如何学一手才艺,推荐尤克里里

乐器难度说明 注意:这里的难度说明是音准的难度,就是能不能发出标准的声音 乐器按照演奏方式分类,分为 演奏方式乐器举例难度等级难度说明敲击木鱼,架子鼓,钢琴1敲击乐是音最准的,敲哪个地方就发什么音&…

记录--超长溢出头部省略打点,坑这么大,技巧这么多?

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 在业务中,有这么一种场景,表格下的某一列 ID 值,文本超长了,正常而言会是这样: 通常,这种情况都需要超长省略溢出打点&#xff0…

Kali-linux Gerix Wifi Cracker破解无线网络

Gerix Wifi Cracker是另一个aircrack图形用户界面的无线网络破解工具。本节将介绍使用该工具破解无线网络及创建假的接入点。 9.3.1 Gerix破解WEP加密的无线网络 在前面介绍了手动使用Aircrack-ng破解WEP和WPA/WPA2加密的无线网络。为了方便,本小节将介绍使用Geri…

学习RabbitMQ高级特性

目标: 了解熟悉RabbitMQ的高级特性 学习步骤: 高级特性主要分为以下几点, 官网介绍 1、消息可靠性投递 【confirm 确认模式、return 退回模式】 2、Consumer ACK 【acknowledge】 3、消费端限流 【prefetch】 4、TTL过期时间 【time to live】 5、死信队…

没有权限merge到源git仓库?一招教你如何解决。

在git上贡献项目的时候,一般步骤是,clone源项目到本地,切出一个新的分支,然后在新分支上开发,最后push到远程,然后提出mr。但是对于一些非开源的项目,可能会出现: 这就是说明没有权…

【C++】布隆过滤器

文章目录 布隆过滤器的引入布隆过滤器的概念如何选择哈希函数个数和布隆过滤器长度布隆过滤器的实现布隆过滤器的优缺点 布隆过滤器的引入 我们在使用新闻客户端看新闻时,它会给我们不停地推荐新的内容,它每次推荐时要去重,去掉那些已经看过…

【高级语言程序设计(一)】第 8 章:结构体类型和自定义类型

目录 前言 一、结构体类型定义 (1)结构体类型定义的一般形式 (2)结构体类型定义的说明 二、结构体类型变量 (1)结构体类型变量的定义和初始化 ① 先定义结构体类型、后定义结构体类型的变量&#xf…

84.Rem和max-width如何工作

max-width 首先我们先看普通的width是什么样的效果&#xff01; 首先给个测试的div <div class"test">TEST</div>● 然后CSS给定一个宽度 .test {width: 1000px;background-color: red;padding: 100px; }如上图&#xff0c;不管你的浏览器窗口如何改变…

HTMLCSS中的树形结构图

我们可以只使用 html 和 css 创建树视图(可折叠列表) &#xff0c;而不需要 JavaScript。可访问性软件将看到树形视图作为列表嵌套在披露窗口小部件中&#xff0c;并且自动支持标准键盘交互。 1、HTML 我们就从简单嵌套列表的 html 开始: <ul><li>Giant planets&…

Hbase操作

(1) 启动 启动顺序&#xff1a;Hadoop--zookeeper—hbase 主进程&#xff1a;HMaster 从进程&#xff1a;HRegionServer 确认进程是否正常 (2) 进入终端 [rootmaster ~]# hbase shell (3) 查看状态 命令&#xff1a;status 表示有3台机器&#xff0c;0台down掉&…

位操作集锦

位操作集锦 异或运算两两交换数据签名检测两个数是否拥有不同的符号&#xff0c;即一个正数&#xff0c;一个负数寻找只出现一次的一个数字1寻找只出现两次的一个数字寻找只出现一次的一个数字2寻找只出现一次的两个数字 与和位移运算判断奇偶数二进制数中1的个数二进制数中最右…

MFC 给对话框添加图片背景

在windows开发当中做界面的主要技术之一就是使用MFC&#xff0c;通常我们看到的QQ,360,暴风影音这些漂亮的界面都可以用MFC来实现。今天我们来说一下如何用MFC美化对话框&#xff0c;默认情况下&#xff0c;对话框的背景如下&#xff1a; 那么&#xff0c;我们如何将它的背景变…

C++服务器框架开发3——协程与线程的简单理解/并发与并行

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见&#xff1a;[C高级教程]从零开始开发服务器框架(sylar) 上一篇&#xff1a;C服务器框架开发2——头文件memory/typedef C服务器框架开发3——协程与线程的简单理解/并发与并行 目前进度协程与线程的简…

json-server的基本使用

1、mock是什么&#xff1f; mockjs 作用&#xff1a;生成随机数据&#xff0c;拦截 Ajax 请求 目的&#xff1a;很多时候前端开发页面的过程中&#xff0c;后端的接口并没有写好&#xff0c;这个时候需要前端自己定义接口及接口的返回数据的结构体&#xff0c;这个时候就需要…