欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識(shí)庫 > PHP實(shí)現(xiàn)通過strace定位故障原因的方法

PHP實(shí)現(xiàn)通過strace定位故障原因的方法

熱門標(biāo)簽:遼寧ai電銷機(jī)器人價(jià)格 上海做外呼線路的通信公司 寧波外呼營銷系統(tǒng) 地圖標(biāo)注專員怎么樣 電話機(jī)器人銷售主要負(fù)責(zé)什么 長沙做地圖標(biāo)注公司 福建銀行智能外呼系統(tǒng)價(jià)格 房產(chǎn)中介用的是什么外呼系統(tǒng) 四川保險(xiǎn)智能外呼系統(tǒng)供應(yīng)商

本文實(shí)例講述了PHP實(shí)現(xiàn)通過strace定位故障原因的方法。分享給大家供大家參考,具體如下:

俗話說:不怕賊偷,就怕賊惦記著。在面對(duì)故障的時(shí)候,我也有類似的感覺:不怕出故障,就怕你不知道故障的原因,故障卻隔三差五的找上門來。

十一長假還沒結(jié)束,服務(wù)器卻頻現(xiàn)高負(fù)載,Nginx出現(xiàn)錯(cuò)誤日志:

connect() failed (110: Connection timed out) while connecting to upstream
connect() failed (111: Connection refused) while connecting to upstream

看上去是Upstream出了問題,在本例中Upstream就是PHP(版本:5.2.5)。可惜監(jiān)控不完善,我搞不清楚到底是哪出了問題,無奈之下只好不斷重啟PHP來緩解故障。

如果每次都手動(dòng)重啟服務(wù)無疑是個(gè)苦差事,幸運(yùn)的是可以通過CRON設(shè)置每分鐘執(zhí)行:

#/bin/bash
LOAD=$(awk '{print $1}' /proc/loadavg)
if [ $(echo "$LOAD > 100" | bc) = 1 ]; then
  /etc/init.d/php-fpm restart
fi

可惜這只是一個(gè)權(quán)宜之計(jì),要想徹底解決就必須找出故障的真正原因是什么。

閑言碎語不要講,輪到Strace出場(chǎng)了,統(tǒng)計(jì)一下各個(gè)系統(tǒng)調(diào)用的耗時(shí)情況:

shell> strace -c -p $(pgrep -n php-cgi)
% time   seconds usecs/call   calls  errors syscall
------ ----------- ----------- --------- --------- ----------------
 30.53  0.023554     132    179      brk
 14.71  0.011350     140    81      mlock
 12.70  0.009798     15    658    16 recvfrom
 8.96  0.006910      7    927      read
 6.61  0.005097     43    119      accept
 5.57  0.004294      4    977      poll
 3.13  0.002415      7    359      write
 2.82  0.002177      7    311      sendto
 2.64  0.002033      2   1201     1 stat
 2.27  0.001750      1   2312      gettimeofday
 2.11  0.001626      1   1428      rt_sigaction
 1.55  0.001199      2    730      fstat
 1.29  0.000998     10    100    100 connect
 1.03  0.000792      4    178      shutdown
 1.00  0.000773      2    492      open
 0.93  0.000720      1    711      close
 0.49  0.000381      2    238      chdir
 0.35  0.000271      3    87      select
 0.29  0.000224      1    357      setitimer
 0.21  0.000159      2    81      munlock
 0.17  0.000133      2    88      getsockopt
 0.14  0.000110      1    149      lseek
 0.14  0.000106      1    121      mmap
 0.11  0.000086      1    121      munmap
 0.09  0.000072      0    238      rt_sigprocmask
 0.08  0.000063      4    17      lstat
 0.07  0.000054      0    313      uname
 0.00  0.000000      0    15     1 access
 0.00  0.000000      0    100      socket
 0.00  0.000000      0    101      setsockopt
 0.00  0.000000      0    277      fcntl
------ ----------- ----------- --------- --------- ----------------
100.00  0.077145         13066    118 total

看上去「brk」非常可疑,它竟然耗費(fèi)了三成的時(shí)間,保險(xiǎn)起見,單獨(dú)確認(rèn)一下:

shell> strace -T -e brk -p $(pgrep -n php-cgi)
brk(0x1f18000) = 0x1f18000 0.024025>
brk(0x1f58000) = 0x1f58000 0.015503>
brk(0x1f98000) = 0x1f98000 0.013037>
brk(0x1fd8000) = 0x1fd8000 0.000056>
brk(0x2018000) = 0x2018000 0.012635>

