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
如上圖所示在系統呼叫過程中出現/usr/lib64/libnss_dns.so.2檔案缺失,則問題根因已確定為libnss_dns.so.2系統庫檔案缺失。
【 解決方法 】:
libnss_dns.so.2 檔案由glibc-devel包產生,因此重新安裝該包即可,請執行
# yum reinstall glibc-devel
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30239065/viewspace-2718124/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- linux常用指令含義及使用方法Linux
- 造輪子-strace(二)實現
- 在 Linux 上用 strace 來理解系統呼叫Linux
- Linux命令實踐Linux
- Linux命令strace跟蹤程式的系統呼叫-linux學習用什麼書Linux
- Linux 中 ranger 的使用方法LinuxRanger
- Linux實踐總結Linux
- redis實踐及思考Redis
- Dockerfile 實踐及梳理Docker
- Linux——指令使用方法!Linux
- linux awk使用方法Linux
- Kafka的原理介紹及實踐Kafka
- Java transient 的作用及使用方法Java
- Linux中單引號和雙引號的使用方法及注意事項!Linux
- Java泛型及實踐Java泛型
- Docker 實踐及命令梳理Docker
- [MySql]explain用法及實踐MySqlAI
- Docker Compose 實踐及梳理Docker
- SpringBoot Admin2.0 整合 Java 診斷神器 Arthas 實踐Spring BootJava
- Iceberg在袋鼠雲的探索及實踐
- linux dig 命令使用方法Linux
- linux tail命令的使用方法詳解LinuxAI
- Taro實踐 - 深度開發實踐體驗及總結
- Node 呼叫 dubbo 服務的探索及實踐
- Java RPC原理及Dubbo的實踐應用JavaRPC
- 使用strace來查詢php的坑PHP
- [20190314]使用strace注意的問題.txt
- Redis原理及實踐之GeoHashRedis
- Git的使用方法及金鑰問題Git
- 造輪子-strace(一)
- Lombok介紹及使用方法Lombok
- Linux終端記錄神器Linux
- linux下json解析神器----jqLinuxJSON
- 故障排查工具-strace,tcpdump的簡單使用TCP
- Linux程式後臺執行實踐Linux
- WebRTC 架構優化及實踐Web架構優化
- Spring Boot Admin簡介及實踐Spring Boot
- 深入解析Immutable及 React 中實踐React