免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4822 | 回复: 3
打印 上一主题 下一主题

kswapd 忙导致系统变慢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-28 18:43 |只看该作者 |倒序浏览
我的rhel5上运行了几个i/o进程,这些进程在往阵列的盘上(非本地)发i/o。开始时很正常,当memory被逐渐用完后,pdflush和kswapd被调用来释放cache。pdflush执行完毕后,通过top看到free的memory已经比较多了,但是这个时候,kswapd仍然在继续执行,其占用了大部分cpu时间。这个时候系统变得非常慢。此时观察到其实cpu占用率并不高。但是本地盘的i/o
wait 比较高。这个时候,阵列上的盘io wait 正常,并且free的memory不会像开始那样减少。也就是page
cache没有增加。我把那几个i/o进程kill了,系统过一会儿又恢复正常。
各人认为系统变慢的直接原因是kswap的nice比较高,导致占用大部分cpu时间。但是不明白,为什么通过top看到大部分memory已经free了,kswapd还在保持运行。看了下kswapd的代码,对于一个memory
zone,如果空闲的page超过了page_high,就应该停止shrink_zone了。
另外,阵列上的i/o仍然在走,但为什么没有page cache 在增加?

综合以上现象,个人分析原因可能是:
在memory耗尽时,pdflush启动刷新dirty的page cache。kswapd启动,调用shrink_zone等函数回收page
cache。之后,free的memory变大。但是这个时候,kswapd并没有停止。i/o进程在继续写,这导致page
cache变为dirty。但这个时候,由于kswapd还在工作。同步dirty
page的事情就由kswapd调用page_out来做了(这就是为什么i/o仍然在继续,但是page
cache没有增加的原因吧?)。因此,kswapd会一直占用cpu。但这个解释有个矛盾就是,按照代码,free的memory大于page_high时,kswapd就应该停下来才对。

不知道大家遇到过这个情况没有?
谢谢

论坛徽章:
0
2 [报告]
发表于 2009-07-28 23:14 |只看该作者

回复 #1 xiegang112 的帖子

查了下ulk,看起来有点像交换失效(swap thrashing)。但是上面说在2.6.9中已经加入了swap token来防止交换失效。而且,用top观察,free的memory还很多。

论坛徽章:
0
3 [报告]
发表于 2009-07-29 03:45 |只看该作者
我觉得系统变慢的原因不是 cpu 高,而是因为之前 cache 的程序/数据被挤出缓冲导致
其它的我就不完全知道是怎么回事了


关注,呵呵

论坛徽章:
0
4 [报告]
发表于 2009-07-29 09:15 |只看该作者

回复 #3 windaoo 的帖子

实际上观察到得cpu并不高。我在正常机器上做了同样实验,但是设置swappness为100.会出现类似现象,系统变慢。但是一个很大不同点就是,不像前面,这次free的memory会保持增加和减少的交替进行。而之前只要一被回收回来,就不会再减少了。不过感觉还是和交换失效有关。

[ 本帖最后由 xiegang112 于 2009-7-29 09:21 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP