Linux慢 进程kswapd0与events/0消耗大量CPU的问题 一次网站宕机的处理
今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的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和内存接下来也需要升级,一个人维护这么一个站点还真的各种操心。
Linux慢 进程kswapd0与events/0消耗大量CPU的问题 一次网站宕机的处理的更多相关文章
- 进程kswapd0与events/0消耗大量CPU的问题
http://www.nowamagic.net/librarys/veda/detail/2539 今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 ...
- linux 将进程或者线程绑定到指定的cpu上
基本概念 cpu亲和性(affinity) CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性:再简单的点的描述就将指定的进程或线程绑定到相应的 ...
- Oracle-11g-R2(11.2.0.3.x)RAC Oracle Grid & Database 零宕机方式回滚 PSU(自动模式)
回滚环境: 1.源库版本: Grid Infrastructure:11.2.0.3.15 Database:11.2.0.3.15 2.目标库版本: Grid Infrastructure:11.2 ...
- Oracle-11g-R2(11.2.0.3.x)RAC Oracle Grid & Database 零宕机方式升级 PSU(自动模式)
升级环境: 1.源库版本: Grid Infrastructure:11.2.0.3.13 Database:11.2.0.3.13 2.目标库版本: Grid Infrastructure:11.2 ...
- linux之进程管理详解
|-进程管理 进程常用命令 |- w查看当前系统信息 |- ps进程查看命令 |- kill终止进程 |- 一个存放内存中的特殊目 ...
- linux常见进程与内核线程
发现大量jdb2进程占用io资源.jdb2进程是一个文件系统的写journal的进程 kthreadd:这种内核线程只有一个,它的作用是管理调度其它的内核线程.它在内核初始化的时候被创建,会循环运行一 ...
- Server Develop (七) Linux 守护进程
守护进程 守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装 ...
- BUG: scheduling while atomic: events/0/4/总结
对于Linux内核来说,Oops就意外着内核出了异常,此时会将产生异常时CPU的状态,出错的指令地址.数据地址及其他寄存器,函数调用的顺序甚至是栈里面的内容都打印出来,然后根据异常的严重程度来决定下一 ...
- Linux内核——进程管理与调度
进程的管理与调度 进程管理 进程描写叙述符及任务结构 进程存放在叫做任务队列(tasklist)的双向循环链表中.链表中的每一项包括一个详细进程的全部信息,类型为task_struct,称为进程描写叙 ...
- 【linux之进程管理,系统监控】
一.进程管理 前台进程:一般是指占据着标准输入和/或标准输出的进程后台进程:不占据默认开启的进程都是前台进程ctrl+C 中断ctrl+z 从前台转入后台bg 后台进程编号 让其在后台运行ls -R ...
随机推荐
- 手写签名-微信小程序
index.wxml <canvas type="2d" id="canvas" bindtouchmove="move" bindt ...
- SQL Server 项目中 SQL 脚本更新、升级方式,防止多次重复执行
MySQL 项目中 SQL 脚本更新.升级方式,防止多次重复执行 Oracle 项目中 SQL 脚本更新方式 一套代码,多家部署时,在SQL脚本升级时,通过一个SQL文件给运维,避免出现SQL执行序顺 ...
- 错误: -source 1.7 中不支持 lambda 表达式 (请使用 -source 8 或更高版本以启用 lambda 表达式)
Modules 把 Language level 调成 8
- NLog.config 配置
NLog.confg 参考配置, NLog 热生效不需要重启服务 <?xml version="1.0" encoding="utf-8" ?> & ...
- 遇到 Request header is too large,你是如何解决的?
看到群里有小伙伴问,这个异常要怎么解决: java.lang.IllegalArgumentException: Request header is too large 异常原因 根据Exceptio ...
- L3-001. 凑零钱-PAT团体程序设计天梯赛GPLT(01背包,动态规划)
韩梅梅喜欢满宇宙到处逛街.现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债.韩梅梅手边有 104 枚来自各个星球的硬币,需要请你帮她盘算一下 ...
- nginx导致获取客户端访问ip都是nginx服务器的地址问题解决
java 获取用户ip的方法 /** * 获得客户端 ip * @param request * @return */ public String getRemortIP(HttpServletReq ...
- <vue 组件 2、组件参数传递>
代码结构 一. 01-父组件向子组件传递数据 1. 效果 展示出来的数据都是父组件传给子组件的数据 2.代码 01-父组件向子组件传递数据.html <!DOCTYPE html> ...
- freeswitch自带yum源配置方式
概述 在开发过程中,我们使用freeswitch源代码编译安装的方式比较多,这种方式适合对fs比较了解,有一定基础的研发人员. 但是,对于希望快速上手使用fs普通功能的人员来说,源代码编译的方式就过于 ...
- 《IT项目管理知识》出书了,特点:全是干货
大纲目录,及内容如下.本书属于付费内容