Linux操作系统load average过高,kworker占用较多cpu

今天巡检发现,mc1的K8S服务器集群有些异常,负载不太均衡。其中10.2.75.32-34,49的load average值都在40以上,虽然机器的cpu核数都是40或48核不算严重,但也值得重视。

登陆机器查看,执行top发现,cpu的使用率接近40%,sys有20-30,user有10-20。也发现有大量的内核线程[kworker]占用比较多的使用率。如下是在下午7点多的截图,如果是高峰期9点,kworker的数字多数是在20-30之间,说明占用了比较多的cpu资源。

顺着这个方向排查。[kworker]这种内核线程使用的是内核工作队列模式,1个cpu就产生对应的1个内核线程。参考了这个文章:https://yq.aliyun.com/articles/504369

里面有说到kworker的排查方面,即用ftrace命令,排查workqueue_queue_work中什么函数调用最多。

在机器上安装ftrace,参考文章:https://linux.cn/article-9273-1.html

apt-get install trace-cmd

装上后运行一段时间查看

trace-cmd record -e workqueue:workqueue_queue_work

trace-cmd report > result

把结果保存到result后,进行分析结果得出:

这个dbs_timer的function运行数量极大。关键字搜索一下,感觉有点是这个引起的问题,因为这个函数是跟cpu动态调整频率有关系,而cpu调频是用来省电用的

具体通过学习了cpufreq的知识:

https://www.ibm.com/developerworks/cn/linux/l-cn-cpufreq/index.html

http://abcdxyzk.github.io/blog/2015/08/12/kernel-cpufreq/

里面提到一点:

Cpufreq 作为一个子系统最早被加入到 Linux 内核中时只配备了 governors ,分别是performance、powersave 和 userspace,ondemand。当用户选择使用 performance governor 时,CPU会固定工作在其支持的最高运行频率上;当用户选择使用 powersave governor 时,CPU会固定工作在其支持的最低运行频率上。因此这两种 governors 都属于静态 governor ,即在使用它们时CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors 对应的是两种极端的应用场景,使用 performance governor 体现的是对系统高性能的最大追求,而使用 powersave governor 则是对系统低功耗的最大追求。

安装下面的软件查看配置:

apt-get install cpufrequtils

但是我们的cpu配置是这样的:

初步怀疑:cpu的动态调频策略,导致每隔一段时间就要执行od_dbs_timers函数(调用dbs_timers的调用者),来判断cpu是否要进行降频或者升频,因为我们的进程数量特别多,所以也可能会加快这个策略的运行频率。最后就导致kworker占用比较高的资源。

为了确认是否这个引起的,下午7点多的时候在3台机器上进行了验证,把cpufreq的策略改为performance,这个策略上面说过cpu将不会进行调频,这3台机器都是kworker还处于比较高使用率情况的

