本篇文章给大家带来的内容是关于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平均负载Load问题的详解的详细内容。更多信息请关注PHP中文网其他相关文章!

linux设备节点是应用程序和设备驱动程序沟通的一个桥梁;设备节点被创建在“/dev”,是连接内核与用户层的枢纽,相当于硬盘的inode一样的东西,记录了硬件设备的位置和信息。设备节点使用户可以与内核进行硬件的沟通,读写设备以及其他的操作。

区别:1、open是UNIX系统调用函数,而fopen是ANSIC标准中的C语言库函数;2、open的移植性没fopen好;3、fopen只能操纵普通正规文件,而open可以操作普通文件、网络套接字等;4、open无缓冲,fopen有缓冲。

在linux中,可以利用“rpm -qa pcre”命令判断pcre是否安装;rpm命令专门用于管理各项套件,使用该命令后,若结果中出现pcre的版本信息,则表示pcre已经安装,若没有出现版本信息,则表示没有安装pcre。

端口映射又称端口转发,是指将外部主机的IP地址的端口映射到Intranet中的一台计算机,当用户访问外网IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上;可以通过使用动态或固定的公共网络IP路由ADSL宽带路由器来实现。

在linux中,eof是自定义终止符,是“END Of File”的缩写;因为是自定义的终止符,所以eof就不是固定的,可以随意的设置别名,linux中按“ctrl+d”就代表eof,eof一般会配合cat命令用于多行文本输出,指文件末尾。

linux查询mac地址的方法:1、打开系统,在桌面中点击鼠标右键,选择“打开终端”;2、在终端中,执行“ifconfig”命令,查看输出结果,在输出信息第四行中紧跟“ether”单词后的字符串就是mac地址。

手机远程linux工具有:1、JuiceSSH,是一款功能强大的安卓SSH客户端应用,可直接对linux服务进行管理;2、Termius,可以利用手机来连接Linux服务器;3、Termux,一个强大的远程终端工具;4、向日葵远程控制等等。

linux中,lsb是linux标准基础的意思,是“Linux Standards Base”的缩写,是linux标准化领域中的标准;lsb制定了应用程序与运行环境之间的二进制接口,保证了linux发行版与linux应用程序之间的良好结合。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU
这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

Atom编辑器mac版下载
最流行的的开源编辑器

记事本++7.3.1
好用且免费的代码编辑器

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),