Apache-2.4

WAMP Stack/Silverstripe,高 TTFB 但快速 PHP 執行?我在哪裡可以找到答案?

  • September 20, 2018

我的生產伺服器是 Windows Server 2012 R2、Apache 2.4、PHP 5.6 和 MariaDB(不確定版本,可能不相關)。我有一個在 Silverstripe 3.5 上執行的自定義站點。

最近,我收到了一些帶有某些操作的荒謬 TTFB,最明顯的是登錄(超過 30 秒),或者有時在瀏覽後端時是隨機的。奇怪的是,這不會發生在我們配置類似的開發伺服器上,我們的 IT 部門將傾訴httpd.confphp.ini查看是否存在任何可能成為問題的差異。

我啟用了 Zend OpCache 擴展,希望它會有所幫助,但我沒有看到任何重大改進。

我在登錄時安裝了 XDebug 並觸發了分析(通過通過 DOM 檢查器添加一個名為 XDEBUG_PROFILE 的隱藏表單欄位),但是在 WinCachegrind 中查看時的輸出顯示 PHP 的執行累積時間不超過 5 秒 - 即總累積時間main.php為4.x 秒。框架邏輯或數據庫訪問似乎沒有明顯的瓶頸。

httpd.exe在請求期間佔用了我 14% 的 CPU。使用 Powershell 觀察日誌gci -Wait表明,在發送access.log響應之前,請求沒有登錄(不確定是否正常行為),並且沒有彈出錯誤。

我很困惑為什麼 Apache 需要這麼長時間來處理 PHP 聲稱只需要 4 秒來執行邏輯的請求。雖然可能會讚賞潛在的解決方案,但我真的很想知道在診斷方面我還能在哪裡查看導致 Apache 像這樣變慢的原因,例如文件訪問、跟踪執行等?我什至不知道從哪裡開始尋找。

數據庫不是瓶頸。具有諷刺意味的是,它是記憶體——這是一個已知問題,Zend_Cache_Backend_File如果站點有大量數據、模板和圖像要記憶體,基於記憶體的速度會慢得令人作嘔。果然,我在伺服器上的 silverstripe-cache 文件夾中有超過 5,000 個文件。

添加以下行以./mysite/_config.php禁用記憶體會立即產生壓倒性的改進(登錄時的 35 秒 TTFB 降至不到 0.5 秒!):

SS_Cache::set_cache_lifetime('default', -1, 100);

但是,這是一個臨時修復。我們將研究實現一個更持久、更實用的記憶體處理解決方案,例如將 ramdisk 與文件系統後端結合使用,或利用使用 XCache 或 Memcached 等記憶體池的後端,以及努力轉向Silverstripe 4.x 轉儲Zend_Cache支持symfony/cache.

但是,鑑於我的辦公室喜歡讓官僚主義妨礙一切……可能還需要一點時間。

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