将 Linux 上的文件缓存/预加载到 RAM 中

将 Linux 上的文件缓存/预加载到 RAM 中

我有一台相当旧的服务器,它有 4GB 的 RAM,并且几乎整天都在提供相同的文件,但它是从硬盘上执行的,而 3GB 的 RAM 是“空闲的”。

任何曾经尝试运行内存驱动器的人都可以证明它惊人的在速度方面。该系统的内存使用量通常不会超过 1GB/4GB,所以我想知道是否有办法将额外的内存用于一些好的事情。

  • 是否可以告诉文件系统始终使用 RAM 提供某些文件?
  • 还有其他方法可以用来通过使用 RAM 来提高文件读取能力吗?

更具体地说,我并不是在这里寻找“黑客”。我希望文件系统调用能够从 RAM 提供文件,而无需创建 RAM 驱动器并手动将文件复制到那里。或者至少有一个脚本可以为我完成此操作。

可能的应用有:

  • 具有大量读取静态文件的 Web 服务器
  • 具有大型库的应用程序服务器
  • 内存过大的台式计算机

有任何想法吗?

编辑:

  • 发现这非常有用:Linux 页面缓存和 pdflush
  • 正如 Zan 指出的那样,这些内存实际上并不是空闲的。我的意思是这些内存未被应用程序使用,而我想控制哪些内容应该缓存在内存中。

答案1

虚拟触摸似乎是完成这项工作的一个好工具。

强调:

  • 查询目录的缓存量
  • 查询文件缓存了多少内容(以及哪些页面,以图形方式表示)
  • 将文件加载到缓存中
  • 从缓存中删除文件
  • 锁定缓存中的文件
  • 作为守护进程运行

vmtouch 手册

编辑: 问题中询问的用法列在示例 5 中vmtouch主页

Example 5

Daemonise and lock all files in a directory into physical memory:

vmtouch -dl /var/www/htdocs/critical/

编辑2: 作为著名的在评论中,现在有一个git 存储库可用的。

答案2

这也可以使用虚拟触摸虚拟内存触摸器公用事业

该工具允许您控制 Linux 系统上的文件系统缓存。您可以强制或锁定 VM 缓存子系统中的特定文件或目录,或使用它来检查文件/目录的哪些部分包含在 VM 中。

How much of the /bin/ directory is currently in cache?

$ vmtouch /bin/
           Files: 92
     Directories: 1
  Resident Pages: 348/1307  1M/5M  26.6%
         Elapsed: 0.003426 seconds

或者...

Let's bring the rest of big-dataset.txt into memory...

$ vmtouch -vt big-dataset.txt
big-dataset.txt
[OOo                                                 oOOOOOOO] 6887/42116
[OOOOOOOOo                                           oOOOOOOO] 10631/42116
[OOOOOOOOOOOOOOo                                     oOOOOOOO] 15351/42116
[OOOOOOOOOOOOOOOOOOOOOo                              oOOOOOOO] 19719/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOo                        oOOOOOOO] 24183/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo                  oOOOOOOO] 28615/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo              oOOOOOOO] 31415/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo      oOOOOOOO] 36775/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOo  oOOOOOOO] 39431/42116
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 42116/42116

           Files: 1
     Directories: 0
   Touched Pages: 42116 (164M)
         Elapsed: 12.107 seconds

答案3

将东西放入文件系统缓存的穷人技巧是简单地将其 cat 并将其重定向到 /dev/null。

这是一个例子:-

cat /path/myfile.db > /dev/null 

答案4

在广泛阅读了 2.6 内核交换和页面缓存功能后,我找到了“fcoretools”。它由两个工具组成;

  • fincore:将显示应用程序在核心内存中存储了多少页面
  • fadvise:允许您操作核心内存(页面缓存)。

(如果有人觉得这个有趣,我会在这里发布)

相关内容