我 grep 一个大文件,第一遍大约几十秒,第二遍就很快了,几乎秒出,请问这是为什么呢?
1
d0m2o08 2018 年 10 月 25 日
|
2
tamlok 2018 年 10 月 25 日 via Android
操作系统文件读写缓存吧
|
3
hujianxin OP |
4
wohenyingyu02 2018 年 10 月 25 日 via iPhone
@hujianxin 一楼的回答是操作系统会缓存最近读写的文件,是不是可以这么理解,原来缓存的是别的文件,你 grep 一次后,把别的文件释放了,替换进去,所以看起来内存不变?
|
5
tamlok 2018 年 10 月 25 日 via Android
@hujianxin 操作系统启动的时候就占用了不少内存,其中可能就有缓存的部分。另外,我觉得缓存这一部分的内存,操作系统也可能展示给用户的是空闲的状态?
|
6
helionzzz 2018 年 10 月 25 日
缓存这一部分应该都是预留的吧
|
7
LGA1150 2018 年 10 月 25 日 执行以下命令清除缓存之后再试试?
sync; sudo sysctl -w vm.drop_caches=3 |
8
sniperhgy 2018 年 10 月 25 日
linux 本来就和 windows 的内存管理机制不一样,windows 是起来后,有需要才进行占用,linux 是起来后,先占用了再说,多多益善。所以楼主看到的所谓内存没有变化,只是 linux 没有占用的那一部分
|
9
aijam 2018 年 10 月 25 日
文件系统缓存
|
11
flynaj 2018 年 10 月 25 日 via Android
第一次是从硬盘读,后面已经缓存在内存里面了。
|
13
hujianxin OP 问题是,我 grep 一个 50g 的文件,内存没涨过,才用了 5g,所以这些文件是不可能缓存到内存的啊
|
16
liaohongxing 2018 年 10 月 25 日
linux 和 windows 内存机制不一样 ,linux 会先占用空闲内存,而且 linux 会缓存文件系统 。用 free -m 或者 dd 复制一下。能明显感受到有缓存。
|
17
mengzhuo 2018 年 10 月 25 日 via Android
cache 啊~
|
18
noli 2018 年 10 月 26 日
@hujianxin 就算你文件是 100G 1T 也没有必要一次过全部放入内存中缓存啊,你的应用也没有一次过读 100G 1T 的能力啊。这么想之后你就会发现是因为你知道得太少。
|
19
cyspy 2018 年 10 月 26 日
Linux 的缓存策略比 Win 激进不少,Linux 下群星重开都是秒进,估计全都在 RAM 里
|
20
yc8332 2018 年 10 月 26 日
必须是缓存啊。。。不然怎么 linux 下可用内存长时间都是比较少的。除非手动释放
|
22
Greenm 2018 年 10 月 26 日
这个是缓存命中和未命中的问题吧,第一遍全部不命中,第二遍几乎都命中了。
|