linux vps服务器进程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,释放内存,问题就会消失。但这不是长久之计,最好的方法还是花点钱升级下内存。我也知道随着访问量的不断上涨,肯定要升级下内存,但是没想到这个问题这么快就来了……

(0)

相关推荐

  • linux下查看swap分区被哪些进程占用实现脚本

    相信很多的系统管理员可能都遇见过这样的情况,用登录一台服务器,使用free命令查看内存,却发现swap分区被占用.那么到底是什么进程占用了这部分swap分区呢? 从2.6.16版本的kernel开始,我们可以使用proc文件系统中的smaps来查找这个问题.下边是一个列出所有进程占用swap分区情况的列表.可以通过简单修改就可以用于统计在/proc/$PID/smaps查出.以下是脚本: 复制代码 代码如下: for i in `cd /proc;ls |grep "^[0-9]"|a

  • linux添加和增大交换分区(swap)的方法

    1) 添加或扩大交换分区#dd if=/dev/zero of=/home/swap bs=512 count=1024000bs 是扇区大小 bs=512 指大小为512B count为扇区数量表示创建一个大小为512M 的文件 /home/swap 用空值填充.of位置可以自己调整.2) 创建交换分区/sbin/mkswap swapfile 3) 激活该交换分区/sbin/swapon swapfile4) 查询目前系统中生效的交换分区情况/sbin/swapon -s5) 设置开机自己挂

  • 详解Linux系统中的tempfs与/dev/shm

    tmpfs 是 Linux/Unix 系统上的一种基于内存的文件系统,即 tmpfs 使用内存或 swap 分区来存储文件. Linux 内核中的 VM 子系统负责在后台管理虚拟内存资源 Virtual Memory,即 RAM 和 swap 资源,透明地将 RAM 页移动到交换分区或从交换分区到 RAM 页,tmpfs 文件系统需要 VM 子系统的页面来存储文件.tmpfs 自己并不知道这些页面是在交换分区还是在 RAM 中:做这种决定是 VM 子系统的工作.tmpfs 文件系统所知道的就是它

  • linux vps服务器进程kswapd0与events/0消耗大量CPU的问题

    今天下午网站宕了两次机,发工单给阿里云,发现原因是服务器的CPU 100%了. 重启服务器后,使用 top 命令看看是哪些进程消耗那么大的 CPU 使用.盯了有好十几分钟,主要消耗 CPU 的进程有两个,一个是 mysql,另一个是 apache.下面的图可以看到,mysql 占用了很大部分的 CPU 使用.apache 单个进程虽然占得不多,但有不少个 apache 进程同时存在,也消耗了不少 CPU 的使用. 当然,这些不足以让服务器的 CPU 直接跑满挂掉,后来发现了两个大家伙: 当 my

  • linux vps服务器常用服务iptables策略

    vps服务器裸奔在公网上,总感觉有点不安全,没办法总得整点措施来加固下服务器呀,安全第一.linux系统自带防火墙必须要好好利用起来,可是我有一年多没写过防火墙策略了,该忘的都忘了,不该忘的也都忘得差不多了,看笔记,找找感觉. 目前这台vps上开启的服务有ssh,ftp,pptpd,shadowsocks等. 防火墙策略是默认策略是DROP的. 防火墙策略配置: [root@vultr scripts]# cat iptables.sh #/bin/bash #date:2017-04-10 #

  • Linux VPS/服务器 网站及数据库自动本地备份并FTP上传备份脚本

    准备工作: 需要提前在VPS安装好lftp,lftp功能上比较强大,CentOS直接执行:yum install lftp,Debian执行:apt-get install lftp . 需要在VPS上创建/home/backup/ 目录,在FTP上创建backup目录. 如果VPS上数据库不多的话使用Godaddy的免费空间就可以(10GB空间,300GB流量),只要注册个域名就免费送. 下面将备份脚本进行部分注释: 复制代码 代码如下: #!/bin/bash #Funciont: Back

  • Linux VPS/服务器上轻松导入、导出MySQL数据库的几种方法

    下面VPS侦探说一下几个解决方法: MySQL数据库导出 方法1:mysqldump命令 执行命令: /usr/local/mysql/bin/mysqldump -u 用户名 -p 数据库名 > 文件名 如果数据库用户名有密码密码,执行后会提示输入密码.如果数据库用户名没有密码,就将命令中的"-p"参数删除. 注意:推荐使用MySQL root帐号进行操作,因为有些数据库可能设置了只能对应的用户进行操作. 方法2:phpmyadmin phpmyadmin支持将数据库文件直接备

  • Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 在128M小内存VPS服务器上的配置优化第1/2页

    对其用户和应用程序来讲,每一个VPS平台的运行和管理都与一台独立主机完全相同,因为每一个VPS均可独立进行重启并拥有自己的root访问权限.用户.IP地址.内存.过程.文件.应用程序.系统函数库以及配置文件.VPS服务器最重要的指标就是内存大小,多个VPS服务器可以共享一颗CPU,但不能共享同一块内存.内存越大,价格越贵. 下面,以我的博客所在的VPS为例,介绍在128M内存下对 Nginx 0.7.x + PHP 5.2.6(FastCGI)+ MySQL 5.1 的优化. 至于 Nginx

  • Linux VPS及服务器更加安全之设置Putty SSH使用密钥登录

    在上一篇的确保Linux VPS及服务器更加安全之Xshell设置密钥登录文章中已经分享到XSHELL使用密钥登陆我们的VPS服务器确保机器的安全,但是很多同学们并不是都像老左一样用XSHELL,而还是有很多使用PUTTY登陆SSH,所以重新起一篇文章单独再分享用PUTTY设置密钥登陆Linux VPS主机的方法. PS:我们如果需要使用PUTTY一定要到正规的下载站最好是官方网站下载,所谓的破解版.绿色版.中文精简版等等可能有被人植入木马,这样会影响我们的账户安全. 第一步.生成密钥 看到很多

  • 确保Linux VPS及服务器更加安全之Xshell设置密钥登录

    随着我们网站及项目的需要,以及VPS主机/服务器的成本不断的降低,越来越多的站长用户将会选择VPS或者服务器作为我们的建站环境,但是对于用户来说基础的操作大部分都来自网上的教程,比如用SSH软件登陆之后然后就学着教程安装面板.一键包,然后就去搭建网站.我们经常有提到对于使用VPS的时候,所有的安全都需要我们自己来承担和维护,保持一定周期的备份数据是应该的,但也需要注意以及确保账户和系统的安全. 即便我们的项目没有招惹到其他同行或者故意想来破坏的,但是全球范围之内还是有玩家用软件在扫描所有的机器,

  • linux系统使用python监控apache服务器进程脚本分享

    crtrl.py监控Apache服务器进程的Python 脚本 复制代码 代码如下: !/usr/bin/env Python import os, sys, time while True: time.sleep(4) try: ret = os.popen('ps -C apache -o pid,cmd').readlines() if len(ret) < 2: print "apache 进程异常退出, 4 秒后重新启动" time.sleep(3) os.system

  • Linux CentOS服务器搭建与初始化配置教程

    这几天对服务器兴趣贼为浓厚,在虚拟机上装了一个CentOS7玩了玩,遇到过很多问题,比如网卡驱动设置,不能ping 等等问题,然后掏钱买个ECS搭服务器玩玩,下面就开始谢谢我的心路历程吧. 首先 买服务器,什么阿里云,百度云.腾讯云等等,随便买一个低配就好了,我买的学生机,9.9一个月,便宜的不能再便宜了,廉价的不能再廉价了. (自带mysql数据库,php Apache运行环境,FTP,VSftpd,这让我省了很多事) 第一步:安装jdk 去官网下载jdk(官网:http://www.orac

  • 宝塔Linux面板之好用免费的中文Linux VPS主机控制面板适合快速建站

    Linux免费开源,建站基本上都是选择Linux系统,而且Linux VPS比Windows VPS要便宜不少,成本大大降低,除非程序有特殊需要,否则还是建议大家使用Linux来当作网站服务器.不过,选择Linux有一个不好的地方就是操作麻烦些. 如果是Linux新手的话,在最开始建站时可以试试使用Linux VPS主机控制面板,只要在你的VPS主机上安装一个主机管理面板,这样你就可以像使用虚拟主机那样去绑定域名和管理MysqL数据库了,而且VPS主机允许你最大化地调整服务器配置参数,折腾过程也

随机推荐