一、linux的内存机制
我们知道,直接从物理内存读写数据要比从硬盘读写数据要快的多,因此,我们希望所有数据的读取和写入都在内存完成,而内存是有限的,这样就引出了物理内存与虚拟内存的概念。 物理内存就是系统硬件提供的内存大小,是真正的内存,相对于物理内存,在linux下还有一个虚拟内存的概念,虚拟内存就是为了满足物理内存的不足而提出的策略,它是利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)。 作为物理内存的扩展,linux会在物理内存不足时,使用交换分区的虚拟内存,更详细的说,就是内核会将暂时不用的内存块信息写到交换空间,这样以来,物理内存得到了释放,这块内存就可以用于其它目的,当需要用到原始的内容时,这些信息会被重新从交换空间读入物理内存。 Linux的内存管理采取的是分页存取机制,为了保证物理内存能得到充分的利用,内核会在适当的时候将物理内存中不经常使用的数据块自动交换到虚拟内存中,而将经常使用的信息保留到物理内存
二、Linux什么时候开始使用虚拟内存(swap)
cat /proc/sys/vm/swappiness
命令可以看到设定的阀值
[root@localhost ~]# cat /proc/sys/vm/swappiness
30
[root@localhost ~]#
发现值为30,上面这个30代表物理内存在使用30%的时候才会使用swap。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。swap分区设置建议是内存的两倍 (内存小于等于4G时),如果内存大于4G,swap只要比内存大就行。另外尽量的将swappiness调低,这样系统的性能会更好
我们把这个阈值设到70%看一下
[root@localhost ~]# vi /etc/sysctl.conf
vm.swappiness = 70 #加入这一行
[root@localhost ~]# sysctl -p
[root@localhost ~]# cat /proc/sys/vm/swappiness
70
[root@localhost ~]#
三、增加虚拟内存(swap)
3.1查看内存
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.7G 94M 131M 608K 1.5G 1.4G
Swap: 0B 0B 0B
3.2用dd命令创建一个新增内存大小的文件,如4GB
[root@localhost ~]# dd if=/dev/zero of=/var/swapfile1 bs=4096 count=1048576
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 35.3405 s, 122 MB/s
[root@localhost ~]#
3.3将新增文件设为Swap交换分区
[root@localhost ~]# mkswap /var/swapfile1
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=d75f1aa3-88c3-4481-a30a-0cb21ee2c8a2
[root@localhost ~]#
3.4激活并使用/var/swapfile1交换分区
[root@localhost ~]# swapon /var/swapfile1
swapon: /var/swapfile1: insecure permissions 0644, 0600 suggested.
[root@localhost ~]#
3.5设置系统启动后自动激活交换分区
# /etc/fstab
# Created by anaconda on Thu Jul 11 02:52:01 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=1114fe9e-2309-4580-b183-d778e6d97397 / ext4 defaults 1 1
#新增的swap分区
/var/swapfile1 swap swap defaults 0 0
3.6重启服务器 查看内存
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.7G 95M 1.4G 432K 227M 1.5G
Swap: 4.0G 0B 4.0G
[root@localhost ~]#
四、释放内存
一般系统是不会自动释放内存的
关键的配置文件/proc/sys/vm/drop_caches
。这个文件中记录了缓存释放的参数,默认值为0,也就是不释放缓存。他的值可以为0~3之间的任意数字,代表着不同的含义:
0 – 不释放
1 – 释放页缓存
2 – 释放dentries和inodes
3 – 释放所有缓存
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.7G 95M 1.4G 432K 227M 1.5G
Swap: 4.0G 0B 4.0G
[root@localhost ~]# echo 3 >/proc/sys/vm/drop_caches
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.7G 95M 1.6G 432K 72M 1.5G
Swap: 4.0G 0B 4.0G
[root@localhost ~]#
五、释放swap
前提:首先要保证内存剩余要大于等于swap使用量,否则会宕机!根据内存机制,swap分区一旦释放,所有存放在swap分区的文件都会转存到物理内存上。通常通过重新挂载swap分区完成释放swap
5.1 查看当前swap分区挂载在哪里
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/var/swapfile1 file 4194300 0 -2
[root@localhost ~]#
5.2 关闭这个分区并查看挂载状态已经内存
[root@localhost ~]# swapoff /var/swapfile1
[root@localhost ~]#
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.7G 92M 1.5G 432K 84M 1.5G
Swap: 0B 0B 0B
[root@localhost ~]# swapon -s
[root@localhost ~]#
5.3重新挂载并查看
[root@localhost ~]# swapon /var/swapfile1
swapon: /var/swapfile1: insecure permissions 0644, 0600 suggested.
[root@localhost ~]# swapon -s
Filename Type Size Used Priority
/var/swapfile1 file 4194300 0 -2
[root@localhost ~]# free -h
total used free shared buff/cache available
Mem: 1.7G 94M 1.5G 432K 86M 1.5G
Swap: 4.0G 0B 4.0G
[root@localhost ~]#
网友评论