《如何排查Linux系统平均负载过高》

news2025/3/10 8:47:52

   【系统平均负载导读】何为系统平均负载?假设一台云服务主机,突然之间响应用户请求的时间变长了,那么这个时候应该如何去排查?带着这个问题,我们对“平均负载”展开深入的探讨和研究。

     

        何为Linux系统的平均负载?单位时间内,系统中处于可运行状态不可中断状态的进程数,和CPU的使用率是不同的概念,下文将详细介绍CPU使用率的问题。

     那何为可运行状态的进程?正在使用CPU或者等待CPU资源的进程称为可运行状态的进程。

     不可中断的进程呢?正在处于内核态关键流程的进程,比如在等待IO响应的进程,就是不可中断的。用ps命令看进程信息时,进程状态为D的进程即是不可中断的进程。

      那这些进程加起来的总数刚好等于系统CPU的核数,那就是最理想化的状态,每个CPU都得到了利用,如果这些进程的数量超过了CPU的核数,就是过载了,至少在同一时刻,有些进程是没法得到CPU资源的。

     以笔者的Linux主机为例,笔者的CPU核数是4,可以通过如下的指令查看CPU的核数。

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

图片

     那再看看我Linux主机的平均负载,可以通过如下的指令:

watch -d uptime

图片

   每隔2s更新一次平均负载信息,比如上图中load average后面跟着便是平均负载的信息,为啥有3个?他们分别是过去 1 分钟、5 分钟、15 分钟的平均负载值,也就是说我的主机,从过去15分钟到最近的一分钟内,平均负载是在降低的,而且平均负载远小于CPU的核数。

     所以观察平均负载要结合这三个值来综合分析,看平均负载是呈现上升的趋势还是下降的趋势,那假如在单核的主机上,load average后面的值分别是1.73,0.60,7.98,那说明在最近一分钟内,系统有73%的过载,在过去5分钟的时间点,系统有40%空闲,在过去15分钟,系统有698%的过载。

平均负载过高,CPU的使用率会升高吗?

     了解这个问题前,先普及下CPU使用率,何为CPU使用率?单位时间内CPU繁忙情况的统计。

     1、CPU密集型进程,使用大量CPU会导致平均负载升高,此时这两者是一致的。此时平均负载CPU使用率可以画上等号。

    2、I/O 密集型进程,等待I/O也会导致平均负载升高,但 CPU 使用率不一定很高。

    3、系统存在大量等待CPU的进程(Runnable状态的进程)也会导致平均负载升高,此时CPU使用率平均负载可以画上等号。

如何排查平均负载过高的问题?

     笔者在自己的主机上使用stress命令模拟一个CPU使用率100%的场景。

stress --cpu 1 --timeout 600

图片

   随后我们新开启三个终端,分别查看下系统的平均负载、系统的CPU使用率、哪个进程导致了 CPU 使用率为 100%。

    可以很明显地看到系统的平均负载呈现出上升的趋势。

图片

   那如何查看系统的CPU使用率呢?首先为大家介绍一个命令mpstat,它是一个多核 CPU 性能分析工具,用来实时查看每个CPU的性能指标,以及所有 CPU 的平均指标。比如,输入如下指令:

// 监控所有CPU,后面数字5表示间隔5秒后输出一组数据mpstat -P ALL 5

图片

     可以从上图看到核1的CPU使用率为100%,在等待系统IO的占比iowait却为0,这说明平均负载的升高正是由于CPU使用率为100%导致的。

     那如何排查是哪个进程导致了CPU使用率到100%吗?此时可以在第四个终端用pidstat指令去排查,何为pidstat?pidstat是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标。输入如下指令:

//每间隔5s,输出一次数据pidstat -u 5 1

图片

    很明显此时CPU使用率最高的进程就是我们用stress命令模拟的进程。

    通过上述的示例,我们模拟了CPU使用率增高导致平均负载变高的场景,那如果是IO变高,平均负载会是怎样?

    继续使用stress命令模拟I/O压力,即不停地执行 sync:

$ stress -i 1 --timeout 600

    那看看平均负载:

图片

    看看进程CPU使用率:

图片

   还是可以很清晰看到stress模拟的进程CPU使用率达到了73.21%。

     最后再模拟下大量进程的场景,比如我在系统上用stress开启了8个进程,那么此时CPU使用率、平均负载又是怎样的?

// 开启8个进程
stress -c 8 --timeout 600

     看看平均负载:

图片

    此时可以看到系统在最近一分钟内负载已经超过了CPU的核数,148%过载了。

     查看进程的情况:

图片

    CPU占用率过高的进程全部都是stress模拟出来的进程。

结论:

    1、平均负载高可能是CPU密集型进程导致的。

    2、平均负载高并不一定代表CPU使用率高,还有可能是I/O繁忙导致的。

    3、负载高时,可使用mpstat、pidstat等工具,辅助分析负载的来源。

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

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

相关文章

基于DeepSeek实现PDF嵌入SVG图片无损放大

