linux内存负载高怎么解决,Linux系统Load Average平均负载高如何处理

通过top或着uptime命令可以看到系统的平均负载,如下,分别表示过去 1 分钟、5 分钟、15 分钟的系统平均负载(之所以统计三个时间点数值,是为了更好的反映系统整体的负载趋势)

[root@k8s-master ~]# uptime

10:54:36 up 8 days, 12:31, 1 user, load average: 0.25, 0.51, 1.19

平均负载的含义:系统处于可运行状态和不可中断状态的平均进程数,也就是平均活跃进程数,这里的平均指的是指数衰减平均值,对应到进程的状态如下

可运行状态(Running或Runnable)

不可中断状态(Uninterruptible Sleep,也称为 Disk Sleep)

#查找R或D状态的进程ps aux | awk '{if($8 ~ /R|D/) print $0 }'[root@k8s-master ~]# ps aux | awk '{if($8 ~ /R|D/) print $0 }'root9 0.0 0.0 0 0 ? R Jun30 6:08[rcu_sched]

root30474 0.0 0.0 157456 1912 pts/0 R+ 11:10 0:00 psaux

root30475 0.0 0.0 113548 1232 pts/0 R+ 11:10 0:00 awk {if($8 ~ /R|D/) print $0 }

根据上述平均负载的定义,能够导致平均负载升高的场景有:

1、处于Running状态的进程大量消耗cpu(CPU密集型进程)

2、大量处于Runnable的进程,cpu会频繁进行上下文切换(寄存器、程序计数器)

操作系统管理的任务包括进程(线程),还有硬件通过触发信号,会导致中断处理程序的调用

上下文切换包括:进程上下文切换(虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的状态)、线程上下文切换、以及中断上下文切换

特权模式切换:用户态到内核态的上下文切换

查看系统总体的上下文切换情况

vmstat5[root@k8s-master sysstat]# vmstat 5procs-----------memory---------- ---swap-- -----io---- -system-- ------cpu-----r b swpdfree buff cache si so bi bo in cs us sy idwa st8 0 0 131084 203200 1801028 0 0 1724 166 2 8 12 7 79 2 0

0 0 0 130480 203216 1801272 0 0 42 81 1829 5047 8 5 86 1 0

0 0 0 129676 203232 1802092 0 0 161 110 1814 4840 16 6 76 1 0

0 0 0 129344 203236 1802496 0 0 78 70 1939 5258 14 12 73 1 0

0 0 0 128464 203248 1803156 0 0 120 106 1836 5195 9 6 84 1 0

1 0 0 128000 203256 1803612 0 0 91 98 1807 4726 16 6 77 1 0cs(context switch)是每秒上下文切换的次数。in(interrupt)则是每秒中断的次数。

r(Running or Runnable)是就绪队列的长度,

也就是正在运行和等待 CPU 的进程数。

b(Blocked)则是处于不可中断睡眠状态的进程数。

各类型中断次数统计

watch -d cat /proc/interrupts

查看每个进程的上下文切换次数

pidstat -w -t 1 (-t显示线程上下文切换统计)05:17:54 PM UID PID cswch/s nvcswch/s Command05:17:55 PM 0 1 1.03 0.00systemd05:17:55 PM 0 3 21.65 0.00 ksoftirqd/0

05:17:55 PM 0 9 100.00 0.00rcu_sched05:17:55 PM 0 296 12.37 0.00 kworker/0:1H05:17:55 PM 0 320 6.19 0.00 jbd2/vda1-8

05:17:55 PM 0 1139 1.03 0.00iscsid05:17:55 PM 1337 5766 13.40 0.00envoy05:17:55 PM 1337 6061 16.49 1.03envoy05:17:55 PM 1337 6065 16.49 0.00envoy05:17:55 PM 1 6141 1.03 2.06python05:17:55 PM 1337 6331 13.40 0.00envoy05:17:55 PM 0 10774 14.43 0.00envoy05:17:55 PM 0 10805 2.06 0.00YDLive05:17:55 PM 0 10844 15.46 0.00envoy05:17:55 PM 0 11532 3.09 1.03coredns05:17:55 PM 0 12767 40.21 15.46etcd05:17:55 PM 0 13170 10.31 0.00 kube-proxy05:17:55 PM 0 18892 1.03 0.00sshd05:17:55 PM 0 19758 1.03 0.00 kworker/u2:2

