Linux

用於 Linux 上超快網路伺服器的記憶體映射文件

  • May 3, 2014

有什麼簡單的方法可以告訴 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

引用自:https://serverfault.com/questions/592907