網(wǎng)站案例網(wǎng)站套餐網(wǎng)站功能網(wǎng)站SEO優(yōu)化南昌網(wǎng)站建設(shè)九江網(wǎng)站建設(shè)萍鄉(xiāng)網(wǎng)站建設(shè)景德鎮(zhèn)網(wǎng)站建設(shè)新余網(wǎng)站建設(shè)鷹潭網(wǎng)站建設(shè)贛州網(wǎng)站建設(shè)吉安網(wǎng)站建設(shè)宜春網(wǎng)站建設(shè)撫州網(wǎng)站建設(shè)上饒網(wǎng)站建設(shè)樂(lè)平網(wǎng)站建設(shè)瑞昌網(wǎng)站建設(shè)共青城網(wǎng)站建設(shè)廬山網(wǎng)站建設(shè)貴溪網(wǎng)站建設(shè)南京網(wǎng)站建設(shè)沈陽(yáng)網(wǎng)站建設(shè)石家莊網(wǎng)站建設(shè)哈爾濱網(wǎng)站建設(shè)杭州網(wǎng)站建設(shè)長(zhǎng)沙網(wǎng)站建設(shè)濟(jì)南網(wǎng)站建設(shè)煙臺(tái)網(wǎng)站建設(shè)廣州網(wǎng)站建設(shè)武漢網(wǎng)站建設(shè)成都網(wǎng)站建設(shè)蘭州網(wǎng)站建設(shè)昆明網(wǎng)站建設(shè)臺(tái)北網(wǎng)站建設(shè)南寧網(wǎng)站建設(shè)銀川網(wǎng)站建設(shè)太原網(wǎng)站建設(shè)長(zhǎng)春網(wǎng)站建設(shè)合肥網(wǎng)站建設(shè)鄭州網(wǎng)站建設(shè)西安網(wǎng)站建設(shè)西寧網(wǎng)站建設(shè)呼和浩特網(wǎng)站建設(shè)拉薩網(wǎng)站建設(shè)烏魯木齊網(wǎng)站建設(shè)貴陽(yáng)網(wǎng)站建設(shè)深圳網(wǎng)站建設(shè)海口網(wǎng)站建設(shè)南昌網(wǎng)站建設(shè)矩惠互動(dòng)游戲微傳單企業(yè)郵箱小程序價(jià)格資訊中心
全國(guó)服務(wù)熱線:
0791-88196636

PHP-CGI 進(jìn)程CPU100%與file_get_contents函數(shù)的關(guān)系

 二維碼 16879
發(fā)表時(shí)間:2020-12-15 10:57作者:南昌莫非網(wǎng)絡(luò)科技公司來(lái)源:南昌莫非網(wǎng)絡(luò)科技公司網(wǎng)址:http://what-ismyip.com

PHP-CGI 進(jìn)程CPU100%與file_get_contents函數(shù)的關(guān)系。

有時(shí)候,運(yùn)行 Nginx、PHP-CGI(php-fpm) Web服務(wù)的 Linux 服務(wù)器,突然系統(tǒng)負(fù)載上升,使用 top 命令查看,很多 php-cgi 進(jìn)程 CPU 使用率接近100%。后來(lái),我通過(guò)跟蹤發(fā)現(xiàn),這類(lèi)情況的出現(xiàn),跟 PHP 的 file_get_contents() 函數(shù)有著密切的關(guān)系。(北京網(wǎng)站建設(shè))

大、中型網(wǎng)站中,基于 HTTP 協(xié)議的 API 接口調(diào)用,是家常便飯。PHP 程序員們喜歡使用簡(jiǎn)單便捷的 file_get_contents("http://what-ismyip.com/") 函數(shù),來(lái)獲取一個(gè) URL 的返回內(nèi)容,但是,如果 what-ismyip.com/ 這個(gè)網(wǎng)站響應(yīng)緩慢,file_get_contents() 就會(huì)一直卡在那兒,不會(huì)超時(shí)。

我們知道,在 php.ini 中,有一個(gè)參數(shù) max_execution_time 可以設(shè)置 PHP 腳本的**執(zhí)行時(shí)間,但是,在 php-cgi(php-fpm) 中,該參數(shù)不會(huì)起效。真正能夠控制 PHP 腳本**執(zhí)行時(shí)間的是 php-fpm.conf 配置文件中的以下參數(shù):

The timeout (in seconds) for serving a single request after which the worker process will be terminated   

Should be used when 'max_execution_time' ini option does not stop script execution for some reason   

'0s' means 'off'   

<value name="request_terminate_timeout">0s</value>   

