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

news2025/2/28 20:23:35

什么是平衡负载

首先大家思考一下,当你发现自己的服务变慢时,你会首先使用什么命令来排查?我通常做的第一件事,就是执行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分钟内的平均负载。

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

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

相关文章

Springboot +spring security,创建SpringSecurity项目

一.简介 搭建第一个Spring Security项目,看看如何利用Spring Security来保护Java Web项目。 二. 创建SpringSecurity项目 我们这边使用idea进行创建。 2.1创建一个基于Maven的Project项目。 2.2设置项目名称和存储位置 2.3添加项目依赖 在pom.xml文件中&#x…

LeetCode 128 最长连续序列

LeetCode 128 最长连续序列 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/longest-consecutive-sequence/description/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给定一个未排…

【双系统ubuntu安装指引】配置一个顺手的深度学习环境

文章目录 前言1. 前置安装 前言 版本:ubuntu20.04 桌面版 normal安装 第一件事,切换源:换成阿里源 https://blog.csdn.net/u010092716/article/details/125832062 第二件事输入法安装,指引在这里 https://blog.csdn.net/q54434431…

JMeter性能测试:JMeter多用户并发模拟及压测结果分析

目录 JMeter设置 JMeter线程组 JMeter压测实例 View Results Tree Aggregate Report 命令行方式执行压测 jtl文件解析 JMeter多用户并发模拟 JMeter设置 多用户并发数的多少与计算机内存有关,设置 jmeter.bat (Windows) 或者 jmeter.sh (Linux):…

chapter6:SpringBoot与Docker

1. 简介 Docker是一个开源的轻量级应用容器引擎, 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到Linux机器中实现虚拟化。(沙箱机制) Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像…

《数据库系统概论》期末考试手写笔记汇总+考试注意事项+反思(超全整理总结!!!)

(一)期末考试手写笔记汇总 笔记内容为期末考试前整理(结合测试题PPT作业题目课本) 很多内容为纯手写,非常的全乎,预祝你期末可以考个好成绩🌹 第二章第三章(25分) (…

JS 深度克隆的实现方法

方法一:正统做法(扩展性高,推荐) function test() { this.a 1; this.b 2; } test.prototype.c 3; // 原型上的属性 const obj new test(); console.log("原对象", obj); console.log("克隆后的对象", dee…

Flume系列:案例-Flume负载均衡和故障转移

目录 Apache Hadoop生态-目录汇总-持续更新 逻辑: 2:案例需求-实现故障转移 3:实现步骤: 2.1:实现flume1.conf 2.2:实现flume2.conf - 端口4141 2.3:实现flume3.conf - 端口4142 3&#…

NIO编程总结

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题…

【如何在Java中使用ForkJoinPool】

目录 背景1.使用ForkJoinPool的线程池2.工作窃取算法3.ForkJoinPool的主要类4.使用递归操作5.资源任务6.何时使用ForkJoinPool7.总结 背景 使用ForkJoinPool去分解计算密集型任务且且并行地执行他们以获得更好的Java应用程序的性能。 ForkJoinPool是一个功能强大的Java类&…

程序员进银行科技岗——简单总结

银行的分类 Top0—中央银行: 仅有一家,即中国人民银行。 Top1—政策性银行: 国家开发银行、中国进出口银行、中国农业发展银行 Top2—国有商业银行: 国有六大行(中国工商银行、中国农业银行、中国银行、中国建设…

【计算机网络】前后端分离,HTTP协议,网络分层结构,TCP

❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 文章目录 前后端分类HTTP协议HTTP组成HTTP的版本HTTP的请求方式HTTP请求头HTTP 响应状态码 AJAX发送请求 …

555定时器的基本原理和应用案例

前言 555定时器常用于脉冲波形的产生和整形电路中,之前在查找555定时器的原理图和基本管脚信息时,网上的内容大多含糊不清,没有讲的很详细,要么只是单一的管脚图,要么就是简单的文字解释,并且大多数缺乏基…

2023 年大厂实习前端面试题(一):跨域问题

1. 跨域 1.1 跨域问题来源 跨域问题的来源是浏览器为了请求安全而引入的基于同源策略(Same-origin policy)的安全特性。 同源策略是浏览器一个非常重要的安全策略,基于这个策略可以限制非同源的内容与当前页面进行交互,从而减少…

linux 条件变量 pthread_cond_signal

专栏内容:linux下并发编程个人主页:我的主页座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 目录 前言 简介 应用场景 与互斥量/信号量的区别 接口介绍 变量定义 初始化 等待被唤…

ROS:ROS的一些基本命令行

目录 一、打开小海龟1.1终端,启动ROS Master:1.2终端2,启动小海龟仿真器:1.3终端3,启动海龟控制节点: 二、查看系统中的计算图三、节点命令3.1查看节点下的命令rosnode3.2显示节点列表rosnode list3.3查看节…

[CISCN2023]unzip

[CISCN2023]unzip 环境搭建 1.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body><form method"post" action"1.php" en…

Java 基础进阶篇(十六):多线程总结

文章目录 一、多线程概述二、多线程的创建1.1 方式一&#xff1a;继承 Thread 类1.2 方式二&#xff1a;实现 Runnable 接口匿名内部类实现方案 1.3 方式三&#xff1a;JDK 5.0新增: 实现 Callable 接口1.4 三种方式对比 二、Thread的常用方法三、线程安全与同步3.1 线程安全3.…

数据类型.

数据类型 数据类型分类 数值类型 tinyint类型 数值越界测试&#xff1a; mysql> create table tt1(num tinyint); Query OK, 0 rows affected (0.02 sec)mysql> insert into tt1 values(1); Query OK, 1 row affected (0.00 sec)mysql> insert into tt1 values(128…

数据仓库基础(通俗易懂,好文)数仓概念

1、数据仓库的概念 数据仓库&#xff08;英语&#xff1a;Data Warehouse&#xff0c;简称数仓、DW&#xff09;,是一个用于存储、分析、报告的数据系统。数据仓库的目的是构建面向分析的集成化数据环境&#xff0c;为企业提供决策支持&#xff08;Decision Support&#xff09…