Linux
用於 Linux 上超快網路伺服器的記憶體映射文件
有什麼簡單的方法可以告訴 Linux 將文件目錄記憶體在記憶體中嗎?
我意識到 Node.Js 和 Apache 將大部分時間花在文件 I/O 上,如果您有很多文件(尤其是腳本和模板文件),則讓使用者等待;如果表,數據庫可以根據需要記憶體內容不是太大)。當然,你應該使用 Squid 或其他方式來加速,但這需要大量的配置,而且不容易自動完成,我的重點是“可部署性”(即使是互動式安裝也需要太多你的普通使用者。當然,所有的安全考慮都必須考慮(包括自動修補包含的 httpd 的配置)。)。
另一方面,記憶體映射文件應該是輕而易舉的,因為你真的只是想告訴系統:“嘿,把那個文件保存在記憶體中,直到我告訴你刪除它或重新啟動”;甚至是一些侵入性的 API,它直接將其掛鉤到相關的 POSIX 或系統呼叫中,並在使用者空間中完全做到這一點。就這麼簡單嗎?我似乎找不到一些簡單的程式碼片段或一組指令來完成(不適用於 Linux 或 Windows)。
幫助將不勝感激!
您可以使用vmtouch 實用程序將文件甚至文件目錄鎖定到記憶體中。
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
所以我可以取一個這樣的目錄,看看記憶體中有多少:
[root@xt /var/www/html/xt/centos]# vmtouch . Files: 146 Directories: 14 Resident Pages: 0/5996 0/23M 0% Elapsed: 0.059768 seconds
所以我可以“觸摸”目錄並將它們放入記憶體:
[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