說明:在Strace中和操作花費(fèi)時(shí)間相關(guān)的選項(xiàng)有兩個(gè),分別是「-r」和「-T」,它們的差別是「-r」表示相對(duì)時(shí)間,而「-T」表示絕對(duì)時(shí)間。 簡單統(tǒng)計(jì)可以用「-r」,但是需要注意的是在多任務(wù)背景下,CPU隨時(shí)可能會(huì)被切換出去做別的事情,所以相對(duì)時(shí)間不一定準(zhǔn)確,此時(shí)最好使用「-T」,在行 尾可以看到操作時(shí)間,可以發(fā)現(xiàn)確實(shí)很慢。

在繼續(xù)定位故障原因前,我們先通過「man brk」來查詢一下它的含義:

brk() sets the end of the data segment to the value specified by end_data_segment, when that value is reasonable, the system does have enough memory and the process does not exceed its max data size (see setrlimit(2)).

簡單點(diǎn)說就是內(nèi)存不夠用時(shí)通過它來申請(qǐng)新內(nèi)存(data segment),可是為什么呢?

shell> strace -T -p $(pgrep -n php-cgi) 2>1 | grep -B 10 brk
stat("/path/to/script.php", {...}) = 0 0.000064>
brk(0x1d9a000) = 0x1d9a000 0.000067>
brk(0x1dda000) = 0x1dda000 0.001134>
brk(0x1e1a000) = 0x1e1a000 0.000065>
brk(0x1e5a000) = 0x1e5a000 0.012396>
brk(0x1e9a000) = 0x1e9a000 0.000092>

通過「grep」我們很方便就能獲取相關(guān)的上下文,反復(fù)運(yùn)行幾次,發(fā)現(xiàn)每當(dāng)請(qǐng)求某些PHP腳本時(shí),就會(huì)出現(xiàn)若干條耗時(shí)的「brk」,而且這些PHP 腳本有一個(gè)共同的特點(diǎn),就是非常大,甚至有幾百K,為何會(huì)出現(xiàn)這么大的PHP腳本?實(shí)際上是程序員為了避免數(shù)據(jù)庫操作,把非常龐大的數(shù)組變量通過「var_export」持久化到PHP文件中,然后在程序中通過「include」來獲取相應(yīng)的變量,因?yàn)樽兞刻螅訮HP不得不頻繁執(zhí)行「brk」,不幸的是在本例的環(huán)境中,此操作比較慢,從而導(dǎo)致處理請(qǐng)求的時(shí)間過長,加之PHP進(jìn)程數(shù)有限,于是乎在Nginx上造成請(qǐng)求擁堵,最終導(dǎo)致高負(fù)載故障。

下面需要驗(yàn)證一下推斷似乎否正確,首先查詢一下有哪些地方涉及問題腳本:

shell> find /path -name "*.php" | xargs grep "script.php"

直接把它們都禁用了,看看服務(wù)器是否能緩過來,或許大家覺得這太魯蒙了,但是特殊情況必須做出特殊的決定,不能像個(gè)娘們兒似的優(yōu)柔寡斷,沒過多久,服務(wù)器負(fù)載恢復(fù)正常,接著再統(tǒng)計(jì)一下系統(tǒng)調(diào)用的耗時(shí):

shell> strace -c -p $(pgrep -n php-cgi)
% time   seconds usecs/call   calls  errors syscall
------ ----------- ----------- --------- --------- ----------------
 24.50  0.001521     11    138     2 recvfrom
 16.11  0.001000     33    30      accept
 7.86  0.000488      8    59      sendto
 7.35  0.000456      1    360      rt_sigaction
 6.73  0.000418      2    198      poll
 5.72  0.000355      1    285      stat
 4.54  0.000282      0    573      gettimeofday
 4.41  0.000274      7    42      shutdown
 4.40  0.000273      2    137      open
 3.72  0.000231      1    197      fstat
 2.93  0.000182      1    187      close
 2.56  0.000159      2    90      setitimer
 2.13  0.000132      1    244      read
 1.71  0.000106      4    30      munmap
 1.16  0.000072      1    60      chdir
 1.13  0.000070      4    18      setsockopt
 1.05  0.000065      1    100      write
 1.05  0.000065      1    64      lseek
 0.95  0.000059      1    75      uname
 0.00  0.000000      0    30      mmap
 0.00  0.000000      0    60      rt_sigprocmask
 0.00  0.000000      0     3     2 access
 0.00  0.000000      0     9      select
 0.00  0.000000      0    20      socket
 0.00  0.000000      0    20    20 connect
 0.00  0.000000      0    18      getsockopt
 0.00  0.000000      0    54      fcntl
 0.00  0.000000      0     9      mlock
 0.00  0.000000      0     9      munlock
