php請求阻塞的問題

今天發(fā)現(xiàn)公司出現(xiàn)一個(gè)問題
index是個(gè)耗時(shí)任務(wù),請求的時(shí)候一直阻塞在那里
接下來第二個(gè)請求到來的時(shí)候也阻塞在那里
這是為什么呢?

先來分析下原因
剛開始我以為是fpm的問題,請求交給nginx后,通過fpm轉(zhuǎn)交給worker進(jìn)程處理的時(shí)候阻塞,應(yīng)該是不會影響下一個(gè)請求的.因?yàn)閮蓚€(gè)請求由不同的worker進(jìn)程處理.

那是什么原因呢?
查了下資料,發(fā)現(xiàn)每個(gè)請求進(jìn)來都會啟用session_start(),session嗎,大家都知道.
那是怎么阻塞后續(xù)的請求呢?

原來seesion_start()的時(shí)候,會去服務(wù)器上找session文件.讀取里面保存的session信息.
同學(xué)們注意了,session默認(rèn)保存的是文件.意味著什么,讀取的時(shí)候會有文件鎖.

那么原因就很明顯了
第一個(gè)請求進(jìn)來,占有session文件,耗時(shí)處理.
第二個(gè)請求進(jìn)來,發(fā)現(xiàn)session文件被占有,就阻塞等待.

結(jié)果也是跟我預(yù)計(jì)的一樣.
當(dāng)?shù)谝粋€(gè)請求返回的時(shí)候,后續(xù)請求立馬執(zhí)行了.

那可以怎么樣規(guī)避這樣的問題呢?

  1. 將session存到redis這樣的內(nèi)存緩存中;
  2. session讀取完之后立馬釋放session_write_close();

注意的地方:
之前在本地測試時(shí)候,發(fā)現(xiàn)不管設(shè)置都是阻塞的,一度以為這個(gè)函數(shù)沒什么用.后來思考了下,斷定是我本地的phpstudy配置的問題.估計(jì)phpstudy就啟動(dòng)了一個(gè)進(jìn)程來處理所有請求,所以導(dǎo)致了阻塞.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文github地址 1.PHP概述 1.1 PHP的歷史發(fā)展 1995年由Lerdorf創(chuàng)建PHP,高級腳本語言...
    10xjzheng閱讀 1,572評論 0 2
  • [toc] 在公司的網(wǎng)站上推薦使用 docker 容器來安裝環(huán)境,一個(gè)項(xiàng)目一個(gè) docker 容器。 、、 百度百...
    Mdvtrw閱讀 1,564評論 0 1
  • Nginx簡介 解決基于進(jìn)程模型產(chǎn)生的C10K問題,請求時(shí)即使無狀態(tài)連接如web服務(wù)都無法達(dá)到并發(fā)響應(yīng)量級一萬的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,199評論 0 9
  • 【日精進(jìn)打卡第3天】 【知~學(xué)習(xí)】 《六項(xiàng)精進(jìn)》2遍 共6遍 《大學(xué)》2遍 共24遍 【經(jīng)典名句分享】 有志者,事...
    顧德成閱讀 295評論 0 0

友情鏈接更多精彩內(nèi)容