我有一台相当旧的服务器,它有 4GB 的 RAM,并且几乎整天都在提供相同的文件,但它是从硬盘上执行的,而 3GB 的 RAM 是“空闲的”。
任何曾经尝试运行内存驱动器的人都可以证明它惊人的在速度方面。该系统的内存使用量通常不会超过 1GB/4GB,所以我想知道是否有办法将额外的内存用于一些好的事情。
- 是否可以告诉文件系统始终使用 RAM 提供某些文件?
- 还有其他方法可以用来通过使用 RAM 来提高文件读取能力吗?
更具体地说,我并不是在这里寻找“黑客”。我希望文件系统调用能够从 RAM 提供文件,而无需创建 RAM 驱动器并手动将文件复制到那里。或者至少有一个脚本可以为我完成此操作。
可能的应用有:
- 具有大量读取静态文件的 Web 服务器
- 具有大型库的应用程序服务器
- 内存过大的台式计算机
有任何想法吗?
编辑:
- 发现这非常有用:Linux 页面缓存和 pdflush
- 正如 Zan 指出的那样,这些内存实际上并不是空闲的。我的意思是这些内存未被应用程序使用,而我想控制哪些内容应该缓存在内存中。
答案1
答案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:允许您操作核心内存(页面缓存)。
(如果有人觉得这个有趣,我会在这里发布)