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

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

[[email protected] ~]# top

kswapd0进程占CPU过高

 

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

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

 

原因:

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

[[email protected] ~]# free -m
             total       used       free     shared    buffers     cached
Mem:          3696       3581        115          2          1         36
-/+ buffers/cache:       3542        153
Swap:          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“命令,得到的数据其实都是不正常的。

 

以我这里为例子:

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

pm.max_children = 120 ;
pm.max_spare_servers = 120

 

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

 

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

 

总结:

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

    A+
发布日期:2021年06月05日 19:42:46  所属分类:Linux
最后更新时间:2021-06-05 20:35:39
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
付杰
uni-app进阶实战:仿微信app开发
  • ¥ 498.0元
  • 市场价:998.0元
【C语言入门到C++网络通讯架构师】系列课程
  • ¥ 1999.0元
  • 市场价:2999.0元
PHP零基础入门到精通视频教程
  • ¥ 199.0元
  • 市场价:199.0元
ASP.NET MVC5 实战:arcgis项目
  • ¥ 79.0元
  • 市场价:99.0元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: