早上,遇到一起故障,调查显示kswapd0进程的内存使用率很高,系统负载从平时的0.x升高到了260多。
查到原因是,同事代码逻辑错误,不断的死循环向表里面添加数据,记录数达到了2.7千万。然后对该表 alter table add index xxx,导致了mysqld内存不断的膨胀,导致需要使用到了swap分区的虚拟内存,然后导致kswapd0进程的CPU使用率升高。
登录系统后,通过top命令查到kwsapd0的CPU使用很高,多次尝试用 kill -9 xxx 杀死改进程,但是无效。
kswapd0 占用过高是因为 物理内存不足,使用swap分区与内存换页操作交换数据,导致CPU占用过高
一两分钟之后,华为云平台监控到了系统异常,自动重启了操作系统。
后面重启应用和各中间件,清理超大表的数据。系统恢复正常。