默認(rèn)值為 0 秒,也就是說(shuō),PHP 腳本會(huì)一直執(zhí)行下去。這樣,當(dāng)所有的 php-cgi 進(jìn)程都卡在 file_get_contents() 函數(shù)時(shí),這臺(tái) Nginx+PHP 的 WebServer 已經(jīng)無(wú)法再處理新的 PHP 請(qǐng)求了,Nginx 將給用戶(hù)返回“502 Bad Gateway”。修改該參數(shù),設(shè)置一個(gè) PHP 腳本**執(zhí)行時(shí)間是必要的,但是,治標(biāo)不治本。例如改成 30s,如果發(fā)生 file_get_contents() 獲取網(wǎng)頁(yè)內(nèi)容較慢的情況,這就意味著 150 個(gè) php-cgi 進(jìn)程,每秒鐘只能處理 5 個(gè)請(qǐng)求,WebServer 同樣很難避免“502 Bad Gateway”。

要做到徹底解決,只能讓 PHP 程序員們改掉直接使用 file_get_contents("http://what-ismyip.com/") 的習(xí)慣,而是稍微修改一下,加個(gè)超時(shí)時(shí)間,用以下方式來(lái)實(shí)現(xiàn) HTTP GET 請(qǐng)求。要是覺(jué)得麻煩,可以自行將以下代碼封裝成一個(gè)函數(shù)。

<?php   

$ctx = stream_context_create(array(   

   'http' => array(   

       'timeout' => 1 //設(shè)置一個(gè)超時(shí)時(shí)間,單位為秒   

       )   

   )   

);   

file_get_contents("http://what-ismyip.com/", 0, $ctx);   

?>   

當(dāng)然,導(dǎo)致 php-cgi 進(jìn)程 CPU 100% 的原因不只有這一種,那么,怎么確定是 file_get_contents() 函數(shù)導(dǎo)致的呢?

首先,使用 top 命令查看 CPU 使用率較高的 php-cgi 進(jìn)程。

top - 10:34:18 up 724 days, 21:01,   3 users,   load average: 17.86, 11.16, 7.69

Tasks: 561 total,   15 running, 546 sleeping,   0 stopped,   0 zombie

Cpu(s):   5.9%us,   4.2%sy,   0.0%ni, 89.4%id,   0.2%wa,   0.0%hi,   0.2%si,   0.0%st

Mem:   8100996k total,   4320108k used,   3780888k free,   772572k buffers

Swap:   8193108k total,    50776k used,   8142332k free,   412088k cached

  PID USER      PR   NI   VIRT   RES   SHR S %CPU %MEM    TIME+   COMMAND                   

10747 www       18   0   360m   22m   12m R 100.6 0.3    0:02.60 php-cgi                                                           

10709 www       16   0   359m   28m   17m R 96.8   0.4    0:11.34 php-cgi                                                           

10745 www       18   0   360m   24m   14m R 94.8   0.3    0:39.51 php-cgi                                                           

10707 www       18   0   360m   25m   14m S 77.4   0.3    0:33.48 php-cgi                                                           

10782 www       20   0   360m   26m   15m R 75.5   0.3    0:10.93 php-cgi                                                           

10708 www       25   0   360m   22m   12m R 69.7   0.3    0:45.16 php-cgi                                                           

10683 www       25   0   362m   28m   15m R 54.2   0.4    0:32.65 php-cgi                                                           

10711 www       25   0   360m   25m   15m R 52.2   0.3    0:44.25 php-cgi                                                           

10688 www       25   0   359m   25m   15m R 38.7   0.3    0:10.44 php-cgi                                                           

10719 www       25   0   360m   26m   16m R   7.7   0.3    0:40.59 php-cgi

找其中一個(gè) CPU 100% 的 php-cgi 進(jìn)程的 PID,用以下命令跟蹤一下:

strace -p 10747

如果屏幕顯示:

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

select(7, [6], [6], [], {15, 0})        = 1 (out [6], left {15, 0})

poll([{fd=6, events=POLLIN}], 1, 0)     = 0 (Timeout)

那么,就可以確定是 file_get_contents() 導(dǎo)致的問(wèn)題了。


