Linux平均负载Load问题的详解

发布时间 - 2019-03-12 00:00:00    点击率:

本篇文章给大家带来的内容是关于Linux平均负载Load问题的详解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

有一回面试,面试官提了一个问题,cpu 使用率不高,但是 load (平均负载) 很高,你如何查找问题?

当时我不明白 Load 的意思,面试官解释说这个指标反映不可中断状态的进程比较多。我遂根据过往后端开发经验,回答可能系统中 io 阻塞比较多,多发于网络 io 问题,用命令 netstat -tnp 看看 tcp 连接中 time_wait 状态多不多...

我知道我的回答很片面,事后复习,做笔记。

什么是平均负载

熟悉 Linux 者知道,使用 top uptime 命令可以查看 load average 指标。

使用 man uptime 查看 Load average 解释:

System load averages is the average number of processes that are either in a runnable or uninterruptable state.   A  process  in  a  runnable state  is  either using the CPU or waiting to use the CPU.  A process in uninterruptable state is waiting for some I/O access, eg waiting for disk.  The averages are taken over the three time intervals.  Load averages are not normalized for the number of CPUs in a system, so a  load average of 1 means a single CPU system is loaded all the time while on a 4 CPU system it means it was idle 75% of the time.

理解关键地方,平均负载是指,在单位时间内,系统中处于 可运行状态 与 不可中断状态 的平均进程数,简称平均活跃进程数。值得注意的是,它与 CPU 使用率没有直接关系

使用命令 ps aux 可以查看进程的状态 stat,如本文要注意的:

R 状态,可运行状态 ( Running / Runnable ),正在使用 CPU 或者正在等待 CPU 的进程D 状态,不可中断状态( Uninterruptitle Sleep, 又称 Disk Sleep ),正处于内核态关键流程中的进程,并且是不可中断的。

D 状态为何不可打断呢,举个例子,系统调用起硬件设备的 I/O 响应,为了保证数据的一致性,在磁盘设备返回数据前,它是不能倍其他进程或者中断打断的,如果被打断,就容易造成磁盘数据与进程数据不一致的问题。于是,不可中断(D)状态是系统对进程与硬件设备的一种保护机制。

平均活跃进程数,严格意义上,它是活跃进程数的指数衰减平均值(某个量的下降速度和它的值成比例)。通常情况下,理解为单位时间上的活跃进程数即可。

CPU 利用率与平衡负载

从 CPU 角度来说,Load average 只是反映单位时间内占用 CPU 的进程数量,而 CPU 利用率与进程数量没有直接关系,我们可以使用命令 top vmstat 查看 CPU 的利用率,有以下几个指标:

%us:表示用户空间程序的cpu使用率(没有通过nice调度)%sy:表示系统空间的cpu使用率,主要是内核程序。%ni:表示用户空间且通过nice调度过的程序的cpu使用率。%id:空闲cpu%wa:cpu运行时在等待io的时间%hi:cpu处理硬中断的数量%si:cpu处理软中断的数量%st:被虚拟机偷走的cpu

如何衡量合理的平均负载

一般来讲,Load average 低于 CPU 数量的话,机器性能满足服务需求,超出一些也没关系,Load average 不直接代表 CPU 利用率,可能是 io 阻塞比较多。当 Load average 高于 CPU 数量的 70%,就可能导致进程响应变慢,进而影响服务的正常功能。

从历史变化量来看

一般来讲,top uptime 提供 load average 三个时间点的指标,分别是:1分钟、5分钟、15分钟。这反映了系统最近的状态变化趋势。在实际生产环境中,我们需要做长期的监控记录。如果有异常的数值变化,比如平均负载数是CPU的两倍,需要分析调查问题。

从平衡负载与 CPU 利用率 这两类指标综合分析

两类指标的不同,组合出以下几种可能情况:

Load average 高,CPU use 高,要么运行了 CPU 密集型进程(线程),要么有大量等待 CPU 的进程(线程)调度Load average 高,CPU use 底,运行了 IO 密集型进程两者都比较低,正常Load average 底,CPU use 高,这是不存在的

模拟案例与工具

我们如何分析平衡负载与 CPU 利用率这两类指标不同组合的案例,寻找造成指标变化的来源?

以下环境为 Linux Arch 4.19 / 4 CPU / 8G Memory

工具列表

stress 系统压力测试工具

sysstat 性能分析工具包:

mpstat 多核 CPU 分析性能工具,mp 的意思是 multi processors (多处理器)pidstat 进程性能分析工具,pid 意为进程 ID。它用于查看进程的 CPU、内存、I/O以及上下文切换等指标

模拟场景

使用 stress 可以模拟以下场景

CPU密集型进程

# 模拟一个进程, 对 cpu 使用率 100%,限时 600s
stress --cpu 1 --timeout 600

IO 密集型进程

stress 的 -i 选项,spawn N workers spinning on sync()

# 模拟一个进程不停的执行 sync
stress -i 1 --timeout 600
大量进程的场景
# 模拟16个进程, 对 cpu 使用率 100%,限时 600s
stress --cpu 16 --timeout 600

工具指标

mpstat -P ALL 5 监控所有 CPU,每隔5秒输出一组数据,注意指标 %usr 使用率,%iowait IO 阻塞时间,从这可以判断是 CPU 密集型还是 IO 密集型pidstat -u 5 1 统计间隔5秒内,使用过 CPU 的进程的数据,注意指标 %usr 使用率,%wait 等待使用 CPU 的时间,从这可以判断是否进程(线程)过多


# linux  # 比较多  # 两类  # 它是  # 时间内  # 多核  # 这可  # 可以查看  # 直接关系  # 的是  # 面试官 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251811 】 【 AI营销90571


相关推荐: Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  如何用西部建站助手快速创建专业网站?  Laravel如何使用Eloquent ORM进行数据库操作?(CRUD示例)  详解Android图表 MPAndroidChart折线图  大连网站制作公司哪家好一点,大连买房网站哪个好?  如何用好域名打造高点击率的自主建站?  三星、SK海力士获美批准:可向中国出口芯片制造设备  如何选择PHP开源工具快速搭建网站?  Bootstrap整体框架之CSS12栅格系统  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  智能起名网站制作软件有哪些,制作logo的软件?  Python制作简易注册登录系统  清除minerd进程的简单方法  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  java获取注册ip实例  免费视频制作网站,更新又快又好的免费电影网站?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  Python结构化数据采集_字段抽取解析【教程】  免费网站制作appp,免费制作app哪个平台好?  Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置  如何在Windows环境下新建FTP站点并设置权限?  如何挑选高效建站主机与优质域名?  Laravel Seeder填充数据教程_Laravel模型工厂Factory使用  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何快速生成可下载的建站源码工具?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  LinuxCD持续部署教程_自动发布与回滚机制  如何撰写建站申请书?关键要点有哪些?  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  WordPress 子目录安装中正确处理脚本路径的完整指南  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel如何生成和使用数据填充?(Seeder和Factory示例)  Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】  Laravel如何实现本地化和多语言支持?(i18n教程)  创业网站制作流程,创业网站可靠吗?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤  香港服务器选型指南:免备案配置与高效建站方案解析  详解jQuery中的事件  Laravel如何处理CORS跨域请求?(配置示例)  开心动漫网站制作软件下载,十分开心动画为何停播?  黑客如何通过漏洞一步步攻陷网站服务器?  Android滚轮选择时间控件使用详解  Laravel怎么在Controller之外的地方验证数据  网站页面设计需要考虑到这些问题