Linux神器strace使用方法及實踐

      網友投稿 1311 2022-05-29

      【場景】

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

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

      【說明】

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

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

      【參數解析】

      1. strace安裝方法:

      Linux神器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

      Linux

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:在matlab上使用libsvm工具箱使用錯誤及解決方法匯總
      下一篇:Mac 終端命令大全
      相關文章
      亚洲中文字幕久久无码| 久久精品亚洲AV久久久无码| 亚洲另类自拍丝袜第五页 | 亚洲国产精品无码AAA片| 亚洲人成色7777在线观看不卡| 蜜桃传媒一区二区亚洲AV | 国产精品亚洲专区在线观看| 亚洲宅男天堂a在线| 亚洲日本国产精华液| 亚洲国产情侣一区二区三区| 亚洲在成人网在线看| 亚洲国产高清在线精品一区| 亚洲国产亚洲综合在线尤物| 亚洲图片中文字幕| 亚洲国产视频久久| 亚洲乱人伦中文字幕无码| 亚洲成a人无码亚洲成av无码 | 亚洲熟妇无码AV不卡在线播放| 久久亚洲国产最新网站| 亚洲中文字幕无码中文| 亚洲成av人片在www鸭子| 毛片亚洲AV无码精品国产午夜| 337P日本欧洲亚洲大胆艺术图| 亚洲aⅴ天堂av天堂无码麻豆| 国产午夜亚洲精品不卡电影| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲日韩欧洲乱码AV夜夜摸| 亚洲色自偷自拍另类小说| 国产亚洲成av人片在线观看| 亚洲AV无码久久精品成人| 91天堂素人精品系列全集亚洲| 亚洲日韩中文字幕天堂不卡| 中文字幕乱码亚洲无线三区| 亚洲精品无码专区在线播放| 国产精品亚洲专区无码WEB| 亚洲福利精品电影在线观看| 不卡精品国产_亚洲人成在线| 久久国产亚洲精品麻豆| 亚洲综合男人的天堂色婷婷| 亚洲中文字幕一二三四区苍井空| 亚洲国产精品日韩av不卡在线|