kswapd0引起CPU高占用解决方法
在使用top命令查看cpu占用的时候,发现 kswapd0 这个程序占用了99%的cpu。
什么鬼?不懂就百度,得到答案是:
当内存不足时,系统会开辟磁盘当作缓存使用。
如果是内存常态使用那么多,这样会导致内存分页交换频繁,而使得cpu占用非常高。得不偿失。
解决方法:
修改内存不够时申请磁盘的阈值。
vim /etc/sysctl.conf
#最后一行加上
vm.swappiness=0
#然后 :wq 回车保存
#最后加载参数
sysctl -p
题外话:
1、swappiness参数从0到100,当该参数=0,表示只要有可能就尽力避免交换进程移出物理内存;该参数=100,这告诉内核最大化将数据移出物理内存移到swap缓存中。
设置vm.swappiness=0 后并不代表禁用swap分区,只是告诉内核,能少用到swap分区就尽量少用到,设置vm.swappiness=100的话,则表示尽量使用swap分区。
2、在linux的内存分配机制中,优先使用物理内存,当物理内存还有空闲时(还够用),不会释放其占用内存,就算占用内存的程序已经被关闭了,该程序所占用的内存用来做缓存使用,对于开启过的程序、或是读取刚存取过得数据会比较快
3、一般来说,如果经常出现内存不足的情况,最好的办法就是升级硬件,比如现在最低等1核2G云服务器,并不适合日常开发练习,开一个mysql就占用400M,在开其他肯定是不足。
当然如果是自己写的程序导致内存泄漏,那就只能自己慢慢排查了