摘要:你還記得調(diào)頻嗎,它可以在和上使用,可以將頻率設(shè)置為來提高性能和系統(tǒng)響應能力。在這個級別上,約有的進程仍然閑置。
讓我們快速了解如何更好的設(shè)置 PHP-FPM,以實現(xiàn)高吞吐量和低延遲
默認情況下,大多數(shù)設(shè)置都將 PHP-FPM 的 PM(進程管理器)設(shè)置為 dynamic,并且如果遇到內(nèi)存不足的問題,還需要使用 ondemand
讓我們看一下 php.net 文檔中的選項,并介紹我最喜歡的設(shè)置 - static:
pm = dynamic: 子進程的數(shù)量根據(jù)以下配置動態(tài)設(shè)置 pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers
pm = ondemand: 進程在請求時按需創(chuàng)建,而不是動態(tài)的,其中 pm.start_servers 進程數(shù)量在服務啟動時創(chuàng)建
pm = static: 子進程的數(shù)量由 pm.max_children 決定
PHP-FPM(PM)與 CPUFreq 的相似之處這看起來有點偏離主題,但我希望將其結(jié)合到我們的 PHP-FPM 調(diào)優(yōu)主題中
我們都遇到過 CPU 緩慢的問題,無論是筆記本,虛擬機還是服務器。
你還記得 CPU 調(diào)頻嗎?(CPUFreq),它可以在 linux 和 Windows 上使用,可以將 CPU 頻率設(shè)置為 ondemand 來提高性能和系統(tǒng)響應能力。
現(xiàn)在,我們來比較一下這些描述并尋找相似之處:
Governor = ondemand: 按需快速動態(tài)調(diào)整 CPU 頻率, 一有 cpu 計算量的任務,就會立即達到最大頻率運行,空閑時間增加就降低頻率
Governor = conservative: 按需快速動態(tài)調(diào)整 CPU 頻率, 比 ondemand 的調(diào)整更保守
Governor = performance: 總是運行于最大頻率
有關(guān)更多詳細信息,請參閱 CPUFreq 調(diào)控器選項的完整列表
有沒有注意相似之處呢 ?
使用 pm static 來實現(xiàn)最高性能pm static 設(shè)置在很大程度上取決于您的服務器有多少空閑內(nèi)存。
基本上,如果你的服務器內(nèi)存很低,那么 pm ondemand 或 dynamic 可能是更好的選擇。
如果您擁有足夠的內(nèi)存,則可以設(shè)置 pm static 來避免大部分 PM 開銷。
換句話說,當您進行數(shù)學運算時,應將 pm.static 設(shè)置為服務器可運行的最大數(shù)量的進程數(shù),它就不會有內(nèi)存不足或緩存壓力的問題
在上面的截圖中,PHP-FPM 的配置為 pm = static 和 pm.max_children = 100
它有 32GB的內(nèi)存,在截圖期間,Google Analytics 中約有 200 個 “活躍用戶”(過去 60 秒)。
在這個級別上,約有 70% 的 PHP-FPM 進程仍然閑置。
這意味著 PHP-FPM 設(shè)置為服務器資源的最大容量后,它不會去在意當前流量,空閑進程會保持聯(lián)機狀態(tài),等待流量高峰立即響應,而不必等到請求來了之后再創(chuàng)建進程
我將 pm.max_requests 設(shè)置的非常高,因為這是一個沒有 PHP 內(nèi)存泄漏的生產(chǎn)服務器。
如果您對當前和將來的 PHP 代碼有 110% 的信心,可以將 pm.max_requests = 0 與 pm static 一起使用
使用 pm dynamic,您可能會出現(xiàn)類似于下面的錯誤:
WARNING: [pool xxxx] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 32 children, there are 4 idle, and 59 total children
您可能會嘗試調(diào)整 pm 配置,但仍然會看到同樣的錯誤
在這種情況下,pm.min 太低,并且因為流量和峰值波動很大,使用 pm dynamic 可能難以調(diào)整
一般的建議是使用 pm ondemand。 然而,情況會變的更糟,因為 ondemand 會在沒有流量時關(guān)閉空閑進程,然后最終會產(chǎn)生與流量波動很大一樣的開銷問題 (除非您設(shè)置空閑超時的時間非常非常的長)
但是,當您擁有多個 pm 進程池時,pm dynamic, 特別是 ondemand 是可以為您節(jié)省時間的
結(jié)論當流量波動比較大的時候,,PHP-FPM 的 ondemand 和 dynamic 會因為固有開銷而限制吞吐量。 您需要了解您的系統(tǒng)并設(shè)置 PHP-FPM 進程數(shù),以匹配服務器的最大容量。
從 pm.max_children 開始,根據(jù) pm dynamic 或 ondemand 的最大使用情況去設(shè)置
您會注意到,在 pm static 模式下,因為您將所有內(nèi)容都保存在內(nèi)存中,所以隨著時間的推移,流量峰值會對 CPU 造成比較小的峰值,并且您的服務器負載和 CPU 平均值將變得更加平滑。 每個需要手動調(diào)整的 PHP-FPM 進程數(shù)的平均大小會有所不同
附上一張 A/B 測試圖
最后希望這是一篇有用的文章
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/30728.html
摘要:進程管理器和的相似之處現(xiàn)在,我們要說些偏離主題,但我覺得和調(diào)優(yōu)有關(guān)的事情。但是,一旦你有可用的閑置內(nèi)存,那么把設(shè)置成的最大值將減少許多進程管理器所帶來的開銷。 showImg(https://segmentfault.com/img/remote/1460000016435381);讓我們來迅速了解一下怎樣設(shè)置 PHP-FPM,以便達到高吞吐,低延遲以及穩(wěn)定的使用 CPU 和內(nèi)存的完美...
摘要:你有沒有看到了一篇比較不錯的文章,想翻譯出來分享給大家,但卻發(fā)現(xiàn)無從下手,只好放棄了的經(jīng)歷呢這篇文章或許能夠幫助到你。但是我們需要記住,我們翻譯一篇文章的時候,需要做到本土化。 你有沒有看到了一篇比較不錯的文章,想翻譯出來分享給大家,但卻發(fā)現(xiàn)無從下手,只好放棄了的經(jīng)歷呢?這篇文章或許能夠幫助到你。 在提筆翻譯之前,我們有幾個前提條件,如果您能夠滿足這些條件,那么您的翻譯過程或許會比較順...
摘要:是實現(xiàn)的進程管理器用于替換的大部分附加功能,適用于高負載網(wǎng)站。能夠創(chuàng)建的最大子進程數(shù)量,它在使用多個配置的進程池的時候,控制全局的子進程數(shù)量。同時根據(jù)進程池的數(shù)量來看一個進程管理器的子進程數(shù)量限制。 PHP-FPM 先來了解一些名詞概念: CGI是Common Gateway Interface(通用網(wǎng)管協(xié)議),用于讓交互程序和Web服務器通信的協(xié)議。它負責處理URL的請求,啟動一個進...
摘要:首先,我們關(guān)注下的運行方式模式始終保持一個固定數(shù)量的子進程,這個數(shù)由定義,這種方式很不靈活,也通常不是默認的。指的是每個子進程在處理了多少個請求數(shù)量之后就重啟。 首先,我們關(guān)注下 PHP-FPM 的運行方式:pm = static模式: 始終保持一個固定數(shù)量的子進程,這個數(shù)由pm.max_children定義,這種方式很不靈活,也通常不是默認的。優(yōu)點是不用動態(tài)的判斷負載情況,提升性能;...
摘要:首先,我們關(guān)注下的運行方式模式始終保持一個固定數(shù)量的子進程,這個數(shù)由定義,這種方式很不靈活,也通常不是默認的。指的是每個子進程在處理了多少個請求數(shù)量之后就重啟。 首先,我們關(guān)注下 PHP-FPM 的運行方式:pm = static模式: 始終保持一個固定數(shù)量的子進程,這個數(shù)由pm.max_children定義,這種方式很不靈活,也通常不是默認的。優(yōu)點是不用動態(tài)的判斷負載情況,提升性能;...
閱讀 3229·2021-11-23 09:51
閱讀 1039·2021-08-05 09:58
閱讀 668·2019-08-29 16:05
閱讀 979·2019-08-28 18:17
閱讀 3036·2019-08-26 14:06
閱讀 2726·2019-08-26 12:20
閱讀 2161·2019-08-26 12:18
閱讀 3069·2019-08-26 11:56