linux平均负载的理解及原因排查

当系统响应缓慢时,一般会用top或uptime命令查看系统负载是否过高。 例如输入uptime命令显示如下图,其中23:47:19表示现在的时间,up 260 days,14:39表示系统运行了多久,1 user表示当前登录用户数,最重要的是 load average,有三个数值,分别表示过去1分钟、5分钟、15分钟系统的负载。系统负载的英文解释为:

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.

系统负载表示每分钟处于可运行状态(运行态和就绪态)以及不可中断状态(等待io)的进程数目,且没有做归一化处理。

图1 uptime命令显示图

当平均负载等于CPU核数时是比较合理的状态,不会存在进程等待且也不会有CPU空闲浪费,查看CPU核数的命令如下:

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

uptime命令过去1分钟,5分钟,15分钟的负载隐含了系统负载的变化趋势,假如这三个指标的值差不多,说明系统比较稳定,假如过去1分钟的负载比过去15分钟大很多,说明系统负载在增加,反之,则说明负载在减小。

平均负载和CPU使用率不是一个概念,平均负载高不能说明CPU使用率高,因为平均负载除了包括正在使用CPU的进程,还包括在等待CPU的进程和等待io的进程。

CPU使用率表示单位时间CPU的利用情况,CPU使用率和平均负载的关系有三个场景:

  1. CPU密集型进程,大量使用CPU会使CPU利用率和平均负载都增高。
  2. IO密集型进程,会使平均负载增高但CPU使用率不一定会增高。
  3. 大量等待CPU的进程调度会使平均负载增高,CPU使用率也会增高

可使用stress模拟这三种情况,stress为linux下的压测工具,并用mpstat和pidstat查看根源,mpstat显示CPU的使用情况,pidstat监视linux任务的统计信息,安装如下:

yum install stress sysstat

stress命令常用参数如下:

-c, --cpu N
    spawn N workers spinning on sqrt()

-i, --io N
    spawn N workers spinning on sync()

-t, --timeout N
    timeout after N seconds

1.用stress模拟CPU密集型进程

用uptime查看负载

用mpstat查看CPU使用情况,如下,其中-P的含义为

-P { cpu [,...] | ON | ALL }
  Indicate the processor number for which statistics are to be reported. cpu is the processor number. Note that processor 0 is the first processor. The ON keyword indicates that statistics
are to be reported for every online processor, whereas the ALL keyword indicates that statistics are to be reported for all processors.表示显示哪个处理器的使用情况. 5表示统计间隔为5s

可以看到CPU使用率很高,pidstat查看具体占用CPU的进程,进程stress占的CPU达到99%,-u的含义为Report CPU utilization,5表示间隔5秒,1表示输出一组数据就停止,假如不加1,则会一直输出。

2.stress模拟io密集型进程

uptime查看负载,可以看到负载已经很高(单核CPU)

mpstat查看负载升高原因,可以看到CPU0的iowait高达88.31%,说明CPU有大量的时间在等待磁盘io,负载是由io进程导致,iowait含义:%iowait
Show the percentage of time that the CPU or CPUs were idle during which the system had an outstanding disk I/O request.

定位具体的进程,可以看到是stress-ng-hdd,wait含义

Percentage of CPU spent by the task while waiting to run.

3.stress模拟大量进程场景

uptime查看负载

mpstat可以看到CPU利用率已经很高

pidstat查看每个进程的CPU使用情况,四个stress进程均在有较高的百分比在等待CPU(%wait)

当uptime负载较高时,可能是CPU使用率较高,也可能是io进程较多,可以用mpstat查看CPU使用情况,并用pidstat查看定位具体进程

原文地址:https://www.cnblogs.com/killianxu/p/10023918.html

时间: 2024-08-29 11:58:50

linux平均负载的理解及原因排查的相关文章

1.linux平均负载

这里我说的不会很晦涩难懂,争取用很容易理解的方式展示我学习后的理解 1.首先介绍下stress命令参数,下面我们会使用到 -? 显示帮助信息 -v 显示版本号 -q 不显示运行信息 -n 显示已完成的指令情况 -t --timeout N 指定运行 N 秒后停止 --backoff N 等待 N 微秒后开始运行 -c 产生 n 个进程,每个进程都反复不停的计算随机数的平方根 -i 产生 n 个进程,每个进程反复调用 sync(), sync() 用于将内存上的内容写到硬盘上 -m --vm n

