成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【PHP問題定位】php-fpm的idle掉底分析

zhangfaliang / 1878人閱讀

摘要:周三晚加上了對阿波羅超時的監(jiān)控,周四觀察上線期間阿波羅超時指標(biāo)的變化,時間也吻合。月日下午又報(bào)了一次警與此同時的阿波羅超時監(jiān)控這里同時列出機(jī)器指標(biāo)的目的是為了說明,盡管沒有報(bào)警,但機(jī)器的指標(biāo)變化和是統(tǒng)一的。

順風(fēng)車運(yùn)營研發(fā)團(tuán)隊(duì) 熊浩含

問題現(xiàn)象

線上報(bào)警群里時而有php-fpm-idle的零星報(bào)警,持續(xù)時間很短(幾秒甚至一秒),見下圖

問題分析

發(fā)生故障時,我們可以通過觀察相關(guān)指標(biāo)在故障時間的前后異常變化,找出故障原因。常用的指標(biāo)如下:

cpu_idle

php-fpm-idle

io

nginx.status.flow

opcachereset

指標(biāo)截圖如下:

io.read

nginx.status

opcachereset

在故障發(fā)生時(php-fpm-idle掉底),除了nginx的499明顯增多,io增大外,其余性能指標(biāo)并無明顯變化。值得注意的是,故障時間與opcachereset時間高度重合,opcachereset是上線時的操作,會清除服務(wù)器上的phpopcache。故有兩種可能:

故障單純是清除opcache導(dǎo)致的,php需要重新解析php文件,耗時增加,php-fpm-idle下降;

上線時進(jìn)行的某些操作,影響了某些url請求的效率,導(dǎo)致超時(nginx出現(xiàn)大量499),也引起了php-fpm-idle下降;

nginx_499:部分請求長時間占用了php-fpm進(jìn)程(死循環(huán)或者超時),導(dǎo)致了新請求的排隊(duì),php-fpm-idle下降。

cpu-idle:cpu-idle和php-fpm-idle其實(shí)并沒有直接關(guān)系,但會相互影響。當(dāng)請求增多,php-fpm啟動了更多的進(jìn)程處理請求,自然也會增加cpu的消耗,cpu_idle降低;而當(dāng)cpu_idle降低時(cpu更忙),php處理請求比平時要花費(fèi)更多的時間,導(dǎo)致請求堆積,php-fpm-idle下降。

io:磁盤io會直接影響fpm進(jìn)程讀寫文件,io過高,導(dǎo)致讀寫文件慢;同時過高的io也會影響cpu-idle,進(jìn)而間接影響php-fpm。
日志采集系統(tǒng)對采集的性能指標(biāo)數(shù)據(jù)有聚合操作。例如指標(biāo)A10s采集一次,當(dāng)天可以按10s的粒度查看數(shù)據(jù)。但對于歷史數(shù)據(jù),例如7天前,數(shù)據(jù)粒度不再是10s,而變成了15分鐘,odin對數(shù)據(jù)做了聚合。這意味著一些”尖峰數(shù)據(jù)“隨著時間推移,其尖峰不再,曲線會變得平滑。
問題定位

查看報(bào)警機(jī)器的nginx的access.log

取前幾處請求的traceid,在業(yè)務(wù)日志中查看,發(fā)現(xiàn)大量的apollo(一個內(nèi)部服務(wù))請求超時,proc_time時間過長

在看nginx日志的時候發(fā)現(xiàn),499的log中,request_time是以客戶端斷開連接的時間計(jì)算的。例如api的請求超時時間是0.08s,超時后請求方主動斷開,此時nginx即打印了499的log(比0.08s稍長)。但實(shí)際上php-fpm的處理仍在繼續(xù),過了更長的時間后,在trace日志中打印了真正的執(zhí)行時間(proc_time)。

查到這里,我的猜想是:因?yàn)樯暇€操作觸發(fā)了阿波羅(一個內(nèi)部服務(wù))的某種異常,導(dǎo)致阿波羅鏈接在這一瞬間全部超時,引起nginx的大量499,也引起了php-fpm-idle的掉底。

驗(yàn)證這個猜想需要解決以下兩個問題:

(一) 上線和阿波羅超時是否有必然的聯(lián)系?需要多找?guī)讉€例子驗(yàn)證

(二)既然只要上線就會觸發(fā)這個問題,為啥不是每臺機(jī)器都報(bào)警,而只有零星的報(bào)警?

先看問題(一),結(jié)果是振奮人心的,找了幾臺機(jī)器驗(yàn)證,上線時間和業(yè)務(wù)日志中大量出現(xiàn)”call apollo too long“的時間重合。周三晚加上了對阿波羅超時的監(jiān)控,周四觀察上線期間阿波羅超時指標(biāo)的變化,時間也吻合。

8月9日下午15:22又報(bào)了一次警

與此同時的阿波羅超時監(jiān)控:

*.16.gz01

.17.gz01

.17.gz01