05:17:55 PM 0 27112 8.25 0.00 kworker/0:2

05:17:55 PM 0 28294 1.03 1.03pidstat05:17:55 PM 0 28365 2.06 0.00YDService

cswch:自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换。

nvcswch:非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换

3、存在处于D状态的进程

centos安装 pidstat和mpstat工具 yum install -y sysstat

#模拟进程消耗cpu

stress-i 1 --timeout 600#查看各cpu使用情况(我这里只有一个cpu)

(取5s内的数据计算一组平均值)

[root@k8s-master ~]# date;mpstat -P ALL 5 1Thu Jul9 14:32:06 CST 2020Linux3.10.0-957.27.2.el7.x86_64 (k8s-master.com) 07/09/2020 _x86_64_ (1CPU)02:32:07 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle02:32:12 PM all 96.79 0.00 3.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00

02:32:12 PM 0 96.79 0.00 3.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average: CPU%usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

Average: all96.79 0.00 3.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00Average:0 96.79 0.00 3.21 0.00 0.00 0.00 0.00 0.00 0.00 0.00#确定占用cpu较多的进程 pidstat的-u参数表示查看cpu指标

[root@k8s-master ~]# pidstat -u 5 1Linux3.10.0-957.27.2.el7.x86_64 (k8s-master.com) 07/09/2020 _x86_64_ (1CPU)02:37:27 PM UID PID %usr %system %guest %CPU CPU Command02:37:33 PM 0 25315 80.90 0.00 0.00 80.90 0stress02:37:33 PM 0 25539 0.00 0.39 0.00 0.39 0pidstat

Average: UID PID%usr %system %guest %CPU CPU Command

Average:0 25315 80.90 0.00 0.00 80.90 -stress

Average:0 25539 0.00 0.39 0.00 0.39 - pidstat

stress -i 1 --timeout 600通过mpstat可以看到cpu0有60%的时间片都在用于等待io,且这个过错不可中断

[root@k8s-master ~]# mpstat -P ALL 5 1Linux3.10.0-957.27.2.el7.x86_64 (k8s-master.com) 07/09/2020 _x86_64_ (1CPU)03:07:38 PM CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle03:07:43 PM all 9.58 0.00 30.00 60.00 0.00 0.42 0.00 0.00 0.00 0.00

03:07:43 PM 0 9.58 0.00 30.00 60.00 0.00 0.42 0.00 0.00 0.00 0.00Average: CPU%usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle

Average: all9.58 0.00 30.00 60.00 0.00 0.42 0.00 0.00 0.00 0.00Average:0 9.58 0.00 30.00 60.00 0.00 0.42 0.00 0.00 0.00 0.00

通过前面的命令ps aux也能看到stess进程状态为D

为什么会有D状态的进程?

不可中断状态的进程则是正处于内核态关键流程中的进程,并且这些流程是不可打断的,比如最常见的是等待硬件设备的 I/O 响应,也就是我们在 ps 命令中看到的 D 状态(Uninterruptible Sleep,也称为 Disk Sleep)的进程。比如,当一个进程向磁盘读写数据时,为了保证数据的一致性,在得到磁盘回复前,它是不能被其他进程或者中断打断的,这个时候的进程就处于不可中断状态。如果此时的进程被打断了,就容易出现磁盘数据与进程数据不一致的问题。所以,不可中断状态实际上是系统对进程和硬件设备的一种保护机制。

ps aux中各进程状态说明(man ps)

PROCESS STATE CODES

Here are the different values that the s,stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process:

D uninterruptiblesleep(usually IO)

R running or runnable (on run queue)

S interruptiblesleep (waiting foran event to complete)

T stopped by job control signal

t stopped by debugger during the tracing

W paging (not valid since the2.6.xx kernel)

X dead (should never be seen)

Z defunct ("zombie") process, terminated but not reaped by its parent