------ ----------- ----------- --------- --------- ----------------
100.00  0.006208         3119    24 total

顯而易見,「brk」已經(jīng)不見了,取而代之的是「recvfrom」和「accept」,不過這些操作本來就是很耗時(shí)的,所以可以定位「brk」就是故障的原因。

擁抱故障,每一次故障都是歷練。正所謂:天將降大任于斯人也,必先苦其心志,勞其筋骨,餓其體膚,空乏其身,行拂亂其所為,所以動(dòng)心忍性,增益其所不能。

更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《PHP錯(cuò)誤與異常處理方法總結(jié)》、《php字符串(string)用法總結(jié)》、《PHP數(shù)組(Array)操作技巧大全》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《PHP網(wǎng)絡(luò)編程技巧總結(jié)》、《PHP基本語法入門教程》及《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》

希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • php+redis在實(shí)際項(xiàng)目中HTTP 500: Internal Server Error故障排除
  • IIS下PHP運(yùn)行環(huán)境搭建與網(wǎng)頁服務(wù)器故障排查方法
  • IIS PHP環(huán)境Temp文件夾的權(quán)限問題引起的網(wǎng)站故障
  • 基于PHP7錯(cuò)誤處理與異常處理方法(詳解)
  • phpStudy配置多站點(diǎn)多域名方法及遇到的403錯(cuò)誤解決方法
  • PHP中常見的錯(cuò)誤與異常處理總結(jié)大全
  • php實(shí)現(xiàn)的錯(cuò)誤處理封裝類實(shí)例
  • 淺談PHP錯(cuò)誤類型及屏蔽方法
  • php中的異常和錯(cuò)誤淺析
  • PHP中Notice錯(cuò)誤常見解決方法

