Linux内存、Swap、Cache、Buffer详细解析
1、通过free命令看Linux内存
-
total:总内存大小。
-
used:已经使用的内存大小(这里面包含cached和buffers和shared部分)。
-
free:空闲的内存大小。
-
shared:进程间共享内存(一般不会用,可以忽略)。
-
buffers:内存中写完的东西缓存起来,这样快速响应请求,后面数据再定期刷到磁盘上。
-
cached:内存中读完缓存起来内容占的大小(这部分是为了下次查询时快速返回)。
-/+ buffers/cache看做两部分:
-
-buffers/cache:正在使用的内存大小(注意不是used部分,因为buffers和cached并不是正在使用的,组织和人民需要是它们是可以释放的),其值=used-buffers-cached。
-
+buffers/cache:可用的内存大小(同理也不是free表示的部分),其值=free+buffers+cached。
Swap:硬盘上交换分区的使用大小。
设计的目的就是当上面提到的+buffers/cache表示的可用内存都已使用完,新的读写请求过来后,会把内存中的部分数据写入磁盘,从而把磁盘的部分空间当做虚拟内存来使用。
在Linux系统内部有一个守护进程会定期清空Buffer中的内容,将其写入硬盘内,当手动执行sync命令时也会触发操作。
2、手动清理Swap和buffers/cache
(1) 清理Swap
数据不会丢失
swapoff -a && swapon -a
(2) 清理buffers/cache:
执行echo 1、2、3 至 /proc/sys/vm/drop_caches, 达到不同的清理目的.
sync; sync; sync;&& echo 3 >/proc/sys/vm/drop_caches -->修改drop_caches的值为3,默认为0,改为3系统会清理缓存的内容; sleep 2 echo 0 > /proc/sys/vm/drop_caches --> 改回默认值
3、总结
swap如果被频繁调用,bi,bo长时间不为0,则才是内存资源是否紧张的依据。通过free看资源时,实际主要关注-/+ buffers/cache的值就可以知道内存到底够不够了。