创建 tar 填充系统缓存

hal*_*tan 4 cache tar

我的情况非常简单:我备份了一些文档并将它们放在 NAS 上,因为我宁愿传输一个大文件而不是数百万个小文件,所以我创建了一个 tar

\n\n
tar cf backup/2013-07-12-pictures.tar Pictures\n
Run Code Online (Sandbox Code Playgroud)\n\n

我的Pictures目录包含大约 12GB 的数据,并且我的缓存逐渐填满。如果我压缩更多文件(例如我的项目,等等),不需要很长时间,并且我所有的32GB RAM都会被使用:

\n\n
sheldor:~$ free -g\n             total       used       free     shared    buffers     cached\nMem:            31         31          0          0          0         27\n-/+ buffers/cache:          2         28\nSwap:           29          0         29\n
Run Code Online (Sandbox Code Playgroud)\n\n

此时,虽然鼠标和系统通常负责,但启动程序(从磁盘读取)需要很长时间。字面上的年龄:我有一个 SSD 并启动 Chrome,通常需要一秒钟,现在大约需要 2 分钟。

\n\n

现在你会在互联网上找到所有关于清除缓存不好的帖子等等。在这里,在Ask Ubuntu上你也可以找到这样的帖子,它通过提供命令救了我的命

\n\n
sudo sync && sudo sysctl -w vm.drop_caches=3\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您仔细阅读评论,您会发现例如这里:

\n\n
\n

这不是问题,这就是页面缓存的工作原理。它将尽可能长时间地缓存内容,但当其他应用程序的内存压力增加时会自动释放项目。无需手动清除。\xe2\x80\x93 铯 11 年 11 月 22 日 16:08

\n
\n\n

什么?我的系统(Intel Core i7 3.50GHz \xc3\x97 8、32GB RAM、NVidia Gtx 590)在简单的 tar 后被冻结。我的意思是,在我的缓存自动释放之前我必须施加多大的压力?

\n\n

问题:有没有办法调整设置,以便更频繁地清除我的缓存?或者这只是我必须忍受的事情?

\n

Glu*_*ate 5

我同意 Linux 中的缓存处理远非最佳。事实上,在许多方面,Linux 对于服务器/工作站的使用仍然比桌面使用更优化。有关 CPU/IO 调度的类似问题,请参阅此问答。

话虽如此,有一些解决方案可以缓解这个问题。您可以手动清除缓存或设置 cronjob,就像user197590指出的那样。另一种方法是禁用特定应用程序的缓存生成。您可以使用该nocache实用程序来执行此操作。目前它仅在13.10 存储库中可用,但我能够在 12.04 上安装 Saucy 包,没有任何问题。

nocache使用起来相当简单。您可以将其添加到要在没有缓存的情况下执行的任何命令之前,例如:

nocache tar cf backup/2013-07-12-pictures.tar Pictures

这不是一个因果解决方案,但它绝对可以治愈过度缓存的症状。