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

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和内存接下来也需要升级,一个人维护这么一个站点还真的各种操心。

时间: 2024-10-12 20:28:25

进程kswapd0与events/0消耗大量CPU的问题的相关文章

获得进程/线程已经被分配的所有cpu时间片的总和

主要就是GetProcessTimes和GetThreadTimes这两个函数,它们获得的时间都是FILETIME,下面的程序包含了获得两个FILETIME的差(ms)的办法. 如果要显示FILETIME,可以用FileTimeToSystemTime这个函数(http://msdn.microsoft.com/en-us/library/windows/desktop/ms724280(v=vs.85).aspx) 补充,这里有一个跨平台的版本: (http://nadeausoftware.

linux 将进程或者线程绑定到指定的cpu上

基本概念 cpu亲和性(affinity) CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性:再简单的点的描述就将指定的进程或线程绑定到相应的cpu上:在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上,如此,CPU cache命中率就低了,当绑定CPU后,程序就会一直在指定的cpu跑,不会由操作系统调度到其他CPU上,性能有一定的提高. 软亲和性(affinity) 就是进程要在指

Oracle升级_oracle 10g版本由 10.2.0.1.0升级为10.2.0.4.0(即CPU升级)

CPU升级_ oracle 10g版本由 10.2.0.1.0升级为10.2.0.4.0 ***********************************************声明************************************************ 原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/huangyanlong). 表述有错误之处,请您留言,不胜感激. 提醒:点击目录,更有

Zabbix 3.0 监控交换机(CPU、内存监控及配置Trigger)

一.zabbix监控CPU 1.zabbix监控CPU及配置Triggers (1).要用到的OID        1.3.6.1.4.1.9.2.1.57.0  CPU utilization for one minute        1.3.6.1.4.1.9.2.1.58.0  CPU utilization for five minutes        1.3.6.1.4.1.9.2.1.56.0  CPU utilization for five seconds (1).创建ite

jps查看java进程中哪个线程在消耗系统资源

jps或ps -ef|grep java可以看到有哪些java进程,这个不用说了.但值得一提的是jps命令是依赖于/tmp下的某些文件 的. 而某些操作系统,定期会清理掉/tmp下的文件,导致jps无法查看到实际存在的java进程.不过jstat, jstack等命令也同样如此,所以当jps列不出进程的时候,这些命令也都不能用了.不在我们此次讨论范围之内. top -p $pid -H  加上-H这个参数后,会列出有哪些线程.这样就可以看到哪个线程id最消耗系统资源了.看到的线程id是10进制的

CentOS7.5 下zabbix3.0.18监控CPU负载

大纲: 一.环境准备 二.创建主机 三.创建监控项 四.查看监控流量图 一.环境准备 服务器1: IP:192.168.4.66,操作系统:CentOS 7.5 应用程序:zabbix-server-mysql-3.0.18 服务器2: IP:192.168.4.58,操作系统:CentOS 6.8 应用程序:zabbix-agent-3.0.18 二.创建主机 zabbix服务器上操作: 2.1.创建主机: 单击创建主机,创建主机:node1.com ,群组:OA server, agent代

asp.net mvc5+Echarts3.0+AspNet.SignalR2.0 实时监控cpu占用率推送

先看看效果: 感谢QQ群18668853的群主,无私的公开课,全是干货,当初学的时候,群主用的是jquery.flot做图表,我这里改成百度的Echarts3.0,这算是自己的修改吧,喜欢的可以去下载看看 看考的图表地址:http://echarts.baidu.com/gallery/editor.html?c=doc-example/tutorial-dynamic-data

android进程清理软件1.0超过金山百度清理软件-绿色无驻留

软件来由:魅族mx3升级4.x系统后lbe清理软件也无法使用了.lbe与魅族合作进行融合.不得已舍弃lbe,开始寻找其他清理软件.测试结果不太理想.不是搞不掉,就是太臃肿.说回来我只需要一个清理进程的软件....此软件诞生了.. 功能说明:1.软件绿色,无驻留2.可使用root或非root模式进行清理.非root模式下顽固进程与前台正在作业的应用无法清理,.比如你打开一个QQ,如果不适用ROOT清理,则不可能清理干净.呵呵流氓软件都一样.但如果我们打开root那就不一样了..3.可选是否清理系统

Linux学习之进程管理

|-进程管理     进程常用命令        |- w查看当前系统信息        |- ps进程查看命令        |- kill终止进程        |- 一个存放内存中的特殊目录/proc        |- 进程的优先级        |- 进程的挂起与恢复        |- 通过top命令查看进程        计划任务        |- 计划任务的重要性        |- 一次性计划at和batch        |- 周期性计划crontab    进程管理的概念