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

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

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

最近,我在某些操作中遇到了荒謬的 TTFB,最明顯的是登入(超過 30 秒),或有時在瀏覽後端時隨機出現。奇怪的是,這種情況不會發生在我們配置類似的開發伺服器上,我們的 IT 部門將全力以赴httpd.conf查看php.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 像這樣變慢的原因,例如文件訪問、跟踪執行等?我什至不知道從哪裡開始尋找。

答案1

資料庫是不是瓶頸。諷刺的是,這是快取- 它是已知問題是,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.

但鑑於我的辦公室喜歡讓官僚主義妨礙一切......可能會在這種情況發生之前一點。

相關內容