標籤:壓力測試linux gdb strace
引言:
我們某些服務出現故障的時候,我們都是根據螢幕的輸出以及列印的日誌來尋找出出現了什麼樣的錯誤,但是有時候我們的很多守護進程啟動正常卻訪問不到,比如我們使用Nginx服務,登陸web的時候,卻遲遲不發生頁面跳轉或者訪問頁面遲遲沒反應,這個時候我們就需要對nginx這個服務做一次進程追蹤,我們使用strace/gdb這樣的命令對進程做一次追蹤,
strace:
1,strace命令說明
strace是能夠顯示使用者空間發出的任何系統調用,在命令的執行過程中,strace會記錄和解析命令進程的所有系統調用以及這個進程所收到的所有訊號值
2,strace的使用
1)strace後面直接跟我們的命令
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/89/D4/wKioL1gfGu7DeO94AADxcT19NUI485.png" title="捕獲.PNG" alt="wKioL1gfGu7DeO94AADxcT19NUI485.png" />
可以看到後面跟了許多系統調用的函數,我們根據這些可以清楚的知道,我們這個命令執行時發生了那些系統調用
2)使用-p選項,這個後面跟我們的pid號,可以查看當前進程處於什麼狀態
我們使用-p選項後面跟著nginx的進程號
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M00/89/D7/wKiom1gfHBbSZo31AABQRGCm1p0852.png" title="捕獲1.PNG" alt="wKiom1gfHBbSZo31AABQRGCm1p0852.png" />我們可以看到,當我們的nginx沒有訪問量的時候,進程處於epoll_wait狀態
當使用ab來對nginx做一次壓力測試的時候,就會發現nginx進程瘋狂的做系統調用
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/89/D7/wKiom1gfHvXAN77xAACk-XCHvM4688.png" title="捕獲3.PNG" alt="wKiom1gfHvXAN77xAACk-XCHvM4688.png" />
650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/89/D4/wKioL1gfHwWxopVnAAC-7mSxlpE205.png" title="捕獲2.PNG" alt="wKioL1gfHwWxopVnAAC-7mSxlpE205.png" />
訪問資料的時候,需要處理各種資料,進程會有大量的系統調用產生
3)使用-c選項,我們可以顯示進程使用系統調用的摘要資訊,及使用了多少次系統調用
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/89/D4/wKioL1gfIQeDZIYkAAB0DpUajvY785.png" title="無標題.png" alt="wKioL1gfIQeDZIYkAAB0DpUajvY785.png" />
我們可以看到使用的read,write,open這些系統調用,以及總共產生了多少次系統調用
4)使用-o選項,我們可以將分析結構儲存在某個檔案中,以供後續分析使用
5) 使用-t(秒)-tt(微秒)-ttt(微秒,時間為UNIX時間戳記,即從1970年1月1日起的時間)
650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/89/D7/wKiom1gfI5WQYlRaAABlcoovD3M658.png" style="float:none;" title="捕獲4.PNG" alt="wKiom1gfI5WQYlRaAABlcoovD3M658.png" />
650) this.width=650;" src="http://s4.51cto.com/wyfs02/M01/89/D7/wKiom1gfI8rRmSnqAABgybRB6Mg998.png" title="捕獲5.PNG" alt="wKiom1gfI8rRmSnqAABgybRB6Mg998.png" />
650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/89/D4/wKioL1gfI5aziDGQAABkL4rIVRM409.png" style="float:none;" title="捕獲6.PNG" alt="wKioL1gfI5aziDGQAABkL4rIVRM409.png" />
gdb:
<1>gdb命令說明
gdb是Linux下及UNIX下的程式調試工具,我們可以啟動程式,讓程式按照我們的需求來自由的運行
<2>gdb使用attach,後面跟著我們的pid資訊,查看我們的進程狀態 650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/89/D5/wKioL1gfL2LiX0aeAABLO5Haedw239.png" title="捕獲7.PNG" alt="wKioL1gfL2LiX0aeAABLO5Haedw239.png" /> 如果想知道程式現在運行到了哪裡,同樣可以使用“backtrace”命令。當然也可以使用“step”命令對程式進行單步調試。在完成調試之後,不要忘記用detach命令中斷連線,讓被調試的進程可以繼續正常運行。
gdb是個很複雜的工具,一般Linux下的C開發程式員會用到的比較多,這裡就不做深入探討了
本文出自 “berniem2m” 部落格,請務必保留此出處http://berniem2m.blog.51cto.com/9203249/1870125
Linux上進程追蹤與調試(strace和gdb)