偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Linux服務(wù)器排障利器strace

系統(tǒng) Linux
strace是一個(gè)有用的小工具,它可以通過(guò)跟蹤系統(tǒng)調(diào)用來(lái)讓你知道一個(gè)程序在后臺(tái)所做的事情。Strace是一個(gè)基礎(chǔ)的調(diào)試工具,在大多數(shù)Linux系統(tǒng)上默認(rèn)已經(jīng)安裝;但是即便你不是在跟蹤一個(gè)問(wèn)題的時(shí)候它也是一個(gè)極好的軟件。它能告訴你很多關(guān)于一個(gè)Linux程序怎樣工作的信息。

strace是一個(gè)有用的小工具,它可以通過(guò)跟蹤系統(tǒng)調(diào)用來(lái)讓你知道一個(gè)程序在后臺(tái)所做的事情。Strace是一個(gè)基礎(chǔ)的調(diào)試工具,在大多數(shù)Linux系統(tǒng)上默認(rèn)已經(jīng)安裝;但是即便你不是在跟蹤一個(gè)問(wèn)題的時(shí)候它也是一個(gè)極好的軟件。它能告訴你很多關(guān)于一個(gè)Linux程序怎樣工作的信息。

一個(gè)系統(tǒng)調(diào)用就是一個(gè)從應(yīng)用程序到內(nèi)核的消息?,F(xiàn)代計(jì)算機(jī)系統(tǒng)中的用戶程序都是運(yùn)行在一個(gè)沙箱里面:它們不允許直接與計(jì)算機(jī)交互(因此你不能像以前那樣往寄存器里面塞一些數(shù)據(jù)來(lái)完成某些工作)。取而代之的是,每當(dāng)程序需要與系統(tǒng)交互的時(shí)候,他就發(fā)送一個(gè)請(qǐng)求(系統(tǒng)調(diào)用)到內(nèi)核。Strace就是用來(lái)跟蹤這些消息的。因此請(qǐng)記住,如果你有一會(huì)兒看不到任何strace的輸出,這也并不代表你的程序發(fā)生了阻塞。很有可能是程序在自己的沙箱里面做某些事情,而這些事情并不需要與系統(tǒng)的其它部分發(fā)生通信。

用法

Strace程序固然能做這些事情,但它總是直接將所有的東西輸出到標(biāo)準(zhǔn)錯(cuò)誤文件(也就是屏幕)。就像你將看到的那樣,它會(huì)產(chǎn)生大量的輸出;因此通常來(lái)說(shuō)你最好用-o選項(xiàng)來(lái)設(shè)置一個(gè)輸出文件:

strace -o outputfile.txt program

有一些編輯器(如vim)能夠?qū)trace的輸出進(jìn)行語(yǔ)法高亮顯示。這意味著文件的不同部分,以及每一行的不同部分都會(huì)用不同的顏色來(lái)顯示。這個(gè)功能相當(dāng)有用,我強(qiáng)烈建議你使用一個(gè)這樣的編輯器來(lái)查看strace的輸出。

命令輸出解釋

試一試strace -o strace.out ls –l,然后用你喜歡的編輯器打開(kāi)strace.out,并且啟用語(yǔ)法高亮。

在深入探索細(xì)節(jié)之前,先來(lái)看看每一行的基本結(jié)構(gòu)。Strace記錄了程序所發(fā)出的每一次系統(tǒng)調(diào)用,并且各自顯示在單獨(dú)的一行中。系統(tǒng)調(diào)用的名字出現(xiàn)在每一行的起始,參數(shù)出現(xiàn)在括號(hào)里面,返回值則在等號(hào)后面,是一行的終結(jié)。命令ls –l的頭幾行輸出基本上是如下這個(gè)樣子:

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({sys="Linux", node="juliet.example.com", ...})  = 0

第一行顯示的是一個(gè)execve的系統(tǒng)調(diào)用,其參數(shù)如下:

  1. 當(dāng)前可執(zhí)行程序的位置 (/bin/ls)
  2. 一個(gè)從命令行傳遞過(guò)來(lái)的參數(shù)數(shù)組 (ls與-l)
  3. 一個(gè)指向21個(gè)環(huán)境變量的指針,也是傳遞給該程序的。

返回值為0,表示執(zhí)行成功。這就是所有系統(tǒng)調(diào)用都相同的基本結(jié)構(gòu)。

所有在后臺(tái)的內(nèi)幕

接下來(lái)的幾行跟內(nèi)存管理有關(guān)。Brk改變數(shù)據(jù)段的大小,而mmap用來(lái)返回一個(gè)進(jìn)程可用的內(nèi)存位置。(如需要更多信息,請(qǐng)嘗試man 2 mmap。)

