我在我的服務器上使用php 5.2.11 + php-fpm + nginx。 如果用戶發送耗時的請求「A」,則在從服務器獲得對「A」的響應之前,他會發送更多其他正常請求。 奇怪的是,用戶在返回「A」的響應之前無法獲得任何響應,似乎php-fpm將請求排隊。 我檢查了tcp連接,請求是從不同套接字發送的,具有相同的PHPSESSION。而在服務器端,php-fpm也將正常請求寫入慢日誌。php fpm請求排隊
我想不出如何解決它,有什麼建議嗎?
我在我的服務器上使用php 5.2.11 + php-fpm + nginx。 如果用戶發送耗時的請求「A」,則在從服務器獲得對「A」的響應之前,他會發送更多其他正常請求。 奇怪的是,用戶在返回「A」的響應之前無法獲得任何響應,似乎php-fpm將請求排隊。 我檢查了tcp連接,請求是從不同套接字發送的,具有相同的PHPSESSION。而在服務器端,php-fpm也將正常請求寫入慢日誌。php fpm請求排隊
我想不出如何解決它,有什麼建議嗎?
這不是PHP-FPM故障。既然你說他們有相同的會話,那麼這就是罪魁禍首。 PHP中的會話具有每會話鎖定,因此一個用戶無法使用特定會話ID加載頁面,而有相同會話的未完成請求;當您撥打session_start()
時會發生阻塞。這是爲了避免不同的請求編輯相同的會話變量(導致各種問題)。當請求結束並將其生成的會話數據寫入商店時,下一個可以開始。
如果您希望能夠讀取會話變量並開始耗時的工作,但不想阻止其他請求發生,只需在讀取會話數據後使用session_write_close()
繼續。請注意,在調用後無法修改會話數據(並且可能無法讀取它,因爲$_SESSION
已被清空,但不記得)。