1. PDF中效果图 2. 询问Deepseek进行代码书写,不断优化后结果 /*** SVG工具类,用于生成价格趋势的SVG图表*/ public class SvgUtils {// SVG画布尺寸private static final int WIDTH 800;private static final int HEIGHT 500;private static final i…

整型的不同类型和溢出

一、整数的不同类型 不同编程语言中的整数类型主要通过以下两个维度区分: 1. 存储大小 字节数:决定整数能表示的范围(如 1字节8位)。 常见类型: byte(1字节)、short(2字节&#x…

使用express创建服务器保存数据到mysql

创建数据库和表结构 CREATE DATABASE collect;USE collect;CREATE TABLE info (id int(11) NOT NULL AUTO_INCREMENT,create_date bigint(20) DEFAULT NULL COMMENT 时间,type varchar(20) DEFAULT NULL COMMENT 数据分类,text_value text COMMENT 内容,PRIMARY KEY (id) ) EN…

小程序 wxml 语法 —— 41列表渲染 - 进阶用法

这一节讲解列表渲染的两个进阶用法: 如果需要对默认的变量名和下标进行修改,可以使用 wx:for-item 和 wx:for-item: 使用 wx:for-item 可以指定数组当前元素的变量名使用 wx:for-index 可以指定数组当前下标的变量名 将 wx:for 用在 标签上&…

python语言总结(持续更新)

本文主要是总结各函数,简单的函数不会给予示例,如果在平日遇到一些新类型将会添加 基础知识 输入与输出 print([要输出的内容])输出函数 input([提示内容]如果输入提示内容会在交互界面显示,用以提示用户)输入函数 注释 # 单行注释符&…

FPGA学习篇——Verilog学习5(reg,wire区分及模块例化)

1 何时用reg,何时用wire? 这个我找了一些网上的各种资料,大概说一下自己的理解,可能还不太到位... wire相当于一根线,是实时传输的那种,而reg是一个寄存器,是可以存储数据的,需要立…

Redis 数据持久化之AOF

AOF(Append Only File) 以日志的形式来记录每个写操作,将Redis执行过的所有写指令记录下来(读操作不记录),只许追加文件但不可以改写文件,redis启动之初会读取该文件重新构建数据,换…

【芯片验证】verificationguide上的74道SystemVerilog面试题

诧异啊,像我这种没事在网上各处捡东西吃的人为什么之前一直没有用过verificationguide这个网站呢?总不能是大家都已经看过就留下我不知道吧。前几天在论坛上和朋友谈论验证面试题时才搜到这个网站的,感觉挺有意思: .: Verification Guide :.​verificationguide.com/https…

Java后端高频面经——计算机网络

TCP/IP四层模型?输入一个网址后发生了什么,以百度为例?(美团) (1)四层模型 应用层:支持 HTTP、SMTP 等最终用户进程传输层:处理主机到主机的通信(TCP、UDP&am…

面试题(二)--Object中的常见方法

Object Java的Object是所有Java类的父类,所有的Java类直接或者间接的继承了Object类,Object类位于java.lang包中(编译时自动导入),主要提供了11种方法。 /*** native 方法,用于返回当前运行时对象的 Class…

运行OpenManus项目(使用Conda)

部署本项目需要具备一定的基础:Linux基础、需要安装好Anaconda/Miniforge(Python可以不装好,直接新建虚拟环境的时候装好即可),如果不装Anaconda或者Miniforge,只装过Python,需要确保Python是3.…

设备管理系统功能与.NET+VUE(IVIEW)技术实现

在现代工业和商业环境中,设备管理系统(Equipment Management System,简称EMS)是确保设备高效运行和维护的关键工具。本文采用多租户设计的设备管理系统,基于.NET后端和VUE前端(使用IVIEW UI框架&#xff09…

数据类设计_图片类设计之2_无规则图类设计(前端架构基础)

前言 学的东西多了,要想办法用出来.C和C是偏向底层的语言,直接与数据打交道.尝试做一些和数据方面相关的内容 引入 接续上一篇数据类设计_图片类设计之1_矩阵类设计(前端架构基础)-CSDN博客,讨论非规则图类型的设计 无规则图的简单定义 前面的矩阵类,有明显的特征:长,宽,行和…

aws(学习笔记第三十二课) 深入使用cdk(API Gateway + event bridge)

文章目录 aws(学习笔记第三十二课) 深入使用cdk学习内容:1. 使用aws API Gatewaylambda1.1. 以前的练习1.2. 使用cdk创建API Gateway lambda1.3. 确认cdk创建API Gateway lambda 2. 使用event bridge练习producer和consumer2.1. 代码链接2.2. 开始练习2.3. 代码部…

计算机视觉算法实战——老虎个体识别(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​ 1. 领域介绍 老虎个体识别是计算机视觉中的一个重要应用领域,旨在通过分析老虎的独特条纹图案,自动识别和区…

Qt添加MySql数据库驱动

文章目录 一. 安装MySql二.编译mysql动态链接库 Qt版本:5.14.2 MySql版本:8.0.41 一. 安装MySql 参考这里进行安装:https://blog.csdn.net/qq_30150579/article/details/146042922 将mysql安装目录里的bin,include和lib拷贝出来…

蓝桥杯备考:图论初解

1:图的定义 我们学了线性表和树的结构,那什么是图呢? 线性表是一个串一个是一对一的结构 树是一对多的,每个结点可以有多个孩子,但只能有一个父亲 而我们今天学的图!就是多对多的结构了 V表示的是图的顶点集…

【每日学点HarmonyOS Next知识】输入框自动获取焦点、JS桥实现方式、Popup设置全屏蒙版、鼠标事件适配、Web跨域

1、HarmonyOS TextInput或TextArea如何自动获取焦点? 可以使用 focusControl.requestFocus 对需要获取焦点的组件设置焦点,具体可以参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attribut…

网络空间安全(19)CSRF攻防

一、简介 跨站请求伪造(Cross-Site Request Forgery,简称CSRF)是一种网络攻击方式。攻击者通过诱导受害者访问恶意页面,利用受害者在被攻击网站已经获取的注册凭证(如Cookie),绕过后台的用户验证…

DEV C++安装

点击----我接受 点击--下一步 选择安装路径: D盘安装选择路径: 点击----安装等待安装完成点击---完成即可 一路下一步即可