標(biāo)簽:澳門 常德 工商登記 佛山 宿遷 宜春 深圳 延安

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《PHP實(shí)現(xiàn)通過strace定位故障原因的方法》,本文關(guān)鍵詞  PHP,實(shí)現(xiàn),通過,strace,定位,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《PHP實(shí)現(xiàn)通過strace定位故障原因的方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于PHP實(shí)現(xiàn)通過strace定位故障原因的方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    久久蜜桃香蕉精品一区二区三区| 国产91丝袜在线播放0| 久久久久亚洲av成人网人人软件| 国产精品成人在线视频| 久久午夜羞羞影院免费观看| 久久精品久久久精品美女| 丝袜美腿中文字幕| 精品久久一区二区| 激情久久五月天| 先锋影音av在线| 国产欧美一区二区精品久导航 | 蜜乳av一区二区三区| 完美搭档在线观看| 日韩欧美中文一区二区| 日本不卡不码高清免费观看| 免费a级黄色片| 26uuuu精品一区二区| 国产在线精品一区在线观看麻豆| 国产午夜精品久久久久久久久| 久久精品免视看| 成人免费av在线| 欧洲一区在线观看| 一区二区三区国产精华| 中文字幕人妻一区二区三区| 日韩一区二区在线免费观看| 七七婷婷婷婷精品国产| 精品熟妇无码av免费久久| 国产精品少妇自拍| 99视频精品在线| 欧美日韩国产综合视频在线观看| 亚洲成人一二三| 亚洲最大成人网站| 国产精品丝袜黑色高跟| 成人三级做爰av| 日韩视频在线你懂得| 国产最新精品精品你懂的| 男人在线观看视频| 亚洲影视在线播放| 久久久久久久久久久国产精品| 久久九九久精品国产免费直播| 成人在线视频首页| 欧美日韩国产高清一区二区三区 | 国产福利在线观看视频| 久久色中文字幕| eeuss鲁一区二区三区| 欧美美女黄视频| 久久99国产精品久久99果冻传媒| 男女性高潮免费网站| 一二三区精品视频| av男人的天堂av| 亚洲少妇最新在线视频| 在线精品一区二区三区| 国产欧美日韩不卡| 岛国av免费观看| 国产亚洲自拍一区| 国产精品欧美性爱| 久久久精品2019中文字幕之3| 99综合电影在线视频| 日韩午夜小视频| 成人看片黄a免费看在线| 欧美日韩免费观看一区三区| 韩国欧美国产1区| 欧美日韩一区二区三区在线| 精品一区二区影视| 欧美丝袜丝交足nylons图片| 精品一区二区三区欧美| 欧美日韩在线免费视频| 国产伦理精品不卡| 7777精品伊人久久久大香线蕉最新版| 国产制服丝袜一区| 欧美群妇大交群中文字幕| 国产成人自拍高清视频在线免费播放| 欧美卡1卡2卡| 成人av电影在线观看| 精品美女被调教视频大全网站| 99精品在线免费| 国产午夜精品一区二区三区视频| 亚洲少妇中文字幕| 国产精品久久福利| 中文字幕在线看高清电影| 一区二区视频在线| 自拍偷拍第9页| 免费成人结看片| 欧美日韩的一区二区| 成人一区二区三区视频| 精品久久国产老人久久综合| 免费黄视频在线观看| 国产精品私人影院| www在线观看免费视频| 亚洲国产你懂的| 色婷婷国产精品综合在线观看| 黄色成人免费在线| 日韩一级免费一区| 69xxx免费视频| 国产精品第五页| 人人艹在线视频| 久久精品99国产精品| 91精品国产综合久久蜜臀| 97超碰欧美中文字幕| 亚洲国产岛国毛片在线| 欧美黄色一级生活片| 日本欧美一区二区三区乱码| 欧美制服丝袜第一页| 成人av资源在线| 国产农村妇女毛片精品久久麻豆| 白白色免费视频| 青青国产91久久久久久| 在线不卡欧美精品一区二区三区| 91麻豆成人久久精品二区三区| 国产精品免费观看视频| 亚洲欧美卡通动漫| 国产一区视频网站| 久久久亚洲午夜电影| 国产av自拍一区| 久久99精品国产麻豆婷婷| 日韩欧美一二三| 欧美黑人欧美精品刺激| 日日摸夜夜添夜夜添国产精品 | 欧洲精品视频在线观看| 成人av影院在线| 国产精品久久久久影视| 国产视频精品免费| 国产成人av电影免费在线观看| 国产视频一区二区在线| 国产一区二区三区四区在线| 激情综合色播五月| 久久精品视频一区| 男人天堂资源网| 国产成a人无v码亚洲福利| 中文字幕乱码亚洲精品一区| 999精品视频在线观看播放| 国产成人在线视频网站| 国产精品久久久久久久久快鸭| www.毛片com| 91色视频在线| 亚洲图片欧美色图| 欧美剧情片在线观看| 中文字幕在线永久| 七七婷婷婷婷精品国产| 精品国产乱码久久久久久图片| 美国美女黄色片| 国产精品 欧美精品| 国产精品动漫网站| 欧美性视频一区二区三区| 国产大尺度视频| 奇米精品一区二区三区在线观看| 久久午夜免费电影| 老湿机69福利| 曰本三级日本三级日本三级| 视频一区中文字幕国产| 精品国产伦一区二区三区观看体验| 国产99在线 | 亚洲| 成人性色生活片免费看爆迷你毛片| 亚洲视频1区2区| 91精品国产综合久久蜜臀| 国产jk精品白丝av在线观看 | 看片网站在线观看| 国产又粗又猛又爽又黄| 午夜精品aaa| 久久久美女毛片| 三级影片在线看| 色哟哟无码精品一区二区三区| 蜜桃视频一区二区三区| 国产欧美日韩激情| 欧美性淫爽ww久久久久无| 亚洲av片不卡无码久久| 国模大尺度一区二区三区| 亚洲视频一二区| 欧美一区二区视频网站| 国产馆在线观看| 精品国产午夜福利在线观看| 日本不卡一区二区三区 | 99久久人妻无码精品系列| 国产99久久久久久免费看农村| 亚洲综合精品自拍| 久久久综合九色合综国产精品| 91久久精品一区二区| 中文字幕国产专区| 99免费精品视频| 美女网站一区二区| 国产精品国产三级国产普通话99| 宅男噜噜噜66一区二区66| 黄色裸体一级片| 欧美一区二区免费在线观看| 国产福利一区在线| 天天综合色天天综合色h| 亚洲国产成人私人影院tom| 6080日韩午夜伦伦午夜伦| 糖心vlog免费在线观看| 一本加勒比波多野结衣| 成人高清免费观看| 免费观看在线综合| 亚洲黄色av一区| 国产三级精品视频| 91麻豆精品国产91久久久久久久久 | 7788色淫网站小说| 成人黄色av电影| 久久99最新地址| 亚洲v中文字幕| 中文字幕亚洲成人|