網(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è)樂平網(wǎng)站建設(shè)瑞昌網(wǎng)站建設(shè)共青城網(wǎng)站建設(shè)廬山網(wǎng)站建設(shè)貴溪網(wǎng)站建設(shè)南京網(wǎng)站建設(shè)沈陽網(wǎng)站建設(shè)石家莊網(wǎng)站建設(shè)哈爾濱網(wǎng)站建設(shè)杭州網(wǎng)站建設(shè)長沙網(wǎng)站建設(shè)濟南網(wǎng)站建設(shè)煙臺網(wǎng)站建設(shè)廣州網(wǎng)站建設(shè)武漢網(wǎng)站建設(shè)成都網(wǎng)站建設(shè)蘭州網(wǎng)站建設(shè)昆明網(wǎng)站建設(shè)臺北網(wǎng)站建設(shè)南寧網(wǎng)站建設(shè)銀川網(wǎng)站建設(shè)太原網(wǎng)站建設(shè)長春網(wǎng)站建設(shè)合肥網(wǎng)站建設(shè)鄭州網(wǎng)站建設(shè)西安網(wǎng)站建設(shè)西寧網(wǎng)站建設(shè)呼和浩特網(wǎng)站建設(shè)拉薩網(wǎng)站建設(shè)烏魯木齊網(wǎng)站建設(shè)貴陽網(wǎng)站建設(shè)深圳網(wǎng)站建設(shè)??诰W(wǎng)站建設(shè)南昌網(wǎng)站建設(shè)矩惠互動游戲微傳單企業(yè)郵箱小程序價格資訊中心
全國服務(wù)熱線:
0791-88196636

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

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

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

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

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

我們知道,在 php.ini 中,有一個參數(shù) max_execution_time 可以設(shè)置 PHP 腳本的**執(zhí)行時間,但是,在 php-cgi(php-fpm) 中,該參數(shù)不會起效。真正能夠控制 PHP 腳本**執(zhí)行時間的是 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>   

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

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

<?php   

$ctx = stream_context_create(array(   

   'http' => array(   

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

       )   

   )   

);   

file_get_contents("http://jiuyecheng.net/", 0, $ctx);   

?>   

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

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

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

找其中一個 CPU 100% 的 php-cgi 進程的 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() 導致的問題了。


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

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

網(wǎng)站建設(shè)行業(yè)方案
網(wǎng)站維護知識
網(wǎng)站制作常見問題
SEO網(wǎng)站優(yōu)化教程
踏上云端,轉(zhuǎn)型升級融入互聯(lián)網(wǎng)時代,現(xiàn)在就聯(lián)系我們吧!
——      我們時刻為你提供更多優(yōu)質(zhì)互聯(lián)網(wǎng)技術(shù)服務(wù)      ——
姓名:
*
聯(lián)系方式:
*
咨詢項目:
內(nèi)容:
*
在線留言
關(guān)于我們:南昌莫非文化傳媒有限公司(簡稱:莫非傳媒)專注于網(wǎng)站建設(shè),網(wǎng)站SEO優(yōu)化,小程序制作。提供全方位用戶體驗規(guī)劃,品牌形象設(shè)計服務(wù)。為每一位企業(yè)客戶的成長、騰飛助力!        網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、網(wǎng)站制作、網(wǎng)站開發(fā),就選網(wǎng)站建設(shè)公司-南昌莫非傳媒!
掃一掃微信便捷交流
|
|
|
|
|
|
|
|
|
|
|
|
|
地址:江西省南昌市西湖區(qū)洪城路6號國貿(mào)廣場A座巨豪峰
業(yè)務(wù)咨詢  :  
272482065
售后服務(wù) :
2401077293
服務(wù)熱線:
0791-88196636
______________________________________________________________________________________________________________________________________________________________________________________________________