For BSD formats and when thestatkeyword is used, additional characters may be displayed:< high-priority (not niceto other users)

N low-priority (niceto other users)

L has pages locked into memory (for real-timeand custom IO)

s is a session leader

l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)+ is in the foreground process group

Linux】Top命令Load average系统平均负载 系统平均负载:被定义为在特定时间间隔内运行队列中的平均进程数,如(或)(即没有等待、没有wait,没有kill的)4核8线程:指使用了超线程技术,物理核心模拟成2个逻辑核心,像8核一样同时间执行8线程,并非真正8核心。和8核比,每个CPU没有独立的资源,两个线程需要同一个资源,其中一个要暂时停止,让出资源。查看系统负载的命令 TOP,uptime,w,cat /proc/loadavg。超过了5.00,你将失去你的睡眠,还要说明这情况发生的原因,千万不要让它发生。 阅读详情

相关推荐

性能测试指标-负载平均值(load average

Linux 的 ​。

l_q_l的专栏 1168

如何解决linux系统平均负载load average

正确的处理方式,是马上恢复 NFS 服务端,再度提供服务,刚才挂起的 df 进程发现了其苦苦等待的资源,便完成任务,自动消亡。处于uninterruptible sleep(D)状态的进程通常是在等待IO,比如磁盘IO,网络IO,其他外设IO,如果进程正在等待的IO在较长的时间内都没有响应,那么就很会不幸地被 ps看到了,同时也就意味着很有可能有IO出了问题,可能是外设本身出了故障,也可能是比如挂载的远程文件系统已经不可访问了,我这里遇到的问题就是由 down掉的NFS服务器引起的。

Jian Sun_的博客 6346

CPU负载很低,loadavg很处理方法

CPU空闲但是load average

m0_37625564的博客 2421

Linux Top 命令解析

Linux Top 命令解析   转自 http://www.jb51.net/LINUXjishu/34604.html TOP命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。 TOP是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状...

xieyanxy9的专栏 187

深入理解 Linux Load Average

一直不解,为什么io占用较时,系统负载也会变,偶遇此文,终解吾惑。 #1 load average介绍 ##1.1 load average 指标介绍 uptime和top等命令都可以看到load average指标,从左至右三个数字分别表示1分钟、5分钟、15分钟的load average: uptime 16:04:43 up 20 days, 6:08, 2 user...

OSKernelLAB(gatieme) 6809

压测时cpu不load average的问题排查及解决方法

一.背景说明 这次代码新增了入参解密,出参加密,然后压测过不了,接口响应时间超过公司规定了,遂排查之,然后做个记录。 二.排查过程 方式一: 打印耗时日志 1.怀疑是加解密算法太耗时,我们是采用RSA+AES的方式;所以先补日志,在代码前后打印耗时。 2.最终看日志发现在将流转换为String耗时比较多,应该是普通io的操作是阻塞的,io的read和write需要阻塞读或者写,在并发的情况下, 响应不过来。 这种方式比较反锁,而且在修改比较多的情况,需要补大量日志,不是很方便,建议采用第二种方式。 方式二

黄国攀的博客 1万+

Top load average 如何排查

lscpu是一个Linux/Unix命令,用于显示系统的CPU架构信息,包括CPU型号、CPU架构、CPU核心数量、CPU频率、CPU缓存信息等等。输出结果中包括进程的所有信息,包括父进程ID、会话ID、进程组ID、用户ID、CPU占用率、内存占用率、启动时间、命令等信息。该命令会输出系统的CPU架构信息,包括CPU型号、CPU架构、CPU核心数量、CPU频率、CPU缓存信息等等。两者都是用于列出当前运行的进程信息的命令,但是在不同的操作系统中有不同的用法和输出格式。

喝醉酒的小白 5972

linux 平均负载 load average 的含义

平均负载是指单位时间内,系统处于可运行状态和不可中断状态的平均进程数。和 CPU 使用率并没有直接的关系。

踏歌行的专栏 1989

Linux系统中的load average平均负载/运行队列)

