ubuntu系统交换分区swap的作用,增加与优化

最近因为服务器有时候会因为各种原因而把内存占用满,导致ssh都连接不上,只能通过阿里云的后台来重启服务器。后来发现可以增加swap交换空间来避免这种情况,然后就了解了一下swap空间。

1.在网上找到的文档解释

Linux divides its physical RAM (random access memory) into chucks of memory called pages. Swapping is the process whereby a page of memory is copied to the preconfigured space on the hard disk, called swap space, to free up that page of memory. The combined sizes of the physical memory and the swap space is the amount of virtual memory available.
Linux 把物理内存划分作称为分页(Page)的内存区块。内存交换是一个内存分页被复制到一个预配置的称为 swap 空间的硬盘空间里的过程,以此来释放内存分页。物理内存与这个 swap 空间的共同大小称为可用的虚拟内存量。

说的明白一点的是,当物理内存不足以支撑系统和进程的运作时,这个swap可以存放使用率不高的内存分页,减少物理内存的压力。

2.查看swap空间

1
2
3
4
5
6
free -m
total used free shared buffers cached
Mem: 7984 6984 999 0 284 5675
-/+ buffers/cache: 1024 6959
Swap: 0 0 0

Mem:表示物理内存统计。
-/+ buffers/cached:表示物理内存的缓存统计
Swap:表示硬盘上交换分区的使用情况。现在可以看到交换空间为0,我们为他加上交换空间

3.创建交换空间

1
2
3
mkdir swap
cd swap
sudo dd if=/dev/zero of=swapfile bs=1M count=1K

/dev/zero:在类UNIX 操作系统中, /dev/zero 是一个特殊的文件,当你读它的时候,它会提供无限的空字符(NULL, ASCII NUL, 0x00)。
其中的一个典型用法是用它提供的字符流来覆盖信息,另一个常见用法是产生一个特定大小的空白文件。
其中 if表示input file(输入文件),if后面是输入文件的目录; of表示output file(输出文件),of后面是输出文件的目标位置。
count=1k 就代表生成1G空间,具体可试情况而改变。这个过程比较缓慢,而且没有进度条,请耐心等待。执行完成输出

1
2
3
8192+0 records in
8192+0 records out
8589934592 bytes (8.6 GB) copied, 209.98 s, 40.9 MB/s

4.把生成的文件转换成swap文件

1
2
3
sudo mkswap swapfile
Setting up swapspace version 1, size = 8388604 KiB
no label, UUID=8b7d6735-f786-488c-a62e-5b02c41e15bc

5.激活交换空间

1
sudo swapon swapfile

再次查看交换空间,添加已成功

1
2
3
4
total used free shared buffers cached
Mem: 7984 7854 129 0 269 6557
-/+ buffers/cache: 1026 6957
Swap: 8191 0 8191

6.卸载交换空间

1
sudo swapoff swapfile

7.设置swappiness的值

swappiness的值的大小对如何使用swap分区是有着很大的联系的。swappiness=0的时候表示最大限度使用物理内存,然后才是 swap空间,swappiness=100的时候表示积极的使用swap分区,并且把内存上的数据及时的搬运到swap空间里面。两个极端,建议修改为10。

1
2
3
cat /proc/sys/vm/swappiness #查看
sudo sysctl vm.swappiness=10 #修改为10,这个只是临时性得修改,如果想永久生效,需要继续执行。
sudo vi /etc/sysctl.conf #修改为 vm.swappiness=10 然后保存就可以了。