kswapd0进程占用大量cpu
发布网友
发布时间:2小时前
我来回答
共1个回答
热心网友
时间:2024-10-21 06:10
一、缓存机制介绍
Linux系统中,为了优化文件系统性能,内核会利用部分物理内存设置缓冲区,用于缓存操作和数据文件。当内核收到读写请求,会首先检查缓存区是否有所需数据,有则直接返回,无则通过驱动程序直接操作磁盘。
缓存机制的优点包括:减少系统调用次数,降低CPU上下文切换和磁盘访问频率。
CPU上下文切换:CPU为每个进程分配一定服务时间,时间片用完后,内核收回处理器,保存当前进程状态,加载下一个任务,这个过程称为上下文切换。
Swap用途:Swap指交换分区,通常指虚拟内存,是从硬盘中划分的一个分区。当物理内存不足时,内核会释放缓存区(buffers/cache)中一些长时间不用的程序,将其临时存放在Swap中。
swap清理:swapoff -a && swapon -a
注意:此操作前提是空闲内存必须比已使用的swap空间大。
kswapd0进程负责虚拟内存中的换页操作。操作系统会定期唤醒kswapd,检查内存是否紧张,不紧张则睡眠。当物理内存不足时,内核会释放缓存区中的一些长时间不用的程序,将其临时存放在Swap中。
阿里云ecs默认swap分区为0,且vm.swappiness也被默认设置为0。
可能由于可用空闲内存较少,存在未知进程需要申请的内存大于当前系统的free内存,系统在唤醒kswapd后,由于swappiness设置为0,虽然内核不倾向于使用swap,但仍会释放buff和cache使用的内存,将其中的冷数据交换到swap分区,导致kswapd0进程过度活跃地消耗CPU。云服务器默认没有设置swap分区,即swap为0,此时又没有足够的可用内存,导致一个死循环的状态,使得系统占用CPU持续上升。
swappiness的值对如何使用swap分区有很大影响。swappiness=0时,表示最大限度使用物理内存,然后才是swap空间;swappiness=100时,表示积极使用swap分区,并将内存上的数据及时搬运到swap空间。Linux的基本默认设置为60。
本机虚拟机默认内核设置:
阿里云默认设置: