Ubuntu

lighttpd 大上傳記憶體消耗

  • June 1, 2009

考慮以下場景:

  • 我正在執行 lighttpd-1.4.19,我正在通過它處理大量上傳(數百 MB 但小於 1GB)。
  • 伺服器在 Ubuntu 8.04 LTS 上執行。
  • 文件臨時寫入 /var/tmp。
  • PHP5 正在通過 fastcgi 處理最終結果。
  • 在上傳期間,上傳塊被寫入臨時目錄。

奇怪的是,雖然這些塊是寫在磁碟上的,但在上傳過程中,伺服器上的可用記憶體逐漸減少到完整的文件大小。我會理解 RAM 會隨著每個塊的大小(比如說 1-2MB)而減少,直到它們被寫入磁碟,但我不明白為什麼它是整個文件大小(比如說 300MB)。

  1. 你知道為什麼雖然塊被寫入磁碟,但為什麼整個文件都要佔用 RAM 嗎?是否有可能 /var/tmp 直接安裝在記憶體中?與 /tmp?
  2. 如果沒有,您是否知道如何診斷以及如何確定哪個程序佔用了記憶體?我沒有看到 lighttpd 或 php-cgi 程序隨著 ps 的增加而增加,但也許我看的不是正確的東西。
  3. 或者更好的是,您是否有關於一個好的 Web 伺服器(Apache、Nginx、lighttpd 等)和配置來處理大型上傳而不將所有內容儲存在 RAM 中的建議?

謝謝!

如果 lighttpd 或 php-cgi 的大小沒有增加,請不要擔心 - 您看到的增加不是這些程序的 RAM 消耗,而是核心對磁碟記憶體的使用。基本上,由於您只是將這些大文件寫了出來,核心將它們保留在記憶體中,假設您可能想再次讀取它們。如果其他程序需要該記憶體,它當然會刪除此記憶體。

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