本篇文章給大家帶來了linux命令動態追蹤工具的相關知識,其中主要介紹工作中常用的動態追蹤工具strace、arthas、bpftrace等。希望對大家有幫助。
線程與內存剖析,只能觀測到進程的整體情況,有些時候我們需要觀測到某一方法級別,比如調用方法test()時,傳入的參數是什么,返回值是多少,花費了多少時間?這種情況下,我們就需要使用一些動態追蹤工具了,如strace、arthas、bpftrace、systemtap等。
strace與ltrace
strace是Linux中用來觀測系統調用的工具,學過操作系統原理都知道,操作系統向應用程序暴露了一批系統調用接口,應用程序只能通過這些系統調用接口來訪問操作系統,比如申請內存、文件或網絡io操作等。
用法如下:
# -T 打印系統調用花費的時間 # -tt 打印系統調用的時間點 # -s 輸出的最大長度,默認32,對于調用參數較長的場景,建議加大 # -f 是否追蹤fork出來子進程的系統調用,由于服務端服務普通使用線程池,建議加上 # -p 指定追蹤的進程pid # -o 指定追蹤日志輸出到哪個文件,不指定則直接輸出到終端 $ strace -T -tt -f -s 10000 -p 87 -o strace.log
實例:抓取實際發送的SQL
有些時候,我們會發現代碼中完全沒問題的SQL,卻查不到數據,這極有可能是由于項目中一些底層框架改寫了SQL,導致真實發送的SQL與代碼中的SQL不一樣。
遇到這種情況,先別急著扒底層框架代碼,那樣會比較花時間,畢竟程序員的時間很寶貴,不然要加