1、load average 的含义 系统负载(System Load)是系统CPU繁忙程度的度量,即有多少进程在等待被CPU调度(进程等待队列的长度) linux系统中的Load对当前CPU工作量的度量。简单的说是进程队列的长度。Load Average 就是一段时间 (1 分钟、5分钟、15分钟) 内系统平均 Load 。 2、如何查看Load Average? top命令,w...

weixin_30279315的博客 808

Load Average (系统负载)

linux load average   系统平均负载被定义为在特定时间间隔内运行队列中的平均进程数。如果一个进程满足以下条件则其就会位于运行队列中: - 它没有在等待I/O操作的结果 - 它没有主动进入等待状态(也就是没有调用'wait') - 没有被停止(例如:等待终止) SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果已经无法反映在并发和压力下SIP的运行

evenness的专栏 1万+

平均负载Load average

load average 的含义平均负载(load average)是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数。 top命令中load average显示的是最近1分钟、5分钟和15分钟的系统平均负载系统平均负载表示   系统平均负载被定义为在特定时间间隔内运行队列中(在CPU上运行或者等待运行多少进程)的平均进程数。如果一个进程满足以下条件则其就会位于运行队列...

dixu7849的博客 444

Linux系统负载问题排查思路与解决方法

Linux系统负载问题排查思路与解决方法

Shyllin的博客 6070

生产问题排查--CPU的load average

printf “%x\n” pid 得到最耗时的PID需要转换成16进制,printf “%x\n” 7 得到 7n 十六进制就是0x7n。top -Hp pid 查出最占cpu的线程 如top -Hp 7。我这里的计算数据为22点多,所以还好,然后假设偏,进行定位问题。5.打开堆栈信息,寻找nid等于0x7n的线程。load:对计算机干活多少的度量。wa:cpu等待磁盘写入完成时间。us:用户态使用的cpu时间比。sy:系统态使用的cpu时间比。id:空闲的cpu时间比。

蛋炒番茄 1149

linux 进程 ksoftirqd/n 占用cpu 100%

1.背景 当来自设备的中断时,操作系统会暂停它正在执行的操作并开始寻址该中断。 在某些情况下,IRQ一个接一个地非常快,操作系统无法在另一个到达之前完成一个服务。当速网卡在短时间内收到大量数据包时,就会发生这种情况。 因为操作系统在到达时无法处理IRQ(因为它们一个接一个地到达得太快), 操作系统会将它们排队等待稍后由名为ksoftirqd的/n(n为cpu的逻辑号)的内核线程处理。 每个ksoftirqd/n内核线程都运行ksoftirqd()函数,实际上该函数执行下面的循环: for (

whatday的专栏 1万+

【Oracle生产运维】数据库服务器负载排查处理

在Oracle数据库运维工作中,经常会遇到Oracle数据库服务器平均负载load average)突然异常升,如果放任不管,严重的情况下会出现数据库宕机、服务器重启等重大故障。因此,当发现数据库服务器平均负载异常的时候,必须予以重视,并立即开展处理工作。很多刚工作或者是没这方面处理经验的同学可能遇到这种情况就会开始慌张,不知从何下手,无法快速定位出引起负载异常的原因。下面介绍我在工作中常用的排查思路供大家参考。截图的结果皆在实验环境中截取,与实际生产环境有较大出入,只作为操作演示。

qq_34595089的博客 2336

Linux Load Average多少合适?CPU Load使用率检查

显然,“load average”的值越低,例如0.2或0.3,意味着计算机(电脑)的工作量越小,系统负载越轻。假如CPU每分钟最多处理100个进程,则系统负载为0.2,这意味着CPU在这1分钟内仅处理20个进程;为了顺利运行计算机,系统负载不应超过1.0,因此无需等待任何进程,并且可以首先处理所有进程。首先,我们假设在最简单的情况下,你的计算机只有一个CPU,所有运算操作必须由该CPU完成。然后,通过将系统负载除以核心总数,只要每个核心的负载不超过1.0,计算机就会如常运行。

wade1010的专栏 1444
上一篇: php连接hbase操作,Python中HBase的操作示例代码分析
下一篇: linux四舍五入命令,详细解读Linux系统中ntpq命令的使用
Rain Zhang
博客等级 码龄9年 28粉丝 89原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值