Linux神器strace的使用方法及實踐


在Linux系統中,strace命令是一個集診斷、調試、統計與一體的工具,可用來追蹤調試程序,能夠與其他命令搭配使用,接下來就Linux系統調用工具strace的使用方法和實踐給大家做個詳細介紹,一起來了解下strace的操作實例吧。

【場景】

1、在操作系統運維中會出現程序或系統命令運行失敗,通過報錯和日志無法定位問題根因。

2、如何在沒有內核或程序代碼的情況下查看系統調用的過程。

【說明】

1、strace是有用的診斷,說明和調試工具,Linux系統管理員可以在不需要源代碼的情況下即可跟蹤系統的調用。

2、strace顯示有關進程的系統調用的信息,這可以幫助確定一個程序使用的哪個函數,當然在系統出現問題時可以使用 strace定位系統調用過程中失敗的原因,這是定位系統問題的很好的方法。

【參數解析】

1. strace安裝方法:

CentOS/EulerOS系統

# yum install strace

Ubuntu系統:

# apt-get install strace –y

2.strace的常用參數及示例

-c

統計每一系統調用的所執行的時間,次數和出錯的次數等。

示例:打印執行uptime時系統系統調用的時間、次數、出錯次數和syscall

# strace -c uptime

-d

顯示有關標准錯誤的strace本身的一些調試輸出。

-f

跟蹤子進程,這些子進程是由於fork(2)系統調用而由當前跟蹤的進程創建的。

-i
在系統調用時打印指令指針。

-t

跟蹤的每一行都以時間為前綴。

-tt

如果給出兩次,則打印時間將包括微秒。

-ttt

如果給定三次,則打印時間將包括微秒,並且前導部分將打印為自該**以來的秒數。

-T

顯示花費在系統調用上的時間。這將記錄每個系統調用的開始和結束之間的時間差。

-v

打印環境,統計信息,termios等調用的未縮寫版本。這些結構在調用中非常常見,因此默認行為顯示了結構成員的合理子集。使用此選項可獲取所有詳細信息。

-V

打印strace的版本號。

-e expr

限定表達式,用於修改要跟蹤的事件或如何跟蹤它們:

-e trace=set

僅跟蹤指定的系統調用集。該-c選項用於確定哪些系統調用可能是跟蹤有用有用。例如,trace=open,close,read,write表示僅跟蹤這四個系統調用。

-e trace=file

跟蹤所有以文件名作為參數的系統調用。

示例:打印執行ls時跟文件有關的系統調用。

# strace -e trace=file ls

-e trace=process

跟蹤涉及過程管理的所有系統調用。這對於觀察進程的派生,等待和執行步驟很有用。

-e trace=network

跟蹤所有與網絡相關的系統調用。

-e trace=signal

跟蹤所有與信號相關的系統調用。

-e trace=ipc

跟蹤所有與IPC相關的系統調用。

-o 文件名

將跟蹤輸出寫入文件名而不是stderr。

-p pid

使用進程ID pid附加到該進程並開始跟蹤。跟蹤可以隨時通過鍵盤中斷信號(CTRL -C)終止。

-S

按指定條件對-c選項打印的直方圖輸出進行排序。

示例:打印執行uname系統調用中calls的次數排序

# strace -fc -S calls uname

注:其他參數可以查看man手冊

# man strace

【使用實踐】

以“定位一次系統無法解析域名故障”為例

【問題現象】:

無法訪問外網域名,提示Name or service not know。

且已檢查系統DNS配置文件/etc/resolv.conf正確,排除DNS解析失敗。

【問題分析】:

當前無法確定系統在執行 解析域名失敗的原因,這時候需要使用strace查看系統調用過程,域名解析通常跟系統讀取文件相關,因此我們只查看open file的過程。具體命令如下:

# strace -e strace=open ping www.baidu.com

如上圖所示在系統調用過程中出現/usr/lib64/libnss_dns.so.2文件缺失,則問題根因已確定為libnss_dns.so.2系統庫文件缺失。

【解決方法】:

libnss_dns.so.2文件由glibc-devel包產生,因此重新安裝該包即可,請執行

# yum reinstall glibc-devel

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM