阅读 1945

kswapd0进程占CPU过高或100%原因与解决方法

今天一位朋友的服务器突然感觉很卡,负载很高的样子。我们一般会用"top"命令查看进程以及CPU占用的一些情况,得到结果如下:

[root@localhost ~]# top

kswapd0进程占CPU过高

 

然后,我看了一下各进程的情况。

php和mysql占的CPU还是在合理的范围,但是,我发现 kswapd0 这个进程直接占了近 40%,这肯定是不正常的,一般来讲kswapd0基本上是不占CPU或占少量的CPU,不可能占用这么高,kswapd0突然占用这么高,肯定是哪里出现了问题?例如:配置不当。

 

原因:

再给大家详细讲一下Linux下内存相关知识:

[root@localhost ~]# free -m
             total       used       free     shared    buffers     cachedMem:          3696       3581        115          2          1         36-/+ buffers/cache:       3542        153Swap:          999        999          0

 

swap分区的作用是当物理内存不足时,会将一部分硬盘当做虚拟内存来使用。

kswapd0 占用过高是因为 物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高。可以通过修改 /etc/sys/vm/swappiness 里面的数值来修改swap分区使用与否,默认 60,数值越大表示更多的使用swap分区。

swap 分区和内存 都有缓存区,缓存的内容为之前使用过的数据,用于加快第二次打开时访问速度。

swap分区 可以使用多个交换区(使用多硬盘?) 来加快swap访问速度。

swap 分区使用的为硬盘的内容,速度比直接访问内存慢几千倍。

真正使用的内存 used -(buffers+ cached) buuffer和cached部分作为缓存,可以使用命中率的方式提高使用效率,而且这部分缓存是根据指令随时可以释放的,我们可以认为这部分内存没有实际被使用,也可以认为它是空闲的。

 

解决方法

从上面大家也能清楚的知道,无论是通过“top“命令,还是”free“命令,得到的数据其实都是不正常的。

 

以我这里为例子:

伪原创工具 https://www.237it.com/ 

kswapd0 占用过高的确也是物理内存不足所引起的。最根本的原因是,我的这位朋友把php-fpm.conf配置修改为:

pm.max_children = 120 ;
pm.max_spare_servers = 120

 

每个php-fpm子进程占用20M内存,120*20=2400M,而我的这位朋友服务器总内存才4G。

 

他最终只好设置值为60即恢复正常。

 

总结:

由于我朋友的php-fpm配置不当,物理内存不足还会让mysql进程挂掉,从而连接不上数据库。这都是我在帮朋友解决问题所得到的经验,也顺便一起分享出来吧!

来源https://www.fujieace.com/linux/kswapd0-cpu.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