进程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,欢迎访问原出处。


相关文章推荐

有关kswapd0的问题

最近安装了双系统红毛企业6和win7,win7运行一切正常,但是切换到redhat6.0系统中后电脑的风扇就加速的转动,查看进程发现有一个进程ksapd0运转占cup100%,这个进程怎么也杀死,在网...

kswapd

Subject:这是当时开发VM算法时,阅读2.4.22内核的一些阅读笔记,仅供参考,并且不保证每段解释都是正确的。 张昀Author: 张昀阅读笔记 – Kswapd张昀 * 2003.10.2内核...

kswapd0,kjournald,pdflush 是干嘛的?

以前服务器不忙的时候没有发现这几个进程,自从装了2个mysql以后,负载跑起来了,发现有几个不知道作用的进程,google之后,记之290 root      10  -5     0 &#...

kswapd0、kjournald、pdflush、kblocked、migration进程含义

理想情况下,您应该明白在您的系统中运行的每一个进程。要获得所有进程的列表,可以执行命令 ps -ef(POSIX 风格)或 ps ax(BSD 风格)。进程名有方括号的是内核级的进程,执行辅助...

kswapd0 swap管理器,kjournald ext3日志进程,pdflush

原文:http://hi.baidu.com/dmkj2008/blog/item/a863231f0f284075f624e43a.html 1.kswapd0 Linux uses k...
  • Byane
  • Byane
  • 2011-11-30 10:42
  • 1425

解决Java从MySQL读取大量数据时卡在SocketInputStream.socketRead0的问题

今天晚上突然有个服务无法启动。这个服务在启动的时候会从数据库中加载一些数据。查看日志:有开始加载的日志,但没有完成加载的日志,判断问题是在加载数据时卡住。用top查看进程,发现CPU占用为0%。又怀疑...

Oracle系统SQL消耗大量资源(bsa0wjtftg3uw)

Oracle系统SQL消耗大量资源(bsa0wjtftg3uw) top sql第一条是select file# from file$ where ts#=:1 现象: 客户反馈AWR中TOPSQL第...

小议 Thread.sleep(0) 造成 CPU占用率高的问题

首先,我们要清楚相关概念: 1.CPU使用率其实就是你运行的程序占用的CPU资源,表示你的机器在某个时间点的运行程序的情况。使用率越 高,说明你的机器在这个时间上运行了很多程序,反之较少。使用率的...

SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0 - 管道的另一端上无任何进程。

如果你在使用新创建的 SQL Server 用户名和密码 对数据库进行连接的时候出现了下面的问题。阅读本篇博客可以帮助你解决这个问题。已成功与服务器建立连接,但是在登录过程中发生错误。(provide...

解决SQL Server 2005 登录问题(provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。)

已成功与服务器建立连接,但是在登录过程中发生错误。 (provider: 共享内存提供程序, error: 0 - 管道的另一端上无任何进程。)用户 'sa' 登录失败。该用户与可信 SQL Serv...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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