for i in $(ls /sys/devices/system/cpu/*/cpufreq/scaling_governor);do echo performance > $i;done

查看实际的模式是否修改完成

等待片刻后,load average 下降很多, kworker也从top命令的首页中消失,cpu的sys和user使用率也降低,说明这个改动是有效的。

在类似K8S这种负载比较高,进程数量多的服务器上,应该要关闭这个调频功能,虽然不省电,但至少可以避免在负载出现一定程度的情况下内核线程反而会加大cpu资源消耗的情况。

Linux操作系统load average过高,kworker占用较多cpu的更多相关文章

  1. [转帖]进程上下文频繁切换导致load average过高

    进程上下文频繁切换导致load average过高 2016年6月26日admin发表评论阅读评论 http://www.361way.com/linux-context-switch/5131.ht ...

  2. Linux 通过 load average 判断服务器负载情况

    Linux中load average判断服务器负载情况 转载文章 http://www.111cn.net/sys/linux/56003.htm 写的比较详细,推荐看看.

  3. linux主机load average的概念&&计算过程&&注意事项

    最近开发的一个模块需要根据机房各节点的负载情况(如网卡IO.load average等指标)做任务调度,刚开始对Linux机器load average这项指标不是很清楚,经过调研,终于搞清楚了其计算方 ...

  4. 进程上下文频繁切换导致load average过高

    一.问题现象 现网有两台虚拟机主机95%的cpu处于idle状态,内存使用率也不是特别高,而主机的load average达到了40多. 二.问题分析 先在主机上通过top.free.ps.iosta ...

  5. Linux系统Load average负载详细解释

    我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟.五分钟.以及十五分钟的系统平均负载 例如我的某台服务器: $ uptime 09:50:21 up 200 da ...

  6. 理解Linux系统负荷load average

    理解Linux系统负荷   一.查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在 ...

  7. [进程管理] Linux中Load average的理解

    Load average的定义 系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树.如果一个进程满足以下条件则其就会位于运行队列中: - 它没有在等待I/O操作的结果 - 它没有主动进入等待状 ...

  8. linux c++应用程序内存高或者占用CPU高的解决方案_20161213

    对于绝大多数实时程序来说,实时处理相关程序中的循环问题所带来的对机器的损耗和自身的处理速度的平衡,以及与其他程序的交互以及对其他功能的影响难免会成为程序设计中最大的障碍同时也是最大的突破点. 在所有这 ...

  9. LINUX下CPU Load Average的一点研究

    背景: 公司的某个系统工作在基于Linux的Cent OS下,一个host下同时连接了许多client, 最近某台Host总是显示CPU Load Average过高,我们单纯的以为是CPU的占用过高 ...

随机推荐

  1. koa2中间件学习笔记

    洋葱模型 整个洋葱就是服务端程序app,每层洋葱皮都是一个中间件,传入requrest,经过各个中间件处理之后传出response. 新建中间件m1.js,m2.js koa-learn/middle ...

  2. Vue路由参数

    vue路由参数 1.参数router-link vue.prototype.xxx = {add:fn}`所有组件中,使用this.xxx就能拿到这个对象2.查询字符串 (1)配置: :to=&quo ...

  3. navicat远程连接mysql错误

    确保端口与服务正常. 如果都正常,那么服务有可能没有添加远程访问. 本人链接报错10060,那么问题出在阿里云的主机默认不开放3306端口,那么在安全组策略中加入对应的端口   登录后输入 use m ...

  4. 后台向前台响应的json数据格式的一些问题

    最近在写后台向前台easyUI页面发送数据时遇到的一些报错. 首先easyUI内部封装了许多的方法和对象,以至于很多参数都不清楚,需要查询,其次easyUI也是有内置ajax所以从后台响应回来的数据一 ...

  5. PAT Advanced 1108 Finding Average (20 分)

    The basic task is simple: given N real numbers, you are supposed to calculate their average. But wha ...

  6. 《JavaScript DOM编程艺术》(第二版)学习笔记(一)

    这本书去年就买了但一直没看,闲暇的时候看了下,发现里面写的内容还真是不错,所以决定一边在博客上记录些学习的笔记,以便以后观看及查找方便. js文件最好的做法是放在< body>标签里,这样 ...

  7. 前端笔记-html

    前端笔记html 前端三大利器,html(本源),css(着装),js(动作) html 学习html就是学习一套规则能够被浏览器识别,在页面中展示,一个页面只能运行一个html 标签 <> ...

  8. duilib学习领悟(3)

    世上本无窗口,窗口只是人的眼睛和电脑屏幕及鼠标键盘相互操作后的视觉效果! 下面我们来看看我们之前讲过的代码: class CDuiFrameWnd : public CWindowWnd, publi ...

  9. Maven 设置阿里镜像

    Maven 默认的中央仓库速度慢,可以考虑换成阿里的镜像.修改方式主要有两种. 1.针对所有项目修改中央仓库Maven 提供了全局配置文件 settings.xml 针对所有项目有效,位置是在安装目录 ...

  10. airflow--Error: Already running on PID 22603 (or pid file '/home/rdev/airflow/airflow-webserver.pid' is stale)

    kill这个残留进程然后直接重新启动airflow webserver就OK (wqbin) rdev@testhk1:~/etl/py_etl/warehouse$ cat /home/rdev/a ...