PHP-FPM 慢日誌回傳無效結果

PHP-FPM 慢日誌回傳無效結果

問題

我在 RHEL 8 上的 Apache 2.4 下運行 PHP-FPM 7.4.30,但無法讓 PHP 的 Slowlog 正常運作。它不會傳回有關長時間運行的腳本的有效資訊。

當我啟用 Slowlog 時(即使是request_slowlog_timeout10 秒或更長時間的高值),我會看到日誌中出現許多條目,包括我知道不會長時間運行的腳本。該列表是隨機出現的,顯示其中各種腳本和函數的回溯。沒有明顯的模式。我確信傳回的訊息無效。這些腳本在請求和向 Apache 傳回結果之間不需要花費那麼長時間。

應該發生什麼

根據 PHP 文檔,slowlog 應該只標記那些自啟動以來運行超過一定時間的腳本。要求到伺服器已完成。換句話說,它應該測量請求和腳本完成運行之間的時間。但是,當我啟用 Slowlog 時,不會發生這種情況。

似乎發生了什麼

我的理論是,slowlog 並沒有測量運行時間個人要求來自 Apache,而是來自 Apache 的時間子進程已經運行。由於子進程可以運行相當長的時間,因此它們可能看起來是慢日誌的長時間運行腳本。當 Slowlog 發現子進程運行時間超過 時request_slowlog_timeout,它會輸出當前運行腳本的回溯(可以是當時運行的任何內容)。

我的問題

  1. 為什麼 PHP-FPM 在慢日誌中顯示這樣的無效條目?它無法偵測到請求的開始嗎?
  2. 如何配置 Slowlog 以僅記錄預期內容:單一請求的運行時間?

我還沒有找到有關此問題的任何其他報告,但每次我在生產伺服器上以及只有一個用戶的測試伺服器上啟用慢速日誌時,我都能產生它。

非常感謝您的任何見解或幫助。

答案1

你偶然找到答案了嗎?

我有同樣的問題,並花了幾個小時試圖解決它。更令人困惑的是 php-fpm 錯誤日誌將包含類似這樣的條目

警告:[pool www]子進程 7559 在訊號 15 (SIGTERM) 上退出 166.818268 秒後開始

或者

[19-Jun-2023 16:24:56] 警告:[pool www] child 7646,腳本「」(請求:「」)執行逾時(66.168368 秒),正在終止

然而,在達到 request_terminate_timeout 之前,在慢速日誌中找不到相同的 PID。邏輯似乎規定,在被終止之前運行了 66 秒以上的請求也會在 10 秒後記錄到慢速日誌中。

我很難過

相關內容