首页 > 代码库 > memory内存与swap内存之小解

memory内存与swap内存之小解

  计算机内存分为物理内存与虚拟内存,这两个内存分别对应memory内存与swap内存

memory内存:机器的物理内存,由RAM芯片组成,读写速度低于CPU一个量级,但是高于磁盘一个量级,也就是CPU>memory>磁盘

swap内存:由磁盘代替的虚拟内存,在一定程度上解决了机器内存不足的问题,但是磁盘读写要比真正的物理内存慢的多。

  当程序起来后,系统判断是否有空闲的物理内存,如果有,直接将其调入物理内存运行,否则,根据优先级,选择进程交换到swap space等待或将数据写入swap,待需要时再读出。不过,对于用户来说,这些都是透明的,客户是感觉不到内存的限制的。

  当物理内存使用达到一定的比例就会使用虚拟内存,两者都用完之后系统就会报错out of memory,这里的比例是可以配置的,默认是60,可以查看cat /proc/sys/vm/swappiness,配置为0时,尽最大可能的使用物理内存,配置为100则相反

  但是也会存在这样的情况:物理内存有大量空闲状态时,却使用虚拟内存,这种情况出现的可能是因为先前一个占用大量内存的进程使用物理内存运行,使得之后的进程只能使用虚拟内存,当占用大量物理内存的进程执行结束释放资源之后,便空出了大量的物理内存,而交换到虚拟内存的进程、数据不会自动的交换到物理内存中去,便出现了这样的情况。

  查看内存一般使用free命令

技术分享

total:内存总数

used:已经使用的内存

free:空闲的内存

shared:多进程共享的内存,一般情况下,进程间不会共享内存

buffers:磁盘缓冲,指的是将要写入磁盘的,是对写操作进行集中执行的,目的是减少磁盘碎片以及反复的磁盘寻道,如需要将多个字段写入磁盘,在还没完全读完所有的字段时,将已读的字段写入缓冲区

cached:高速缓存,指的是将要读出的数据,cache是介于CPU和主内存之间的容量较小但速度很快的存储器。缓存是把读取出的数据存储起来,等下次读取时,直接从缓存中读取,就不需要再读磁盘,并且会根据读取的频繁度排序,将读取频繁的数据放到容易读取的位置,不经常读取的数据排到后面,直至清除缓存。

-buffers/cache:  used-buffers-cached 是程序当前"真实使用"的"物理内存"的大小。

+buffers/cache: free+buffers+cached

而最后的swap是交换区的信息,也就是我们上文提到的swap虚拟内存,Linux的命令还是要经常敲才理解、记忆深刻,我也需要继续学习!

 

memory内存与swap内存之小解