企業(yè)新聞
關(guān)于南昌莫非網(wǎng)絡(luò)科技公司2022年元旦放假安排通知.元旦:1月1日(星期六)至1月3號(hào)(星期一)放假,共計(jì)三天(無(wú)調(diào)休),1月4日(星期二)上班。
關(guān)于南昌莫非網(wǎng)絡(luò)科技公司2021年國(guó)慶節(jié)放假安排通知。根據(jù)《國(guó)務(wù)院辦公廳關(guān)于2021年部分節(jié)假日安排的通知》(國(guó)辦發(fā)明電〔2020〕27號(hào)),結(jié)合我單位工作實(shí)際情況,現(xiàn)就2021年國(guó)慶放假的有關(guān)事項(xiàng)安排如下。
南昌莫非網(wǎng)絡(luò)科技公司2021年中秋節(jié)放假通知.一、假期從:2021年09月19日到2021年09月21日結(jié)束,假期共3天(9月18日正常上班,9月26日正常休息)。二、如有緊急情況,請(qǐng)各位同仁及時(shí)配合相關(guān)部門(mén)主管人員把事情處理妥善。做好防火、防盜工作并督促各部門(mén)關(guān)好辦公區(qū)域的門(mén)、窗等。
根據(jù)《國(guó)務(wù)院辦公廳關(guān)于2021年部分節(jié)假日安排的通知》(國(guó)辦發(fā)明電〔2020〕27號(hào)),結(jié)合我單位工作實(shí)際情況,現(xiàn)就2021年端午節(jié)放假的有關(guān)事項(xiàng)安排如下:一、放假時(shí)間:2021年6月12日(星期六)至2021年6月14日(星期一),共放假3天。
南昌莫非網(wǎng)絡(luò)科技公司2021年五一勞動(dòng)節(jié)放假通知.現(xiàn)就2021年五一勞動(dòng)節(jié)放假的有關(guān)事項(xiàng)安排如下:一、放假時(shí)間,2021年5月1日(星期六)至2020年5月5日(星期三),共放假5天。4月25日(星期日)上班,5月6日(星期四)正常上班。
南昌莫非網(wǎng)絡(luò)科技公司2021年清明節(jié)放假通知.2021年4月3日(星期六)-2021年4月5日(星期一)放假,共3天。4月6日(星期二)正常上班。放假期間,各項(xiàng)業(yè)務(wù)照常運(yùn)行,售后問(wèn)題您可以直接相關(guān)負(fù)責(zé)人提交服務(wù)單,技術(shù)人員將在12小時(shí)之內(nèi)處理。
關(guān)于南昌莫非網(wǎng)絡(luò)科技公司2021年春節(jié)放假安排通知.一、春節(jié)放假時(shí)間:2021年2月5日(農(nóng)歷臘月二十四)至2021年2月18日(農(nóng)歷正月初七)放假,共13天,2月19日(星期五)開(kāi)始上班,2月21日星期日(農(nóng)歷正月初十)恢復(fù)正常上班。由于疫情,假期時(shí)間可能會(huì)有所變化,具體以通知為準(zhǔn)。
關(guān)于南昌莫非網(wǎng)絡(luò)科技公司2021年01月01日元旦放假通知。一、放假時(shí)間:2021年1月1日(星期五)至2021年1月3日(星期日)放假,共3天;2021年1月4日(星期一)正常上班。公司放假期間如有相關(guān)業(yè)務(wù)及服務(wù)事宜敬請(qǐng)撥打我司24小時(shí)服務(wù)熱線:0791-8819-6636或咨詢(xún)客服QQ:2401077293,可隨時(shí)與我司進(jìn)行聯(lián)系。
南昌莫非網(wǎng)絡(luò)科技公司2020年中秋節(jié)+國(guó)慶節(jié)放假通知。根據(jù)《國(guó)務(wù)院辦公廳關(guān)于2020年部分節(jié)假日安排的通知》,為了讓大家度過(guò)一個(gè)充實(shí)、平安的假期,現(xiàn)把2020年中秋國(guó)慶放假時(shí)間及溫馨提示通知如下!
南昌莫非網(wǎng)絡(luò)科技公司2020年五一放假通知.在過(guò)去的歲月里,南昌莫非網(wǎng)絡(luò)科技公司與新老客戶(hù)一直保持著愉快的合作,這離不開(kāi)大家的鼎立支持和幫助。在未來(lái)的日子里還需要更多朋友們的支持與幫助,希望你們能始終如一的支持南昌莫非網(wǎng)絡(luò)科技,并提出您寶貴的意見(jiàn)及建議。
南昌莫非網(wǎng)絡(luò)科技公司2020年春節(jié)寒假放假安排通知。南昌莫非網(wǎng)絡(luò)科技公司提前祝全國(guó)合作伙伴新春快樂(lè)、闔家幸福!預(yù)祝全體員工春節(jié)快樂(lè)!
南昌莫非網(wǎng)絡(luò)科技公司2020年元旦節(jié)放假安排通知.元旦將至,南昌莫非網(wǎng)絡(luò)科技公司預(yù)祝全體員工元旦快樂(lè)!現(xiàn)將2020年元旦節(jié)放假安排通告如下:一、放假時(shí)間:2020年1月1日,共1天。
地區(qū)做網(wǎng)站導(dǎo)航
南昌網(wǎng)站建設(shè)  九江網(wǎng)站建設(shè)  萍鄉(xiāng)網(wǎng)站建設(shè) 景德鎮(zhèn)網(wǎng)站建設(shè)  新余網(wǎng)站建設(shè)  鷹潭網(wǎng)站建設(shè) 贛州網(wǎng)站建設(shè)  吉安網(wǎng)站建設(shè)  宜春網(wǎng)站建設(shè)  撫州網(wǎng)站建設(shè)  上饒網(wǎng)站建設(shè)  樂(lè)平網(wǎng)站建設(shè) 瑞昌網(wǎng)站建設(shè)  共青城網(wǎng)站建設(shè)  廬山網(wǎng)站建設(shè)  貴溪網(wǎng)站建設(shè)  南京網(wǎng)站建設(shè)  沈陽(yáng)網(wǎng)站建設(shè)  石家莊網(wǎng)站建設(shè)  哈爾濱網(wǎng)站建設(shè)  杭州網(wǎng)站建設(shè)  長(zhǎng)沙網(wǎng)站建設(shè)  濟(jì)南網(wǎng)站建設(shè) 煙臺(tái)網(wǎng)站建設(shè)  廣州網(wǎng)站建設(shè)  武漢網(wǎng)站建設(shè)  成都網(wǎng)站建設(shè) 蘭州網(wǎng)站建設(shè)  昆明網(wǎng)站建設(shè)  臺(tái)北網(wǎng)站建設(shè) 南寧網(wǎng)站建設(shè)  銀川網(wǎng)站建設(shè)  太原網(wǎng)站建設(shè)  長(zhǎng)春網(wǎng)站建設(shè)  合肥網(wǎng)站建設(shè)  鄭州網(wǎng)站建設(shè)  西寧網(wǎng)站建設(shè) 西安網(wǎng)站建設(shè)  呼和浩特網(wǎng)站建設(shè)  拉薩網(wǎng)站建設(shè)  烏魯木齊網(wǎng)站建設(shè)  貴陽(yáng)網(wǎng)站建設(shè) 深圳網(wǎng)站建設(shè)  ??诰W(wǎng)站建設(shè)

