用strace排除Linux伺服器故障

2021-09-01 01:35:54 字數 1887 閱讀 1078

[quote]用strace排除linux伺服器故障  linuxeden q q 群:165854196歡迎加入

strace是乙個有用的小工具 – 大多數linux系統預設已經安裝 – 可以通過跟蹤系統呼叫來讓你知道乙個程式在後台所做的事情。strace是乙個基礎的除錯工具;但是即便你不是在跟蹤乙個問題的時候它也是乙個極好的軟體。它能告訴你很多關於乙個linux程式怎樣工作的資訊。

用法strace程式固然能做這些事情,但它總是直接將所有的東西輸出到標準錯誤檔案(也就是螢幕)。就像你將看到的那樣,它會產生大量的輸出;因此通常來說你最好用-o選項來設定乙個輸出檔案:

strace -o outputfile.txt program

有一些編輯器(如vim)能夠對strace的輸出進行語法高亮顯示。這意味著檔案的不同部分,以及每一行的不同部分都會用不同的顏色來顯示。這個功能相當有用,我強烈建議你使用乙個這樣的編輯器來檢視strace的輸出。

命令輸出解釋

試一試strace -o strace.out ls –l,然後用你喜歡的編輯器開啟strace.out,並且啟用語法高亮。

在深入探索細節之前,先來看看每一行的基本結構。strace記錄了程式所發出的每一次系統呼叫,並且各自顯示在單獨的一行中。系統呼叫的名字出現在每一行的起始,引數出現在括號裡面,返回值則在等號後面,是一行的終結。命令ls –l的頭幾行輸出基本上是如下這個樣子:

execve("/bin/ls", ["ls", "-l"], [/* 21 vars */]) = 0

brk(0) = 0x619000

mmap(null, 4096, prot_read|prot_write, map_private|map_anonymous, -1, 0) = 0x2b412f2b9000

uname() = 0

第一行顯示的是乙個execve的系統呼叫,其引數如下:

當前可執行程式的位置 (/bin/ls)

乙個從命令列傳遞過來的引數陣列 (ls與-l)

乙個指向21個環境變數的指標,也是傳遞給該程式的。

返回值為0,表示執行成功。這就是所有系統呼叫都相同的基本結構。

所有在後台的內幕

接下來的幾行跟記憶體管理有關。brk改變資料段的大小,而mmap用來返回乙個程序可用的記憶體位置。(如需要更多資訊,請嘗試man 2 mmap。)

再下面一行是uname系統呼叫,用來顯示系統的詳細資訊。uname所返回的是乙個指標,它指向儲存這些資訊的乙個資料結構。系統呼叫經常會返回指標:這是乙個記憶體引用,告訴你到**去尋找這些資訊。如果你是一台計算機,這非常有用,但如果你是乙個人就未必了;因此為了方便起見,每當__strace__看到乙個指標的時候,它就自動幫你進行查詢,然後返回(一部分)指標指向的內容。這正是上面在uname系統呼叫那裡所發生的事情。

fstat(3, ) = 0

在另乙個mmap呼叫以後,檔案將會被關閉。在ls的輸出中,你會看到這個序列在庫檔案上面重複許多遍。而在那以後,對於每乙個列出的檔案還有lstat、lgetxattr和getxattr等呼叫。這都是對每個檔案獲取資訊用的。最後,每個檔案都會按這種方式寫到輸出檔案:

stat("/etc/localtime", ) = 0

write(1, "-rw------- 1 juliet juliet 10"..., 72) = 72

編號為1和2的檔案控制代碼 (stdout和stderr)將會關閉,於是一切都完成了。

結論這只是乙個關於閱讀strace輸出的非常快速的介紹。要深入理解的話,最好的建議是去檢視每個系統呼叫的手冊頁(man 2 《系統呼叫名》),並且嘗試著在各種程式中使用strace跟蹤輸出。在各種語言的『hello, world』程式上使用strace是一件非常有趣的事情。你還可以檢查某個已經在執行的程式,然後用strace的-p pid選項來實時連線到其中的某乙個。祝你在使用strace深入解剖你的程式時其樂無窮!

strace 除錯linux 程式

strace常用引數 c 統計每種系統呼叫執行的時間 呼叫次數 出錯次數,程式退出時給出報告 p pid 跟蹤指定的程序,可以使用多個 p同時跟蹤多個程序 o filename strace預設輸出到stdout,o可以將輸出寫入到指定的檔案 f 跟蹤由fork產生的子程序的系統呼叫 ff 常與 o...

用strace工具跟蹤系統呼叫

linux下可以用strace工具檢視應用程式的系統呼叫。strace h 檢視能呼叫的引數 1.strace o xwatv.log xwatv o xwatv.log 是指定將跟蹤資訊存放在xwatv.log中,xwatv是指要跟蹤的命令或應用程式 2.把生成的log檔案拷貝回windows下進...

Linux 用vsftpd工具搭建ftp伺服器

vsftpd是乙個開源免費的搭建ftp伺服器的工具 yum install vsftpd service vsftpd start service vsftpd status chkconfig vsftpd on 開機啟動,centos 6注意防火牆,防火牆配置參考其他博文 開啟vsftpd服務後...