詳解進程棧分析的兩個命令:Pstack和Starce
概述
今天主要分享兩個命令,比較多用來分析進程具體調用,平時排查問題會用到比較多的。
pstack
pstack用來跟蹤進程棧,這個命令在排查進程問題時非常有用,比如我們發(fā)現(xiàn)一個服務一直處于work狀態(tài)(如假死狀態(tài),好似死循環(huán)),使用這個命令就能輕松定位問題所在;可以在一段時間內,多執(zhí)行幾次pstack,若發(fā)現(xiàn)代碼棧總是停在同一個位置,那個位置就需要重點關注,很可能就是出問題的地方;
1、安裝pstack
- yum install *pstack* -y

2、分析mysql進程
- ps -ef|grep mysql

3、將進程的棧跟蹤信息寫入文件pstack.log
- pstack 2313 >> pstack.log
- pstack 2313 >> pstack.log
- pstack 2313 >> pstack.log

4、如下所示,可以看到函數(shù)調用關系為:_start->__libc_start_main->connection_event_loop->listen_for_connection_event->poll.

strace
strace常用來跟蹤進程執(zhí)行時的系統(tǒng)調用和所接收的信號。 在Linux世界,進程不能直接訪問硬件設備,當進程需要訪問硬件設備(比如讀取磁盤文件,接收網(wǎng)絡數(shù)據(jù)等等)時,必須由用戶態(tài)模式切換至內核態(tài)模式,通過系統(tǒng)調用訪問硬件設備。strace可以跟蹤到一個進程產(chǎn)生的系統(tǒng)調用,包括參數(shù),返回值,執(zhí)行消耗的時間。
1、安裝strace
- yum install -y strace

2、strace分析
- strace cat /dev/null

這里每一行都是一條系統(tǒng)調用,等號左邊是系統(tǒng)調用的函數(shù)名及其參數(shù),右邊是該調用的返回值。 strace 顯示這些調用的參數(shù)并返回符號形式的值。
strace 從內核接收信息,而且不需要以任何特殊的方式來構建內核。
3、跟蹤可執(zhí)行程序
- strace -f -F -o ~/straceout.txt myserver
-f -F選項告訴strace同時跟蹤fork和vfork出來的進程,-o選項把所有strace輸出寫到~/straceout.txt里 面,myserver是要啟動和調試的程序。
4、跟蹤服務程序
- strace -o output.txt -T -tt -e trace=all -p 2313
跟蹤2313進程的所有系統(tǒng)調用(-e trace=all),并統(tǒng)計系統(tǒng)調用的花費時間,以及開始時間(并以可視化的時分秒格式顯示),最后將記錄結果存在output.txt文件里面。
