Cache

Linux、Apache HTTPD 或 PHP 是否記憶體頻繁/最近訪問的文件?

  • June 12, 2015

假設我們有一個簡單的index.php文件:

<?php
   inclde('file1.php');
   inclde('file2.php');
   inclde('file3.php');

據推測,這最終將導致三個額外的單獨的 I/O 請求到磁碟,除了index.php何時提供文件。

現在,假設這個文件被放置在一個網站上並且經常被請求。如果這些文件以某種方式記憶體在記憶體中,而不是每次有人訪問網站時都發出 I/O 請求,那將是有意義的。

問題:

  1. Apache httpd 記憶體index.php嗎?
  2. 那3個include()操作呢?
  3. PHP 是否通過 Apache 從作業系統請求文件?使用哪種 mpm 模型有關係嗎?
  4. nginx、lighttpd 或任何其他網路伺服器是否進行記憶體?
  5. 這是否也取決於作業系統文件系統?即Linux作業系統通常會記憶體經常訪問的文件嗎?
  6. 或者是否有更低級別的記憶體?
  7. 或者 PHP 或任何其他伺服器應用程序引擎是否以某種方式記憶體文件並且 I/O 請求永遠不會到達作業系統?

由於磁碟 I/O 通常是最大的瓶頸,因此了解 Web 伺服器如何在各個級別記憶體文件可以幫助調整性能,甚至是應用程序開發,例如,可能連接短應用程序文件而不是多個文件有助於提高性能。

感謝您的幫助!

作業系統具有文件系統記憶體,它將讀/寫請求記憶體到實際的硬體設備。

然後是具體問題:

  1. Apache 不做記憶體。
  2. include() 函式在預設的 PHP 安裝中不做記憶體。如果你安裝了一個像 APC、Xcache 或 OPCache 這樣的 OPCode 記憶體,那麼它會在記憶體中記憶體程式碼的編譯版本。
  3. 文件系統訪問是通過作業系統文件系統呼叫完成的。
  4. 他們做任何記憶體沒有任何好處,因此他們不這樣做。文件系統記憶體足以用於靜態文件記憶體,並且任何動態語言都有更好的記憶體選項。
  5. Linux VFS 層進行記憶體,因此它不是由文件系統完成的。
  6. 硬碟本身也有一些記憶體,但在該層上的好處並不大,因為它沒有任何有利於記憶體的資料結構資訊。
  7. 是的,答案#2 中提到了正確的 OPcode 記憶體。

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