這里同時列出17.gz01機(jī)器指標(biāo)的目的是為了說明,盡管17.gz01沒有報(bào)警,但17機(jī)器的指標(biāo)變化和16是統(tǒng)一的。

再看問題(二):我的猜想是,由于故障時間很短(看機(jī)器日志只有100ms左右),而odin最短10s采集一次指標(biāo),大部分機(jī)器php-fpm-idle掉底的數(shù)據(jù)并沒有被采集到。

結(jié)論

上線過程中清除了php的opcache,導(dǎo)致下一時刻的請求到來時,代碼中的阿波羅會讀取本地配置文件,io增加,而php需要重新解析文件,io進(jìn)一步增大,耗時增加,導(dǎo)致php-fpm-idle有一瞬間的掉底。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29252.html

相關(guān)文章

  • PHP問題定位】2018-07-02 fpm掉底分析

    摘要:順風(fēng)車運(yùn)營研發(fā)團(tuán)隊(duì)黃桃問題現(xiàn)象某機(jī)器這段時間出現(xiàn)掉地的報(bào)警如圖原因分析查看當(dāng)時的監(jiān)控,等今天出現(xiàn)兩次突降,一次是點(diǎn)左右,一次是左右,查看整周也經(jīng)常出現(xiàn)突降,如圖在分時突然升高也在時出現(xiàn)大量寫當(dāng)時短暫出現(xiàn)降低,之后出現(xiàn)徒 順風(fēng)車運(yùn)營研發(fā)團(tuán)隊(duì) 黃桃 問題現(xiàn)象某機(jī)器這段時間出現(xiàn)cpu-idle掉地的報(bào)警 如圖: showImg(https://segmentfault.com/img/bVb...

    Code4App 評論0 收藏0
  • php-fpm進(jìn)程數(shù)管理

    摘要:是實(shí)現(xiàn)的進(jìn)程管理器用于替換的大部分附加功能,適用于高負(fù)載網(wǎng)站。能夠創(chuàng)建的最大子進(jìn)程數(shù)量,它在使用多個配置的進(jìn)程池的時候,控制全局的子進(jìn)程數(shù)量。同時根據(jù)進(jìn)程池的數(shù)量來看一個進(jìn)程管理器的子進(jìn)程數(shù)量限制。 PHP-FPM 先來了解一些名詞概念: CGI是Common Gateway Interface(通用網(wǎng)管協(xié)議),用于讓交互程序和Web服務(wù)器通信的協(xié)議。它負(fù)責(zé)處理URL的請求,啟動一個進(jìn)...

    hlcfan 評論0 收藏0
  • PHP-FPM 調(diào)優(yōu):使用 ‘pm static’ 來最大化你服務(wù)器負(fù)載能力

    摘要:進(jìn)程管理器和的相似之處現(xiàn)在,我們要說些偏離主題,但我覺得和調(diào)優(yōu)有關(guān)的事情。但是,一旦你有可用的閑置內(nèi)存,那么把設(shè)置成的最大值將減少許多進(jìn)程管理器所帶來的開銷。 showImg(https://segmentfault.com/img/remote/1460000016435381);讓我們來迅速了解一下怎樣設(shè)置 PHP-FPM,以便達(dá)到高吞吐,低延遲以及穩(wěn)定的使用 CPU 和內(nèi)存的完美...

    CNZPH 評論0 收藏0
  • PHP超時處理全面總結(jié)

    摘要:的毫秒級超時也有問題。。中超時實(shí)現(xiàn)一初級最簡單的超時實(shí)現(xiàn)秒級超時思路很簡單鏈接一個后端,然后設(shè)置為非阻塞模式,如果沒有連接上就一直循環(huán),判斷當(dāng)前時間和超時時間之間的差異。實(shí)際處理這個調(diào)用的部件在完成后,通過狀態(tài)通知和回調(diào)來通知調(diào)用者。 概述 在PHP開發(fā)中工作里非常多使用到超時處理到超時的場合,我說幾個場景: 異步獲取數(shù)據(jù)如果某個后端數(shù)據(jù)源獲取不成功則跳過,不影響整個頁面展現(xiàn) 為了保...

    I_Am 評論0 收藏0
  • PHP-FPM設(shè)置max_chindren、max_requests

    摘要:首先,我們關(guān)注下的運(yùn)行方式模式始終保持一個固定數(shù)量的子進(jìn)程,這個數(shù)由定義,這種方式很不靈活,也通常不是默認(rèn)的。指的是每個子進(jìn)程在處理了多少個請求數(shù)量之后就重啟。 首先,我們關(guān)注下 PHP-FPM 的運(yùn)行方式:pm = static模式: 始終保持一個固定數(shù)量的子進(jìn)程,這個數(shù)由pm.max_children定義,這種方式很不靈活,也通常不是默認(rèn)的。優(yōu)點(diǎn)是不用動態(tài)的判斷負(fù)載情況,提升性能;...

    hedge_hog 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<