如何分析系统平均负载过高的原因_线上cpu负载过高如何排查

如何分析系统平均负载过高的原因_线上cpu负载过高如何排查前言我相信你应该用过uptime命令查询系统负载的情况,或者在各种监控终端上看到过系统load这一项,但是每次问别人到底什么是系统load?系统load到达多少算过高?又有哪些原因会造成系统load过载?我发现很少有人能回答清楚,大多数都觉得系统load过载就表示CPU使用率过载、然而实际上并不完全这样的,本文就来仔细分析一下到底有哪些原因会造成系统load过载!uptime命令还是先来看看uptime命令,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

我相信你应该用过uptime命令查询系统负载的情况,或者在各种监控终端上看到过系统load这一项,但是每次问别人到底什么是系统load?系统load到达多少算过高?又有哪些原因会造成系统load过载?我发现很少有人能回答清楚,大多数都觉得系统load过载就表示CPU使用率过载、然而实际上并不完全这样的,本文就来仔细分析一下到底有哪些原因会造成系统load过载!

uptime命令

还是先来看看uptime命令,
在这里插入图片描述
通过uptime命令可以观察到 load average(平均负载),三个数字分别表示过去1分钟、5分钟、15分钟的系统平均负载。

平均负载

提到平均负载,大多数人都认为就是系统单位时间内CPU的使用率,比如上面的0.02就表示过去5分钟系统CPU使用率为2%,很明显这样的理解是不正确的,不要以为负载和CPU使用率有什么关系。

我们可以通过man uptime介绍,来看看官方对于平均负载的定义是怎样的。

在这里插入图片描述
其中如下这段定义表明了什么是平均负载

System load averages is the average number of processes that are either in a  runnable  or  uninterruptable  state

System load averages是处于可运行不可中断状态的进程的平均数。

那什么是可运行和不可中断呢?这里需要解释一下。

所谓可运行是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程。
在这里插入图片描述
不可中断是处于不间断状态的进程,此流程是不可打断的,比如最常见的是等待磁盘设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。

所以,平均负载更准确的定义应该是单位时间内活跃进程数的指数衰减平均值。

平均负载到底是多少才合理

既然我们知道平均负载实际就是活跃的进程数,那最理想的状态下应该就是每颗CPU上刚好运行一个进程,这样才能充分的利用CPU,比如平均负载如果为2时,如果只有1颗CPU,则表示有一半的进程争抢不到CPU,如果有2颗CPU,则表示每颗CPU都得到了100%的利用,如果有4颗CPU,则表示CPU利用率只有50%。

一般情况下,当平均负载高于CPU数量70%时,就应该需要排查负载高的原因了,当然70%是一个经验值,冗余30%也是为了应对一些突发状况,或者系统短时高峰的场景,为了确保系统的稳定性,我们应当持续观察系统每天的负载情况,对负载进行实时监控,当持续出现负载异常时能够自动告警。

平均负载和CPU的关系

前面已经做过说明,平均负载高不一定就会带来CPU使用率高,因为平均负载表示的含义是,可运行或不可中断状态的进程,如果负载高是因为可运行进程造成的,那就会造成CPU使用率也高,但如果负载高是因为不可中断进程造成的,那CPU使用率是不会很高的。

CPU与进程1比1,CPU使用率高导致负载变高

使用stress来模拟平均负载高的情况

运行命令

stress --cpu 1

负载变高
在这里插入图片描述

CPU达到100%
在这里插入图片描述

I/O高,导致负载高

使用stress-ng,模拟I/O压力导致负载高的场景

运行命令

stress-ng -i 4 --hdd 1 --timeout 600

负载变高
在这里插入图片描述

CPU使用率并不高,但是iowait变的很高在这里插入图片描述

进程数超过CPU数,导致负载高

运用命令

 stress -c 8

负载变高
在这里插入图片描述

单个CPU使用率并不高
在这里插入图片描述

大多数都消耗在wait上,也就是等待CPU的时间上
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194435.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月5日 下午10:22
下一篇 2025年11月5日 下午11:01


相关推荐

  • Socketpair 简介「建议收藏」

    Socketpair 简介「建议收藏」socketpair-aslightgeneralizationofpipesusedfortwo-waystreamcommunication.以下内容来自:匠意雕码http://my.oschina.net/zengsai/blog/12583

    2022年10月14日
    4
  • Oracle 11g下载及安装

    Oracle 11g下载及安装Oracle11g下载及安装前言Oracle11g下载Oracle11g安装1.引入库2.读入数据总结前言因为笔者公司所用数据库是oracle,新同事来了都会习惯下重装电脑,所以记录下oracle的下载及安装。Oracle11g下载进入oracle官网,看到如下视图,点击进入oracle官网点击Products,选择OracleDatabase此时进入oracle数据库的详情页面,选择一个长期发行版本进行下载,此时长期发行的版本为19c选择下载19c的下载按钮,进入下载

    2022年5月29日
    38
  • AutoEventWireup 的意义

    AutoEventWireup 的意义AutoEventWireup指:如果Page指令的AutoEventWireup属性被设置为true(或者如果缺少此属性,因为它默认为true),该页框架将自动调用页事件,即Page_Init和Page_Load方法。在这种情况下,不需要任何显式的Handles子句或委托。

    2022年5月28日
    36
  • 京东金融大数据竞赛猪脸识别(8)- 识别方法之四

    京东金融大数据竞赛猪脸识别(8)- 识别方法之四除了softmax层构建的深度网络,Matlab还有一个简单的构建数据分类的函数,那就是patternnet,其用法类似。可以直接对图像特征数据处理,也可以对图像集处理。代码如下:%exam1.m用训练图像特征构建深度网络并计算测试图像得分clear;load(‘JDPig_mlhmslbp_spyr.mat’);m=numel(classe_name);n=length(y)…

    2022年6月21日
    27
  • SpringBoot整合SpringDataJPA

    SpringBoot整合SpringDataJPA一 SpringBootDa 介绍 SpringData 其实 SpringData 就是 Spring 提供了一个操作数据的框架 而 SpringDataJP 只是 SpringData 框架下的一个基于 JPA 标准操作数据的模块 SpringDataJP 基于 JPA 的标准数据进行操作 简化操作持久层的代码 只需要编写接口就可以 nbsp nbsp 二 SpringBoot 整

    2026年3月20日
    2
  • java input.nextline_关于java:Scanner#nextLine()留下一个剩余的换行符[通俗易懂]

    java input.nextline_关于java:Scanner#nextLine()留下一个剩余的换行符[通俗易懂]我一直遇到Scanner#nextLine的问题。根据我的理解,nextLine()应该返回当前输入流的其余部分,然后继续进行下一行。while(true){try{System.out.println(“Pleaseenteramonthinnumericform”);month=input.nextInt();System.out.println(“Pleaseenter…

    2022年5月11日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号