1. <wbr id="cnjas"><legend id="cnjas"></legend></wbr>

          Linux培訓
          達內IT學院

          400-111-8989

          如何診斷strace問題

          • 發布:佚名
          • 來源:網絡
          • 時間:2015-10-22 14:26

          本文通過一個簡單的案例,向你展示一下在用 strace 診斷問題時的一些套路。

          如下真實案例,如有雷同,實屬必然!讓我們看一臺高負載服務器的 top 結果:

          top 結果

          技巧:運行 top 時,按「1」打開 CPU 列表,按「shift+p」以 CPU 排序。

          在本例中大家很容易發現 CPU 主要是被若干個 PHP 進程占用了,同時 PHP 進程占用的比較多的內存,不過系統內存尚有結余,SWAP 也不嚴重,這并不是問題主因。

          不過在 CPU 列表中能看到 CPU 主要消耗在內核態「sy」,而不是用戶態「us」,和我們的經驗不符。Linux 操作系統有很多用來跟蹤程序行為的工具,內核態的函數調用跟蹤用「strace」,用戶態的函數調用跟蹤用「ltrace」,所以這里我們應該用「strace」:

              shell> strace -p <PID>

          不過如果直接用 strace 跟蹤某個進程的話,那么等待你的往往是滿屏翻滾的字符,想從這里看出問題的癥結并不是一件容易的事情,好在 strace 可以按操作匯總時間:

              shell> strace -cp <PID>

          通過「c」選項用來匯總各個操作的總耗時,運行后的結果大概如下圖所示:

          總耗時

          很明顯,我們能看到 CPU 主要被 clone 操作消耗了,還可以單獨跟蹤一下 clone:

              shell> strace -T -e clone -p <PID>

          通過「T」選項可以獲取操作實際消耗的時間,通過「e」選項可以跟蹤某個操作:

          消耗的時間

          很明顯,一個 clone 操作需要幾百毫秒,至于 clone 的含義,參考 man 文檔:

              clone() creates a new process, in a manner similar to fork(2). It is actually a library function layered on top of the underlying clone() system call, hereinafter referred to as sys_clone. A description of sys_clone is given towards the end of this page.
          
              Unlike fork(2), these calls allow the child process to share parts of its execution context with the calling process, such as the memory space, the table of file descriptors, and the table of signal handlers. (Note that on this manual page, “calling process” normally corresponds to “parent process”. But see the description of CLONE_PARENT below.)
          

          簡單來說,就是創建一個新進程。那么在 PHP 里什么時候會出現此類系統調用呢?查詢業務代碼看到了 exec 函數,通過如下命令驗證它確實會導致 clone 系統調用:

              shell> strace -eclone php -r 'exec("ls");'

          最后再考大家一個題:如果我們用 strace 跟蹤一個進程,輸出結果很少,是不是說明進程很空閑?其實試試 ltrace,可能會發現別有洞天。記住有內核態和用戶態之分。

          預約申請免費試聽課

          填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

          上一篇:史上最復雜的驗證郵件地址的正則表達式
          下一篇:當軟件 RAID 故障時如何恢復和重建數據
          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          黑龍江省

          吉林省

          河北省

          湖南省

          貴州省

          云南省

          廣西省

          海南省

          欧美做爰视频免费播放_做暖全过程免费的视频_性爱免费视频 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>