centos7 未启用swap导致内存使用率过高。

作者:大公子 时间:21-09-22 阅读数:228人阅读

情况描述:

朋友在阿里云上有一台系统为CentOS7的VPS,内存为2GB,用于平时开发自己的项目时测试使用;

他在上面运行了5个docker实例,运行java程序;还有一个mysql服务;


上述5个docker实例和mysql服务总共占用VPS1.35GB的内存,系统运行很慢。ssh连接输入命令都有卡顿;


因为内存太小,没什么可以优化的空间。所以准备启用swap交换空间。


百度了一下收到博客文章, 通过文章中提供的方式添加swap空间;但是遇到一个问题,该centos7系统中,不存在/dev/zero文件,所以找到另一篇博客文章.


具体步骤如下:

1. 误删/dev/zero文件的解决方法如下两条命令进行修复重建文件:

[root@localhost sslinux]# mknod /dev/zero c 1 5

[root@localhost sslinux]# chmod 666 /dev/zero

修复完成后用命令测试下是否可用,发现已经可以正常使用磁盘测试了


[root@localhost sq808sq]# dd if=/dev/zero of=test bs=64k count=4k oflag=dsync

至此,/dev/zero 文件的修复重建工作已经完成(该文件为系统特殊文件丢失后不能从系统盘或其他系统直接复制使用,只能通过重建修复,/dev/null文件也是如此)


2.使用dd 命令 新增 swap空间(/var/swap)

复制代码

dd if=/dev/zero of=/var/swap bs=1024 count=4096000

ls -lh /var/swap 

mkswap /var/swap 

mkswap -f /var/swap

swapon /var/swap 

free -lh

swapon /var/swap 

more /proc/swaps 

vim /etc/fstab 

free -lh

复制代码

将swap设置为开机自动挂载:


[root@izbp12z8w3jbbgmy9yiz92z ~]# tail -1 /etc/fstab 

/var/swap               swap            swap    defaults    0 0

但是此时使用 free -lh 命令查看memory和swap的使用情况,依旧没什么变化。


1.swap 是存储“暂时不需要使用的内存”到硬盘上,等到使用的时候再载入到内存中

这种情况只能说明,没有“长期不使用的内存”


2.Swap 的使用量和 OOM 没有直接关系。OOM 看的是申请量不是使用量。哪怕你内存没用完都会触发 OOM


memory和swap的关系


系统在什么情况下才会使用SWAP?

实际上,并不是等所有的物理内存都消耗完毕之后,才去使用swap的空间,什么时候使用是由swappiness 参数值控制。


[root@rhce ~]# cat /proc/sys/vm/swappiness

60

该值默认值是60.

swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,

swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。


即内存足够大的时候,swappiness设置尽量小; 内存较小的时候,swappiness要设置的尽量大;


如何修改swappiness参数?

临时性修改:

[root@rhce ~]# sysctl vm.swappiness=10

vm.swappiness = 10


[root@rhce ~]# cat /proc/sys/vm/swappiness

10

永久修改:

在/etc/sysctl.conf 文件里添加如下参数:

vm.swappiness=10


[root@izbp12z8w3jbbgmy9yiz92z ~]# sed -i '$a vm.swappiness=100' /etc/sysctl.conf 

[root@izbp12z8w3jbbgmy9yiz92z ~]# sysctl vm.swappiness

vm.swappiness = 100

到这里,系统就会尽可能的使用swap。 可以执行一个占用大量内存的命令看一下效果;


此时再查看内存和swap的使用情况:


复制代码

[root@izbp12z8w3jbbgmy9yiz92z ~]# free -lh

              total        used        free      shared  buff/cache   available

Mem:           1.8G        899M        690M        1.5M        249M        779M

Low:           1.8G        1.1G        690M

High:            0B          0B          0B

Swap:          3.9G        715M        3.2G

复制代码

OK,问题解决了。


因为觉得以后可能会再次遇到这样的情况,所以简单记录一下;