青蛙学Linux—内存管理

在Linux下,内存分为两个部分,分别是物理内存和虚拟内存。物理内存就是主机上插入的内存条;虚拟内存就是在硬盘上虚拟出来的一块逻辑内存空间,用于解决物理内存不足的情况。Linux下的虚拟内存被称为交换空间Swap Space,也就是系统中的swap分区。虽然现在的物理内存已经足够大了,但是还是建议保留一定的swap分区。

使用free命令可以查看当前内存的使用信息。命令语法如下:

free [选项]

常用选项:

  • -h:以易于阅读的方式显示内存使用信息

free命令在CentOS 6.x和CentOS 7.x版本的系统下回显的内容并不相同,以下来详细分析下:

CentOS 6.x

[root@localhost ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          7.7G       601M       7.1G       172K       151M       208M
-/+ buffers/cache:       241M       7.5G
Swap:         2.5G         0B       2.5G

列详解:

  • total:总量
  • used:正在使用
  • free:空闲
  • shared:共享内存
  • buffers:存储块设备以及文件系统元数据(metadata)所占用的缓冲页
  • cached:存储普通文件所占用的缓存页

行详解:

  • Mem:物理内存
  • -/+ buffers/cache:应用程序可以使用的内存
  • Swap:交换分区

buffers/cached的存在是为了提高文件的读取性能而存在的,当应用程序需要内存时,buffers/cached占用的空间将很快被回收。所以,在系统看来,内存的free值=total-used,但对于应用程序来说,buffers/cached这一部分空间是可用的,所以free值=系统free值+buffers+cached。这也是为什么free命令的回显中会有两个free值的原因。

CentOS 7.x

[root@localhost ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        192M        7.1G        8.8M        338M        7.2G
Swap:          2.5G          0B        2.5G

这里与CentOS 6.x中的回显不同的是,分开的buffers/cached列合并为buff/cache列,并新增了available列,同时-/+ buffers/cached行也取消了,使得显示更加简洁。CentOS 7.x下已经把buffers/cached合并,因为两者本质相同。新增的available列显示的就是应用程序可用的空闲内存。

手动释放buffers/cached

在手动释放buffers/cached前,必须使用以下命令将已更改的数据写入磁盘,并更新超级块,防止出现数据丢失的情况:

sync

释放buffers:

echo 1 > /proc/sys/vm/drop_caches

释放cached:

echo 2 > /proc/sys/vm/drop_caches

释放所有缓存:

echo 3 > /proc/sys/vm/drop_caches

在系统中手动创建swap

swap所需的交换文件其实也是一个普通的文件,但创建该文件需要使用dd命令:

dd if=/dev/zero of=swap文件路径 bs=大小 count=次数
# /dev/zero是一个特殊的文件,当你读取它时,它会提供无限的空字符。该文件通常用于覆盖信息,或产生一个特定大小的空白文件
# 同样的/dev/null也是一个特殊的文件,你可以将不用的数据统统丢给它,它会像黑洞一样吞噬掉这些数据而不会增大自身的体积

使该文件成为交换文件:

mkswap swap文件

激活交换文件:

swapon swap文件

取消激活交换文件:

swapoff swap文件

接下来就可以使用rm命令删除该文件。

swap的优化

swappiness值决定了系统如何使用swap。当swappiness=0时,系统最大限度的使用物理内存,然后才是swap;当swappiness=100时,系统积极使用swap,并把内存上的数据及时搬运到swap。使用以下命令可以查看swappiness值:

cat /proc/sys/vm/swappiness

当物理内存的占用量=100-swappiness值时,就开始使用swap。

使用以下命令临时调整swappiness值:

sysctl vm.swappiness=x

在/etc/sysctl.conf文件中添加以下内容可永久修改swappiness值:

vm.swappiness=x
原文地址:https://www.cnblogs.com/yu2006070-01/p/10001951.html