有没有简单的方法告诉Linux保存caching在内存中的文件的目录?
我意识到,Node.Js和Apache花费大部分时间在文件I / O上,如果你有很多文件(特别是对于脚本和模板文件,用户可以等待,如果需要的话,不是太大)。 当然,你应该使用Squid或其他方式加快速度,但这需要很多configuration,而且不能自动完成,而我的重点是“可部署性”(即使交互式安装也需要太多你的普通用户,当然,所有的安全考虑都必须要考虑(包括自动修补包含的httpd的configuration)。
内存映射文件,另一方面应该是一件轻而易举的事情,因为你真的只是想告诉系统:“嘿,只是保持在内存中的文件,直到我告诉你放弃或直到重新启动”; 甚至是一些侵入性的API,它将钩子正确地引入到相关的POSIX或系统调用中,并在用户空间中正确执行。 这是简单的吗? 我似乎无法find一些简单的代码片段或一组指令来完成(不适用于Linux或Windows)。
帮助将不胜感激!
您可以使用vmtouch实用程序将文件或文件的目录locking到内存中。
vmtouch -dl /var/www/html/important_files
用法:
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
所以我可以拿一个这样的目录,看内存有多less:
[root@xt /var/www/html/xt/centos]# vmtouch . Files: 146 Directories: 14 Resident Pages: 0/5996 0/23M 0% Elapsed: 0.059768 seconds
所以我可以“触摸”目录并把它们放到caching中:
[root@xt /var/www/html/xt/centos]# vmtouch -t . Files: 146 Directories: 14 Touched Pages: 5996 (23M) Elapsed: 0.64321 seconds
随后的检查显示:
[root@xt /var/www/html/xt/centos]# vmtouch . Files: 146 Directories: 14 Resident Pages: 5996/5996 23M/23M 100% Elapsed: 0.001846 seconds
从磁盘读取的文件始终存储在文件caching中。 CPU不能直接访问HD。 所有的磁盘I / O映射到虚拟内存空间,CPU通过读取这个虚拟内存空间的区域来访问文件。 如果文件没有被加载到内存中,内核会从磁盘中检索这些文件,并将这些文件存储在内存中,直到内存压力导致内核清空文件caching为止。