导致Linux cpu占满的元凶:kswapd0

1.问题起源

有一批虚拟机都是4C8G规格的,上面都运行着数据库或者mq,kafka等程序,偶尔会出现个别组件失联的情况,使用SSH登录的时候异常的慢,即便登录进去了一条命令也得卡十几秒才能执行完,使用top查看时发现有一个叫kswapd0的进程占用了大量CPU资源,而且磁盘等待(wa)特别高。


kswapd0进程.png

从上图中可以看到,cpu总占用率在40%左右,磁盘等待在43%上下浮动,cpu的大量的时间都在等待磁盘完成IO操作,可见有程序在频繁的请求IO,而下面光是kswapd0一个进程就吃满了一个核心,pid还是如此靠前的41,由此可见这是一个系统级进程。

2.虚心求教

我查阅了大量资料,发现该程序来源于虚拟内存,是系统常驻进程,专门负责内存换页,cpu会定时唤醒该进程检查内存使用情况,当内存中的空闲页低于pages_low的时候,该进程会扫描内存,将长久不用的内存数据转移到磁盘空间上,待程序需要使用这部分时再将其搬回物理内存供程序使用,他每次会在物理内存中清理32个free内存页,一直清理直到free内存页的数量大于pages_high的时候停止。这两个参数都是内核参数,目前没看到可以在哪里设置这两个参数。
有文章说pages_low、pages_high的值是在函数void setup_per_zone_pages_min(void)中进行设置的,这个函数位于mm\page_alloc.c之中。(这段话我看懂了,但是我找不到这个函数,因为我不会看linux源码,对c的了解也只是一点点)
总之我们可以看出一点,如果物理内存不足,系统就会陷入调用kswapd0来换页清理内存但内存不足导致一直清理不出能达到pages_high页数的内存页进而一直清理内存的困境。也正是如此才导致磁盘IO与CPU居高不下。

3.问题查明

所以其实问题原因在于内存不足,但我使用free命令排查了内存之后发现问题更诡异了起来。

内存情况.png

明明显示还有4.8G内存,为什么还是会出现kswapd0进程呢?明明还有4.8G内存,为什么可用内存只剩可怜的几百KB了呢?
此时我灵光一现,想到去排查系统参数,果不其然让我发现了一个很关键的参数vm.min_free_kbytes
该参数表示linux系统最低会保留多少空闲内存,当可用内存小于这个参数时,系统会触发cache回收内存,同样包括触发kswapd0程序进行内存换页。该参数的单位是KB。
这个参数在这台8G内存的虚拟机上配置是4096000,高达3.9G。
所以free内存虽然显示4.8G,但这个4.8G中有3.9G是系统保留的,不允许使用的,真正可用的内存只剩几百MB,系统自然会开始回收内存。
官方建议是这个配置项的值在物理内存的0.4%~5%之间,对于总物理内存低于32G的机器来说,不建议配置此项,默认值即可。

4.额外的内容

vm.min_free_kbytes所保留的内存会在可用的物理内存被占满之后让系统运行MMU(内存管理单元)用的,好让系统可以清理内存,如果设置的过小,比如小于4096,那么系统则很容易崩溃,因为这会导致MMU无法运行。
该选项的默认值是45056,也就是45M。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容