再下面一行是uname系統(tǒng)調(diào)用,用來(lái)顯示系統(tǒng)的詳細(xì)信息。Uname所返回的是一個(gè)指針,它指向存儲(chǔ)這些信息的一個(gè)數(shù)據(jù)結(jié)構(gòu)。系統(tǒng)調(diào)用經(jīng)常會(huì)返回指針:這是一個(gè)內(nèi)存引用,告訴你到哪里去尋找這些信息。如果你是一臺(tái)計(jì)算機(jī),這非常有用,但如果你是一個(gè)人就未必了;因此為了方便起見(jiàn),每當(dāng)__strace__看到一個(gè)指針的時(shí)候,它就自動(dòng)幫你進(jìn)行查找,然后返回(一部分)指針指向的內(nèi)容。這正是上面在uname系統(tǒng)調(diào)用那里所發(fā)生的事情。

如果你繼續(xù)查看strace的輸出,你就會(huì)看到很多access和open的調(diào)用。Access查找一個(gè)文件(如果沒(méi)找到就返回-1和一個(gè)錯(cuò)誤碼),然后檢查當(dāng)前程序是否有訪問(wèn)權(quán)限。Open試圖打開(kāi)一個(gè)文件,如果成功的話就會(huì)將其連接到一個(gè)文件句柄(從3開(kāi)始,因?yàn)?-2被用于STDIN、STDOUT和STDERR)并返回這個(gè)句柄。然后,fstat會(huì)獲取連接到該句柄的文件的有關(guān)信息,句柄通過(guò)第一個(gè)參數(shù)傳遞而來(lái),就像這樣(注意第二個(gè)參數(shù)是一個(gè)指針?。?/p>

fstat(3, {st_mode=S_IFREG|0644, st_size=53482, ...}) = 0

在另一個(gè)mmap調(diào)用以后,文件將會(huì)被關(guān)閉。在ls的輸出中,你會(huì)看到這個(gè)序列在庫(kù)文件上面重復(fù)許多遍。而在那以后,對(duì)于每一個(gè)列出的文件還有l(wèi)stat、lgetxattr和getxattr等調(diào)用。這都是對(duì)每個(gè)文件獲取信息用的。最后,每個(gè)文件都會(huì)按這種方式寫(xiě)到輸出文件:

stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3661, ...}) = 0
write(1, "-rw-------  1 juliet juliet 10"..., 72) = 72

編號(hào)為1和2的文件句柄 (STDOUT和STDERR)將會(huì)關(guān)閉,于是一切都完成了。

結(jié)論

這只是一個(gè)關(guān)于閱讀strace輸出的非常快速的介紹。要深入理解的話,最好的建議是去查看每個(gè)系統(tǒng)調(diào)用的手冊(cè)頁(yè)(man 2 <系統(tǒng)調(diào)用名>),并且嘗試著在各種程序中使用strace跟蹤輸出。在各種語(yǔ)言的‘Hello, World’程序上使用strace是一件非常有趣的事情。你還可以檢查某個(gè)已經(jīng)在運(yùn)行的程序,然后用strace的-p PID選項(xiàng)來(lái)實(shí)時(shí)連接到其中的某一個(gè)。祝你在使用strace深入解剖你的程序時(shí)其樂(lè)無(wú)窮!

【編輯推薦】

  1. 快速診斷Linux服務(wù)器故障的三大法寶
  2. 十大X86服務(wù)器常見(jiàn)故障——硬件篇
  3. 十大x86服務(wù)器常見(jiàn)故障——系統(tǒng)篇
責(zé)任編輯:yangsai 來(lái)源: 互聯(lián)網(wǎng)
相關(guān)推薦

2014-12-01 11:25:11

sysdigLinux

2010-08-27 10:18:24

DHCP服務(wù)

2010-08-05 14:29:54

NFS服務(wù)

2010-03-17 15:35:47

2009-07-27 10:03:02

分層模型網(wǎng)絡(luò)故障

2020-09-02 12:45:52

Linux排障運(yùn)維

2020-10-24 15:31:10

Linux服務(wù)器工具

2013-07-25 09:56:22

OSPF路由選擇路由故障OSPF

2011-03-10 10:31:55

Linux服務(wù)器管理軟SUSE Manage

2018-07-27 06:21:46

數(shù)據(jù)中心運(yùn)維管理網(wǎng)絡(luò)設(shè)備

2013-12-03 16:28:06

2010-07-15 11:16:04

負(fù)載均衡

2011-03-28 16:37:38

2010-09-08 14:56:06

nmon

2012-03-01 10:07:23

ARM服務(wù)器x86處理器服務(wù)器

2025-10-13 09:50:41

LinuxLinux排障生產(chǎn)故障

2025-09-30 07:12:08

Linux排障日記生產(chǎn)故障

2015-05-29 13:22:10

Linux掛載運(yùn)維

2010-08-20 09:45:40

IOS升級(jí)排障

2010-07-09 09:43:21

企業(yè)IT架構(gòu)服務(wù)器管理
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)