cached 是 free -m 显示的。
已知 /proc/sys/vm/drop_caches 值=0。
1.如果内存不足时系统会自动释放 cached 占用的空间吗?
2.什么情况下需要"echo 3 > /proc/sys/vm/drop_caches"手动释放?
有 swap 会占用 swap 吧 编译过几次软件 都是满了直接占 swap
这个是自动管理的,可以当成是可用内存,管它干什么
在 free 足够大的时候是不会回收 cached。仅当 zone 的 free 小于 low 水位线的时候才会开始唤醒 kswapd 回收内存,回收内存可以从 anon 和 cached 两处回收,anon 会回收进入 swap,cached 回收会直接变成 free,这样 cached 就会减少了。anon 和 cached 回收的比例按照 /proc/sys/vm/swappiness 和最大值 200 的比例来
正常情况下不需要"echo 3 > /proc/sys/vm/drop_caches"来手动释放,这样会造成 IO 缓存丢失,IO 量会激增。除非有场景需要在申请大量内存且对内存申请性能有很严格的要求
是从 anon cache 和 file cache 里面回收吧,而且并不是所有的 cache 都能够被回收,具体得看程序是怎样写的
嗯,cached 就是 file cache,anon 貌似没有 cache 的说法。anon 和 file 各有一个 LRU,只回收 inactive 的部分,inactive 不足的时候将最不活跃的 active 移至 inactive,active/inactive 保持一定的比例。file cache 理论上应该都能被回收,当发生文件系统读操作时 free 会转化为新的 file cache。整个过程加上回收形成一个循环
不会
anon cache gogole 搜了下是 anonymous page, 是这个意思么?
不会,要自己 free
对的,anon 就是匿名页。没有文件作为后备的页,不像 file cache 丢失后可以再从文件读回来,它不能直接丢弃只能 swap。一般用户层应用程序 new malloc brk 或者 mmap null 来的内存 page fault 映射的物理内存都是匿名页
swap 应该是物理内存不足时才占用吧
有时候往 /tmp 目录(挂载到内存)里写文件,占用的是内存 cached,删除写入的文件之后好像不会立即释放 cached
往 /tmp 目录(挂载到内存)里写文件,关闭并删除写入的文件之后会不会立即释放该文件占用的 cached?
内存不足时那咋办?
那我没玩过内存文件系统,可能人家设计上就是文件系统可以增大不能自动收缩的
1. Linux 系统会自动释放 cache 的内存, 再加上现在默认 OOM 机制, 内存管理这块基本无需人工干预.
2. 除了你自己想清空 Page Cache, 否则无需执行`echo 3 > ....`.
自动管理机,给你省时还不愿意?
不一定在物理内存不足的时候才用 swap,只要有不活跃的内存,内核都会换出去。
/tmp 就是实现为内存文件系统,占用的是 cache,写入的文件删除后对应的内存即成为空闲内存可被回收,即使空闲内存大小不会立即显示出来。会不会被立即释放看内核,不过无所谓了,因为已经被标记成空闲。
感谢解惑,看来需要系统学习一下内存管理机制扫盲