南昌莫非網(wǎng)絡(luò)科技公司專(zhuān)汪做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站制作,網(wǎng)站開(kāi)發(fā),建網(wǎng)站,定制網(wǎng)站。十三年品牌值得信賴(lài)!

網(wǎng)站建設(shè)行業(yè)方案
網(wǎng)站維護(hù)知識(shí)
網(wǎng)站制作常見(jiàn)問(wèn)題
SEO網(wǎng)站優(yōu)化教程
踏上云端,轉(zhuǎn)型升級(jí)融入互聯(lián)網(wǎng)時(shí)代,現(xiàn)在就聯(lián)系我們吧!
——      我們時(shí)刻為你提供更多優(yōu)質(zhì)互聯(lián)網(wǎng)技術(shù)服務(wù)      ——
姓名:
*
聯(lián)系方式:
*
咨詢(xún)項(xiàng)目:
內(nèi)容:
*
在線留言
關(guān)于我們:南昌莫非文化傳媒有限公司(簡(jiǎn)稱(chēng):莫非傳媒)專(zhuān)注于網(wǎng)站建設(shè),網(wǎng)站SEO優(yōu)化,小程序制作。提供全方位用戶(hù)體驗(yàn)規(guī)劃,品牌形象設(shè)計(jì)服務(wù)。為每一位企業(yè)客戶(hù)的成長(zhǎng)、騰飛助力!        網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā),就選網(wǎng)站建設(shè)公司-南昌莫非傳媒!
掃一掃微信便捷交流
|
|
|
|
|
|
|
|
|
|
|
|
|
地址:江西省南昌市西湖區(qū)洪城路6號(hào)國(guó)貿(mào)廣場(chǎng)A座巨豪峰
業(yè)務(wù)咨詢(xún)  :  
272482065
售后服務(wù) :
2401077293
服務(wù)熱線:
0791-88196636
______________________________________________________________________________________________________________________________________________________________________________________________________
达尔| 周宁县| 天长市| 遵化市| 隆林| 永春县| 永平县| 龙南县| 汨罗市| 弥勒县| 古丈县| 高邮市| 同仁县| 祁门县| 色达县| 陇南市| 浏阳市| 安康市| 嘉鱼县| 民乐县| 丹江口市| 合作市| 尼勒克县| 竹北市| 伊宁县| 营山县| 巴东县| 金秀| 甘孜县| 新邵县| 旬邑县| 兴文县| 东乡| 全椒县| 威信县| 临江市| 铜鼓县| 锡林浩特市| 英山县| 长顺县| 永德县|