1 windows如何更改 FileSystem 缓存的大小
你可以使用命令行更改文件系统缓存的大小。 此操作需要完整地重置缓存,并且它需要管理权限。
更改文件系统缓存的大小
将以下注册表值设置为0(零):
HKEY \ _LOCAL \ _MACHINE \SOFTWARE\Microsoft\SoftGrid\4.5\Client\AppFS\State
将以下注册表值设置为包含程序包所需的最大缓存大小(以 MB 为单位),例如,8192 MB:
HKEY \ _LOCAL \ _MACHINE \SOFTWARE\Microsoft\SoftGrid\4.5\Client\AppFS\FileSize
重新启动计算机。
2 Linux文件系统缓存filesystem cache
许多人没有意识到。文件系统缓存对于性能的影响。Linux系统默认的设置倾向于把内存尽可能的用于文件cache,所以在一台大内存机器上,往往我们可能发现没有多少剩余内存。(free命令显示的第二行输出,如下)。文件系统cache可以加速磁盘操作,使系统有更好的IO性能,代价只是把一些空闲的内存利用起来了。
我们需要预留多少内存做文件系统cache呢? 首先我们要理解“free”命令
total used free shared buffers cached Mem: 2058824 1772172 286652 0 214708 879744 -/+ buffers/cache: 677720 1381104 Swap: 1048568 84 1048484
对于如上的命令输出,我们看下Mem 节,total列显示我们一共有2G内存。used列显示我们使用了约1.8G内存(1772172),快接近总内存了。其实used列包含了用于文件系统cache的部分,真实用到的内存可能远远没有这么多。
我们查看“-/+ buffers/cache.” 节,这里的“used”列(677,720)表明实际使用了多少内存。 “free”列=Mem节的buffers+cached+free ,即 free = 214708+879744+286652 = 1381104 ,表明如果bffers和cache都是空的,我们拥有多少空闲内存。所以这台机器实际只是用来661M内存(677720/1024/1024) .
那么,对于这个应用,这是合适的cache分配吗?需要更多内存用于cache吗?是否有浪费资源呢?
答案是“依情况而定”。
cache的规则很简单:
你希望cache能够尽可能满足正在执行的工作。从应用程序栈的角度考虑,越往下层,cache越不那么高效,越不知道应该缓存哪些内容,那么你就可能需要更大的内存,想想看磁盘阵列的巨大的cache就知道了。
所以,如果你的应用程序有能力去cache,你最好把内存更多留给你的应用程序,而不是文件系统缓存。当然,也不是把所有空闲内存都分配给应用程序,因为文件系统缓存在一些场合仍然有用,比如写日志,我们也可能需要额外的buffers。
但是如果让你做一个选择,是给你的数据库10GB内存还是给文件系统cache 10G内存,显然你应该把内存给数据库。所以高效的磁盘数据库往往自己实现了存储子系统,而不是依赖于文件系统缓存,从理论上来说,MySQL Innodb这样实现了自己的存储引擎,可以更智能的缓存数据的数据库天然就比Mongodb这样依赖文件系统来刷新数据的数据库高效得多。
所以,对于我们的操作系统,free命令显示出的空闲内存,应该更多关注-/+ buffers/cache: 这节内容。这表明了你的系统可能还剩余的空闲内存。我们需要确保我们有足够的剩余用于以后的负荷增长。
。这表明了你的系统可能还剩余的空闲内存。我们需要确保我们有足够的剩余用于以后的负荷增长。
对于数据库类应用,很多时候,我们希望越过文件系统,但对于一些日志操作,仍然需要利用文件系统cache的,由于文件系统cache不够可能导致对磁盘的压力突然增加,对于非数据库的其他应用,比如web服务器,虚拟机,往往利用好文件cache更高效,特别是对于改善IO有好处。