进程kswapd0与events/0消耗大量CPU的问题

转载 2015年07月09日 10:29:46

http://www.nowamagic.net/librarys/veda/detail/2539

今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了。

重启服务器后,使用 top 命令看看是哪些进程消耗那么大的 CPU 使用。盯了有好十几分钟,主要消耗 CPU 的进程有两个,一个是 mysql,另一个是 apache。下面的图可以看到,mysql 占用了很大部分的 CPU 使用。apache 单个进程虽然占得不多,但有不少个 apache 进程同时存在,也消耗了不少 CPU 的使用。

当然,这些不足以让服务器的 CPU 直接跑满挂掉,后来发现了两个大家伙:

当 mysql 的 CPU 消耗降下来之后,出现了两个奇怪的进程:kswapd0 和 events/0。

1. kswapd0

Linux uses kswapd for virtual memory management such that pages that have been recently accessed are kept in memory and less active pages are paged out to disk.

(what is a page?)…Linux uses manages memory in units called pages.

So,the kswapd process regularly decreases the ages of unreferenced pages…and at the end they are paged out(moved out) to disk

kswapd0进程的作用:它是虚拟内存管理中,负责换页的,操作系统每过一定时间就会唤醒kswapd ,看看内存是否紧张,如果不紧张,则睡眠,在 kswapd 中,有2 个阀值,pages_hige 和 pages_low,当空闲内存页的数量低于 pages_low 的时候,kswapd进程就会扫描内存并且每次释放出32 个free pages,直到 free page 的数量到达pages_high。

查看内存使用率,发现内存确实不够用,有时候已经使用到了swap。

2. events/0

另一个进程 events/0 是工作者线程,主要是用来执行delay work的。先简单介绍一下。

我们都知道中断的底半部机制有三种:软中断、tasklet和工作队列。其中软中断很少使用,内核中只有网络在使用,它的延时是最小的。

tasklet是软中断的一个应用,所有线程注册的tasklet都会顺序被执行。因此tasklet的执行环境是软中断上下文,所以不能阻塞或者睡眠。一般情况下,tasklet的延迟也很小,可以满足大部分需求。

要是底半部中可能睡眠,那么只好使用工作队列了。工作队列其实是把要做的底半部的函数交给内核的专门线程去调用。这样工作队列就运行于线程环境了,不怕睡眠。当然,睡眠会影响注册到同一线程的其它底半部的执行,但不会引起大的问题。每个CPU都有一个线程(events/n,n是编号)负责执行工作队列,第一个CPU的线程是events/0,如果是双核的,还会有一个events/1线程。程序使用了工作队列,所以每次执行都会多出一个events/0(第一个CPU上工作线程)。

内核的软中断辅助处理线程ksoftirqd/n(n是CPU编号),它们负责出发软中断中触发的软中断。它们将重新触发软中断放在系统空闲时调用,而不是马上。这样用户空间不至于饥饿,重新触发的软中断也得以尽快执行。(《Linux内核设计与实现》85页)

宕机原因显而易见了,physical mem 不足,引起 swap 频繁。其实这也是 VPS 使用上的一个常见的问题了,通常是由 Apache 占用内存过多引起的。kswapd0 是系统的虚拟内存管理程序,如果物理内存不够用,系统就会唤醒 kswapd0 进程,由 kswapd0 分配磁盘交换空间作缓存,因而占用大量的 CPU 资源。重启Apache,释放内存,问题就会消失。但这不是长久之计,最好的方法还是花点钱升级下内存。我也知道随着访问量的不断上涨,肯定要升级下内存,但是没想到这个问题这么快就来了……

吐槽一下,虽然网站现在的规模也不算很大,但是慢慢也开始吃服务器的硬件了。CPU和内存接下来也需要升级,一个人维护这么一个站点还真的各种操心。

本文地址:http://www.nowamagic.net/librarys/veda/detail/2539,欢迎访问原出处。


kswapd进程cpu使用高导致死机

ubuntu内核更新到4.4.0-51之后,系统莫名出现死机,不定时的有kswapd进程占用CPU,原因如下 physical mem 不足,引起 swap 频繁读写。 kswapd0...
  • achejq
  • achejq
  • 2017年03月01日 12:11
  • 458

kswapd0 和 events/0。

今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了。 重启服务器后,使用 top 命令看看是哪些进程消耗那么大的 CPU 使用。盯了有好十几分钟,主要消耗 CPU 的进...
  • prike
  • prike
  • 2018年01月05日 10:51
  • 21

events/0--工作者线程

今天在“top”时无意中发现每次都会出现一个events/0进程。网上貌似很少对它的描述,总结一下《Linux内核设计与实现》中的内容(page87)。 我们都知道中断的底半部机制有三种:软中断、ta...
  • yuanlulu
  • yuanlulu
  • 2011年02月21日 19:16
  • 5994

shell脚本消耗机器的CPU实例

关于怎样用shell脚本消耗机器的CPU的问题 首先想到的还是使用死循环消耗CPU资源。搜索网上的资料,总结如下: 该脚本,如果服务器是有多颗CPU,可以选择消耗多少颗CPU的资源;使用方法很简单,参...
  • zj0910
  • zj0910
  • 2015年01月10日 11:56
  • 1504

如何解决HTTP通道大量消耗CPU问题

开启HTTPS通道后,如何解决SSL握手中大量消耗CPU问题
  • qq_37649170
  • qq_37649170
  • 2017年02月24日 17:43
  • 206

并发场景下HashMap.get导致cpu耗光

最近公司同事消息队列出现此种情况,以下分析 一、并发场景下HashMap.get导致cpu耗光 Java中HashMap.get导致cpu耗光bug,是由于HashMap.get里面的for循环出...
  • lizhitao
  • lizhitao
  • 2013年06月29日 21:40
  • 1832

kswapd0 进程CPU占用过高

kswapd0 进程CPU占用过高 。操作系统都用分页机制来管理物理内存,操作系统将磁盘的一部分划出来作为虚拟内存,由于内存的速度要比磁盘快得多,所以操作系统要按照某种换页机制将不需要的页面换到磁盘...
  • u012129607
  • u012129607
  • 2017年07月12日 11:13
  • 649

shell模拟程序消耗CPU资源

背景:应急方案预演:在做分布式系统的时候,部分系统资源比较空闲(性能好)。在测试高可用场景中想摸底整个系统在全部在高负载的情况下:系统的容灾、主备切换、冗余服务器拉起等,需要将服务器短板资源全部达到预...
  • yue530tomtom
  • yue530tomtom
  • 2017年07月13日 11:57
  • 614

oracle :性能优化的一个案例查找CPU 过高

 一.通过top命令看CPU的利用率: #top 以下是TOP的结果: last pid: 11225;  load averages:  7.95,  6.63,  6.25   1...
  • yaonianlong
  • yaonianlong
  • 2014年03月12日 21:45
  • 1773

jvm调优--查找最耗CPU的代码

今天在公司用mvn编译的时候,出现机器卡死的情况,让我深深的反省了一下。...
  • u014388509
  • u014388509
  • 2014年04月17日 11:25
  • 3341
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:进程kswapd0与events/0消耗大量CPU的问题
举报原因:
原因补充:

(最多只允许输入30个字)