02 基础篇:到底应该怎么理解“平均负载”?

02 | 基础篇:到底应该怎么理解"平均负载"? 每次发现系统变慢时,我们通常做的第一件事,就是执行 top 或者 uptime 命令,来了解系统的负载情况.比如像下面这样,我在命令行里输入了 uptime 命令,系统也随即给出了结果. uptime 02:34:03 up 2 days, 20:14, 1 user, load average: 0.63, 0.83, 0.88 但我想问的是,你真的知道这里每列输出的含义吗?我相信你对前面的几列比较熟悉,它们分别是当前时间.系统运行时

【Linux性能调优一】观大局:系统平均负载load average

要测试linux系统性能及调优,首先要从全局检查linux的平均负载 1.什么是平均负载 load average 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数.也可简单理解为平均活跃进程数. 简单来说,平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系. 所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runn

Linux系统平均负载3个数字的含义

越来越多人开始接触Linux操作系统,从VPS到无线路由的刷机系统(如OpenWRT.Tomato),同时也必不可少地会在各式各样的探针和系统监测界面上看到"系统平均负载"或者"Load Average"这样的字眼,但是它并不像我们习惯中Windows.Mac操作系统提供百分比显示CPU.内存占用率,而是以几个用空格隔开的浮点数来表示系统平均负载,那么它们到底是什么意思呢?又如何衡量系统负载及系统的稳定性呢? 系统平均负载-基本解释 在Linux shell下,有很

linux 性能调优 平均负载

使用 uptime 查看 系统负载情况 load average: 依次则是过去 1 分钟.5 分钟.15 分钟的平均负载 简单来说,平均负载是指单位时间内,系统处于 可运行状态 和不可中断状态 的平均进程数,也就是平均活跃进程数,它和 CPU 使用率并没有直接关系. 所谓可运行状态的进程,是指正在使用 CPU 或者正在等待 CPU 的进程,也就是我们常用 ps 命令看到的,处于 R 状态(Running 或 Runnable)的进程. 不可中断状态的进程则是正处于内核态关键流程中的进程,并且这

linux /proc/loadavg(平均负载)

一.什么是系统平均负载(Load average)?在Linux系统中,uptime.w.top等命令都会有系统平均负载load average的输出,那么什么是系统平均负载呢?系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数.如果一个进程满足以下条件则其就会位于运行队列中: - 它没有在等待I/O操作的结果 - 它没有主动进入等待状态(也就是没有调用'wait') - 没有被停止(例如:等待终止) 例如: [[email protected] root]# uptime 7:51pm

深度理解平均负载

为了进一步理解系统负载,需要做一些假设.假设系统负载如下:23:16:49 up 10:49, 5 user, load average: 1.00, 0.40, 3.35在单核系统中意味着:CPU 被充分利用(100%):最近的 1 分钟有 1 个进程在运行.CPU 有 60% 处于空闲状态:在最近的 5 分钟没有进程等待 CPU 时间.CPU 平均过载了 235%:最近的 15 分钟平均有 2.35 个进程在等待 CPU 时间.在双核系统中意味着:有一个 CPU 处于完全空闲状态,另一个 C

Linux SSH端口更改和SSH远程连接服务慢原因排查

Linux SSH端口更改和优化 为什么需要更改SSH默认连接端口 Windows服务器的默认远程管理端口是3389,Linux服务器的默认端口是22.如果在公网上,经常会被工具扫,这是不安全的,为了系统安全,需要更改默认的配置. Linux 6 操作过程 更改配置文件 # cp /etc/ssh/sshd_config /etc/ssh/sshd_config.ori 更改配置前备份 # vi /etc/ssh/sshd_config 编辑sshd_config ####添加如下内容####

到底应该怎么理解“平均负载”?

极客时间-倪鹏飞 课程<Liunx性能优化实战>学习专栏 ............................................................................................... 一.什么是平均负载 正确定义:单位时间内,系统中处于可运行状态和不可中断状态的平均进程数.错误定义:单位时间内的cpu使用率.可运行状态的进程:正在使用cpu或者正在等待cpu的进程,即ps aux命令下STAT处于R状态的进程不可中断状态的进程: