我一台 1 核 1G 内存的VPS,最近总是出现 CPU 满载的情况,重启后恢复正常,过几个小时后又会满载,导致在上面运行的一些自动任务执行失败。
使用 top
命令查看,发现是 kswaod0
进程占用了大量 CPU 资源。这个进程是和虚拟内存相关的,在网上查到的资料:
kswapd0 占用过高是因为物理内存不足,使用 swap 分区与内存换页操作交换数据,导致 CPU 占用过高。
解决办法:
01、禁止 swap
02、扩大内存
但是我这台机器根本没有开启 swap,所以我怀疑应该是物理内存不够,系统想调用 swap 内存而调用不到。我尝试开启 swap 虚拟内存:
[root@do-sp ~]# dd if=/dev/zero of=/home/swap bs=1MB count=1024
1024+0 records in
1024+0 records out
1024000000 bytes (1.0 GB) copied, 4.40974 s, 232 MB/s
[root@do-sp ~]# mkswap /home/swap
Setting up swapspace version 1, size = 999996 KiB
no label, UUID=c1c88cea-1832-4fef-ae18-3eee2d7314dd
[root@do-sp ~]# chmod 600 /home/swap
[root@do-sp ~]# swapon /home/swap
复制
然后运行 top
,看到负载马上就降低了。
看来 kswapd0
负载过高,还有一种可能性是因为没有开启 swap 虚拟内存,而物理内存不够使用。所以小内存的 VPS 还是尽量开启 swap 内存吧。