<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. php語言

    PHP中的Reload操作

    時間:2025-04-29 01:04:37 php語言 我要投稿
    • 相關推薦

    PHP中的Reload操作

      通常修改了 PHP 的配置后,為了讓修改生效會執行 reload,而不是 restart,但最近在使用Reload操作的時候發現了502錯誤,想著還是要重新思考這個問題。所以這篇文章主要給大家介紹了關于PHP中Reload操作的內容,有需要的朋友們可以參考借鑒,下面來一起看看吧。更多內容請關注應屆畢業生網!

      前言

      有很多前輩告誡過我們,reload 能保證整個過程的平滑性,所謂平滑性指的是在 reload 的過程中,舊的進程在處理完當前請求前不會提前終止。很多年來,我從來沒有質疑過這種說法,直到有一天,當我 reload 的時候,出現了 502 錯誤,讓我不得不重新思考。

      如何重現問題呢?讓我們寫一個簡單的腳本來模擬:

      ?

      sleep(11);

      echo "foo";

      ?>

      此時用瀏覽器瀏覽這個網址,接著立刻執行 reload 操作,就能看到 502 錯誤了。

      難道 PHP 這么弱?連 reload 基本的平滑性都無法保證?答案當然是否定的,實際上通過 process_control_timeout 參數可以實現我們的目標。可惜這個參數缺省是 0,也就是不生效,本文把它設置成 10s。重新執行之前的實驗步驟,這一次正常輸出了結果。不過如果你多做幾次實驗的話,可能會發現當我們 reload 的時候,sleep 立刻就結束了,這是因為 sleep 收到 reload 發出的信號后直接返回了,下面讓我們再改寫一下腳本:

      ?

      sleep(11);

      echo "foo";

      sleep(11);

      echo "bar";

      ?>

      重新執行之前的實驗步驟,你會發現 502 錯誤又出現了。這是因為 reload 雖然讓第一個 sleep 立刻結束了,但是第二個 sleep 還是有效的,而且超過了 process_control_timeout 的時間限制。如果我們把 process_control_timeout 設置為 12s,那么就又好了。

      如此說來,我們只要給 process_control_timeout 設置一個合理的數值就能保證 reload 操作的平滑性,不過到底多大是合理的數值呢?太小的話可能起不到作用,太大的話會不會有副作用?讓我們帶著疑問重復上一次實驗,不過這次我們再加一個監控:

      ?

      1

      shell> watch -n1 'ps aux | grep php[-]fpm'

      此監控的目的是為了觀察 reload 過程中 PHP-FPM 進程數的變化情況,為了讓效果更明顯些,建議把 PHP-FPM 的啟動方式改成 static 模式,同時進程數不要太多。

      當我們重復上一次實驗的時候,結果發現除了正在執行請求的進程,其它進程直接就被干掉了,而新進程又沒有立刻啟動,就這樣一直卡到最后一個舊進程執行完后新進程才完成啟動過程。在此期間,如果有別的請求進來,那么無疑它無法立刻得到響應。

      根據我們的實驗可以得出結論:缺省情況下,PHP-FPM 無法保證平滑的執行 reload 操作,必須設置一個合理的 process_control_timeout 才行,同時需要注意的是其值不能設置的過大,否則系統可能出現更為嚴重的請求堵塞問題。

      總結

      以上就是關于PHP中Reload操作的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

    【PHP中的Reload操作】相關文章:

    PHP中MySql操作是什么07-24

    php中目錄文件操作詳談02-21

    PHP中FTP操作類代碼03-03

    在PHP中操作MySQL要注意哪些問題07-18

    PHP開發中關于文件操作的疑難問答07-22

    PHP中如何定義類及其成員屬性與操作03-06

    PHP常用MySql操作07-26

    PHP文件怎么操作01-29

    php操作mysql步驟06-04

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人