# Linux内存管理与分配
Linux内存管理与分配
20191106 Chenxin
1.buffer/cache区别
1.1解释一
Cache
Cache从内存读取数据(从磁盘读取),这个数据的内存空间在Linux系统里一般被称为缓存区(cache),从内存cache读取缓存区,读缓存.缓存(cache)是把读取过的数据保存起来,重新读取时若命中(找到需要的数据)就不要去读硬盘了,若没有命中就读硬盘.其中的数据会根据读取频率进行组织,把最频繁读取的内容放在最容易找到的位置,把不再读的内容不断往后排,直至从中删除.
Buffer
Buffer将数据写入内存(写入磁盘),这个数据的内存空间在Linux系统里一般被称为缓冲区(buffer),写入到内存buffer缓冲区,写缓冲.
缓冲(buffers)是根据磁盘的读写设计的,把分散的写操作集中进行,减少磁盘碎片和硬盘的反复寻道,从而提高系统性能。linux有一个守护进程定期清空缓冲内容(即写入磁盘),也可以通过sync命令手动清空缓冲。
1.2解释二
buffer:作为buffer cache的内存,是块设备的读写缓冲区.
cache:作为page cache的内存, 文件系统的cache.
如果 cache 的值很大,说明cache住的文件数很多.如果频繁访问到的文件都能被cache住,那么磁盘的读IO会非常小.
1.3示例
用一个ext2的U盘,往里面cp一个3M的文件,但U盘的灯没有跳动,过了一会儿(或者手动输入sync)U盘的灯就跳动起来了。卸载设备时会清空缓冲,所以有些时候卸载一个设备时要等几秒钟.
1.4Free指令结果对比
内核版本 4.19.48-14.al7.x86_64
[root@~]# free -m; cat /proc/meminfo |grep -E "Buffer|Cache|Swap|Mem"
total used free shared buff/cache available
Mem: 441 47 17 0 376 381
Swap: 0 0 0
MemTotal: 452420 kB->441.8M
MemFree: 18192 kB->17.7M
MemAvailable: 391032 kB->381M
Buffers: 63244 kB->61.7M #相加并不等于376,为什么呢?
Cached: 287116 kB->280M
[root@~]# free -m; cat /proc/meminfo |grep -E "Buffer|Cache|Swap|Mem"
total used free shared buff/cache available
Mem: 441 56 8 0 376 373
Swap: 0 0 0
MemTotal: 452420 kB
MemFree: 8972 kB
MemAvailable: 381876 kB
Buffers: 63296 kB
Cached: 287156 kB
较早前内核版本
[admin@ip-10-0-1-23 ~]$ free -m
total used free shared buffers cached
Mem: 1995 1902 92 0 6 62
-/+ buffers/cache: 1833(已用) 161(实际可用)
total 内存总数
used 已经使用的内存
free 空闲的内存
shared 多个进程共享的内存总额
-buffers/cache 的内存数:used - buffers - cached
+buffers/cache 的内存数:free + buffers + cached ,也是可用的memory=free + buffers + cached
1.5手动清理
#!/bin/bash
#By Chenxin 20120717
if [ -f /etc/init.d/functions ];then
. /etc/init.d/functions;
fi
PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
sync
sync
echo 1 > /proc/sys/vm/drop_caches
sleep 2;
sync
sleep 2;
echo 2 > /proc/sys/vm/drop_caches
sleep 2;
sync
sleep 2;
echo 3 > /proc/sys/vm/drop_caches
sleep 2;
sync
sleep 2;
sync

浙公网安备 33010602011771号