我的服务器的free命令输出如下所示:
#free -m
caching总共使用的空闲共享缓冲区
Mem:995 780 205 0 49 599
- / + buffers / cache:140 854
交换:0 0 0
我们知道dd应用程序通常使用页面caching来加速文件访问。
发出命令后:
dd if = / dev / zero of = 2.txt bs = 1M count = 10
以下输出显示页面caching增加了10M左右。
#free -m
caching总共使用的空闲共享缓冲区
Mem:995 790 215 0 49 599
- / + buffers / cache:140 854
交换:0 0
前面的输出是正常的。
然后我跑了
同步
命令,将页面caching中的内容再次与硬盘同步
免费-m
命令。
没有什么变化如下。 它与写回机制有关吗? 其中规定尽pipe执行同步命令,页面caching将不会被回收,除非页面caching的这部分被更改。
或者,在内核参数/ proc / sys / vm / drop_caches被修改之前,页面caching将不会被回收?
#free -m
caching总共使用的空闲共享缓冲区
Mem:995 790 205 0 49 599
- / + buffers / cache:140 854
交换:0 0 0
如果是这样,“free -m”中caching的最大大小可以达到多less? 有没有控制它的内核参数? 谢谢。
DD不直接使用页面caching,它会自动cachingI / O。
仅仅因为提交了一些内容而丢失caching效率不高。 下一次读取需要来自底层设备,可能比内存慢几百到几千倍。
预计caching将使用几乎所有未使用的RAM。 计算它是自由内存,如果程序分配内存,caching是第一个被回收的。
在生产操作中不要使用/ proc / sys / vm / drop_caches,这没有帮助。 从Documentation / sysctl / vm.txt
这个文件不是控制各种内核caching(inode,dentries,pagecache等)增长的手段。当系统中的其他地方需要内存时,这些对象会被内核自动回收。
使用此文件可能会导致性能问题。 由于它放弃了caching的对象,因此可能会花费大量的I / O和CPU来重新创build被删除的对象,特别是在被大量使用的情况下。 因此,build议不要在testing或debugging环境之外使用。
vm的sysctl文档列出了一些调整参数来控制虚拟内存子系统,包括脏页面行为和最小空闲。 我不build议改变他们,直到你详细了解这样做的好处。 在此之前使用默认或预定义的tunedconfiguration文件。