用于 Linux 上超快网络服务器的内存映射文件

Dom*_*omi 2 linux windows filesystems memory cache

有没有什么简单的方法可以告诉 Linux 在内存中缓存文件目录?

我意识到 Node.Js 和 Apache 将大部分时间花在文件 I/O 上,如果您有很多文件(尤其是对于脚本和模板文件;数据库可以根据需要缓存内容,如果表不是太大)。当然,您应该使用 Squid 或其他加快速度的方法,但这需要大量配置,并且不能轻松自动完成,我的重点是“可部署性”(即使是交互式安装也需要太多您的普通用户。当然,必须考虑所有安全因素(包括对包含的 httpd 配置的自动修补)。)。

另一方面,内存映射文件应该是轻而易举的,因为您真的只想告诉系统:“嘿,将该文件保留在内存中,直到我告诉您删除它或直到重新启动”;或者甚至是一些侵入性的 API,它可以直接将其挂钩到相关的 POSIX 或系统调用中,并且在用户空间中完全做到这一点。有那么简单吗?我似乎找不到一些简单的代码片段或指令集来完成(不适用于 Linux 或 Windows)。

帮助将不胜感激!

eww*_*ite 5

您可以使用vmtouch 实用程序将文件甚至文件目录锁定到内存中。

vmtouch -dl /var/www/html/important_files
Run Code Online (Sandbox Code Playgroud)

用法:

vmtouch v0.8.0 - the Virtual Memory Toucher by Doug Hoyte
Portable file system cache diagnostics and control

Usage: vmtouch [OPTIONS] ... FILES OR DIRECTORIES ...

Options:
  -t touch pages into memory
  -e evict pages from memory
  -l lock pages in physical memory with mlock(2)
  -L lock pages in physical memory with mlockall(2)
  -d daemon mode
  -m <size> max file size to touch
  -f follow symbolic links
  -v verbose
  -q quiet
Run Code Online (Sandbox Code Playgroud)

所以我可以使用这样的目录,看看内存中有多少:

[root@xt /var/www/html/xt/centos]# vmtouch .
           Files: 146
     Directories: 14
  Resident Pages: 0/5996  0/23M  0%
         Elapsed: 0.059768 seconds
Run Code Online (Sandbox Code Playgroud)

所以我可以“触摸”目录并将它们放入缓存中:

[root@xt /var/www/html/xt/centos]# vmtouch -t .
           Files: 146
     Directories: 14
   Touched Pages: 5996 (23M)
         Elapsed: 0.64321 seconds
Run Code Online (Sandbox Code Playgroud)

随后的检查显示:

[root@xt /var/www/html/xt/centos]# vmtouch .
           Files: 146
     Directories: 14
  Resident Pages: 5996/5996  23M/23M  100%
         Elapsed: 0.001846 seconds
Run Code Online (Sandbox Code Playgroud)