全國服務熱線:
0791-88196636

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

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

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

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

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

我們知道,在 php.ini 中,有一個參數(shù) max_execution_time 可以設置 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 已經無法再處理新的 PHP 請求了,Nginx 將給用戶返回“502 Bad Gateway”。修改該參數(shù),設置一個 PHP 腳本**執(zhí)行時間是必要的,但是,治標不治本。例如改成 30s,如果發(fā)生 file_get_contents() 獲取網(wǎng)頁內容較慢的情況,這就意味著 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 //設置一個超時時間,單位為秒   

       )   

   )   

);   

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è)新聞
關于南昌莫非網(wǎng)絡科技公司2022年元旦放假安排通知.元旦:1月1日(星期六)至1月3號(星期一)放假,共計三天(無調休),1月4日(星期二)上班。
關于南昌莫非網(wǎng)絡科技公司2021年國慶節(jié)放假安排通知。根據(jù)《國務院辦公廳關于2021年部分節(jié)假日安排的通知》(國辦發(fā)明電〔2020〕27號),結合我單位工作實際情況,現(xiàn)就2021年國慶放假的有關事項安排如下。
南昌莫非網(wǎng)絡科技公司2021年中秋節(jié)放假通知.一、假期從:2021年09月19日到2021年09月21日結束,假期共3天(9月18日正常上班,9月26日正常休息)。二、如有緊急情況,請各位同仁及時配合相關部門主管人員把事情處理妥善。做好防火、防盜工作并督促各部門關好辦公區(qū)域的門、窗等。
根據(jù)《國務院辦公廳關于2021年部分節(jié)假日安排的通知》(國辦發(fā)明電〔2020〕27號),結合我單位工作實際情況,現(xiàn)就2021年端午節(jié)放假的有關事項安排如下:一、放假時間:2021年6月12日(星期六)至2021年6月14日(星期一),共放假3天。
南昌莫非網(wǎng)絡科技公司2021年五一勞動節(jié)放假通知.現(xiàn)就2021年五一勞動節(jié)放假的有關事項安排如下:一、放假時間,2021年5月1日(星期六)至2020年5月5日(星期三),共放假5天。4月25日(星期日)上班,5月6日(星期四)正常上班。
南昌莫非網(wǎng)絡科技公司2021年清明節(jié)放假通知.2021年4月3日(星期六)-2021年4月5日(星期一)放假,共3天。4月6日(星期二)正常上班。放假期間,各項業(yè)務照常運行,售后問題您可以直接相關負責人提交服務單,技術人員將在12小時之內處理。
關于南昌莫非網(wǎng)絡科技公司2021年春節(jié)放假安排通知.一、春節(jié)放假時間:2021年2月5日(農歷臘月二十四)至2021年2月18日(農歷正月初七)放假,共13天,2月19日(星期五)開始上班,2月21日星期日(農歷正月初十)恢復正常上班。由于疫情,假期時間可能會有所變化,具體以通知為準。
關于南昌莫非網(wǎng)絡科技公司2021年01月01日元旦放假通知。一、放假時間:2021年1月1日(星期五)至2021年1月3日(星期日)放假,共3天;2021年1月4日(星期一)正常上班。公司放假期間如有相關業(yè)務及服務事宜敬請撥打我司24小時服務熱線:0791-8819-6636或咨詢客服QQ:2401077293,可隨時與我司進行聯(lián)系。
南昌莫非網(wǎng)絡科技公司2020年中秋節(jié)+國慶節(jié)放假通知。根據(jù)《國務院辦公廳關于2020年部分節(jié)假日安排的通知》,為了讓大家度過一個充實、平安的假期,現(xiàn)把2020年中秋國慶放假時間及溫馨提示通知如下!
南昌莫非網(wǎng)絡科技公司2020年五一放假通知.在過去的歲月里,南昌莫非網(wǎng)絡科技公司與新老客戶一直保持著愉快的合作,這離不開大家的鼎立支持和幫助。在未來的日子里還需要更多朋友們的支持與幫助,希望你們能始終如一的支持南昌莫非網(wǎng)絡科技,并提出您寶貴的意見及建議。
南昌莫非網(wǎng)絡科技公司2020年春節(jié)寒假放假安排通知。南昌莫非網(wǎng)絡科技公司提前祝全國合作伙伴新春快樂、闔家幸福!預祝全體員工春節(jié)快樂!
南昌莫非網(wǎng)絡科技公司2020年元旦節(jié)放假安排通知.元旦將至,南昌莫非網(wǎng)絡科技公司預祝全體員工元旦快樂!現(xiàn)將2020年元旦節(jié)放假安排通告如下:一、放假時間:2020年1月1日,共1天。
網(wǎng)站建設行業(yè)方案
網(wǎng)站維護知識
網(wǎng)站制作常見問題
SEO網(wǎng)站優(yōu)化教程
踏上云端,轉型升級融入互聯(lián)網(wǎng)時代,現(xiàn)在就聯(lián)系我們吧!
——      我們時刻為你提供更多優(yōu)質互聯(lián)網(wǎng)技術服務      ——
姓名:
*
聯(lián)系方式:
*
咨詢項目:
內容:
*
在線留言
關于我們:南昌莫非文化傳媒有限公司(簡稱:莫非傳媒)專注于網(wǎng)站建設,網(wǎng)站SEO優(yōu)化,小程序制作。提供全方位用戶體驗規(guī)劃,品牌形象設計服務。為每一位企業(yè)客戶的成長、騰飛助力!        網(wǎng)站建設、網(wǎng)站設計、網(wǎng)站制作、網(wǎng)站開發(fā),就選網(wǎng)站建設公司-南昌莫非傳媒!
掃一掃微信便捷交流
|
|
|
|
|
|
|
|
|
|
|
|
|
地址:江西省南昌市西湖區(qū)洪城路6號國貿廣場A座巨豪峰
業(yè)務咨詢  :  
272482065
售后服務 :
2401077293
服務熱線:
0791-88196636
______________________________________________________________________________________________________________________________________________________________________________________________________
草草夜色精品国产噜噜竹菊| 日韩成人免费性生活视频| 清纯少妇被捅到高潮免费观看| 在线观看国产成人av天堂野外| 国产欧美日产中文一区| 青青操视频在线观看国产| 国产成人午夜福利片片| 国产精品亚洲精品亚洲| 亚洲最新的黄色录像在线| 国产精品丝袜一二三区| 欧美精品一区二区三区白虎| 九九热最新视频免费观看| 久久天堂夜夜一本婷婷| 玩弄人妻少妇一区二区桃花| 亚洲国产综合久久天堂| 欧美熟妇一区二区在线| 男女激情视频在线免费观看| 婷婷色网视频在线播放| 国产精品香蕉免费手机视频| 国产精品香蕉一级免费| 亚洲人妻av中文字幕| 内用黄老外示儒术出处| 欧美日韩黑人免费观看| 国产一区二区三中文字幕| 91精品视频免费播放| 日本理论片午夜在线观看| 亚洲av秘片一区二区三区| 日本深夜福利在线播放| 五月激情婷婷丁香六月网| 欧美不卡高清一区二区三区| 又大又紧又硬又湿又爽又猛| 亚洲国产成人久久99精品| 国产传媒一区二区三区| 99久久精品国产麻豆| 肥白女人日韩中文视频| 日本精品理论在线观看| 欧美精品亚洲精品日韩精品| 亚洲国产欧美久久精品| 91久久精品国产成人| 国产免费一区二区不卡| av在线免费观看在线免费观看|