用於共享主機的 PHP-FPM 和 APC?
我們正在尋找一種方法讓 APC 只為每個帳戶/站點創建一個記憶體。這可以通過 Fastcgi(最後一次更新 2006…)來完成,但使用 Fastcgid APC 必須為同一帳戶執行的多個程序創建多個記憶體。
為了解決這個問題,我們一直在研究 PHP-FPM
PHP 程序管理器允許多個 PHP 程序共享一個 APC 記憶體。
但是從我讀到的內容(我希望我錯了),即使您為每個程序創建一個池,所有池中的所有站點都將共享相同的 APC 記憶體。這讓我們回到了與共享 Memcached 相同的問題:它不安全!
在 php-fpm 的網站上,我讀到您可以 chroot php-fpm 池並為每個池定義一個特定的 UID 和 GID……如果是這種情況,那麼 APC 不應該使用這個使用者並且不能訪問其他池記憶體嗎?
此處的一篇文章(2011 年)建議您需要為每個池執行一個程序,在不同的埠和不同的配置文件上創建多個啟動器,每個配置文件有一個池:
<http://groups.drupal.org/node/198168>
這還有必要嗎?
如果是這樣,執行 php-fpm 的 800 個程序會有什麼影響?主要是記憶體嗎?如果是這樣,我怎樣才能計算出記憶體影響是什麼?
我想最好執行 800 次 php-fpm 然後讓帳戶為單個站點創建多個 APC 記憶體?
如果平均一個帳戶創建一個 50MB 記憶體並為每個帳戶創建 3 個記憶體,則每個帳戶產生 150Mb,即產生 120GB……
但是,如果每個帳戶平均只使用 50Mb,那將是 40GB
我們將在我們的下一個伺服器上至少有 128GB 的記憶體,所以如果執行 800 x PHP-FPM 不會產生超過 20GB 的成本,那麼 40GB 是可以接受的!
您認為 PHP-FPM 是在具有相當大記憶體量的伺服器上為共享主機提供安全 APC 記憶體的最佳方式嗎?
或者我應該看看另一個系統?
謝謝 !
我知道你想做什麼,因為這是我領導的項目的一部分。我已經對此進行了調查,似乎解決問題的唯一方法是使用修改後的 memcached 和 apc 版本。
我認為目前 APC 確實允許將數據保存到 memcached 中,但我發現它沒有,所以解決問題的最簡單方法是破解 memcached 允許它擁有具有不同記憶體的不同帳戶,並且可能具有不同的記憶體大小,並且然後也破解 APC,允許查詢 memcached 以從中獲取操作碼。
Memcached hack 也很有用,因為您可以為記憶體設置過期時間並評估應該記憶體的內容和不應該記憶體的內容:這樣您可以節省更多的記憶體,並且只在需要時使用它。要選擇您要使用的帳戶,您可以對 memcached 伺服器使用 SASL 身份驗證(已經為 memcached 開發),從而在此配置中增加安全性。
Memcached 部署對於記憶體等其他事情也很有用,所以我將遵循這條路徑。