上一篇: 如何建設(shè)一個(gè)網(wǎng)站:SystemTap是運(yùn)維調(diào)試?yán)鳌?/a>

怎樣自己建設(shè)網(wǎng)站:調(diào)試內(nèi)核態(tài)的信息,就需要在安裝SystemaTap包
但是如果需要調(diào)試內(nèi)核態(tài)的信息,就需要在安裝SystemaTap包的同時(shí)安裝和內(nèi)核相
匹配版本的-devel、-debuginfo以及-debuginfo-common。
注意,包的名稱必須完全匹配才行。比如服務(wù)器的內(nèi)核是kernel-2.6.32.279.22.l.r16.
x86_64.rpm,那么對(duì)應(yīng)安裝的debuginfo包就必須是kernel-debugin fo-2.6.3 2.279.22.l.r16.
x86_64.rpm。
通過(guò)uname.r命令可以查看當(dāng)前內(nèi)核的全名,如下。
debuginf的包,通常在http://debuginfo.centos.org/上可以下載。如果這里沒(méi)有,比如
你的kernel.rpm本來(lái)就是自己編譯出來(lái)的,那么就只能自己再對(duì)應(yīng)編譯kernel-debuginfo.
rpm了。
安裝完成之后可以測(cè)試內(nèi)核是否已經(jīng)成功支持SystemTap,如下。
一 一
, 如果該腳本能夠正常運(yùn)行,在終端上將看到各種調(diào)試輸出,以及最終結(jié)果“hello world”
字符串,整個(gè)輸出是類似下面這樣的。
Pass l: parsed user script and 72 library script (s) usinS 87132virt/21460res/
2600shr kb, in 180usr/10sys/189real ms.:l ;
Pass 2: analyzed script: 1 probe (s), 2 function (s), 0 embed(s) , 0 global (s)
●25●
網(wǎng)站運(yùn)維技術(shù)與實(shí)踐
using 87528virt/22152res/2816shr kb, in 10usr/Osys/6real ms.
Pass 3: using cached /root/.systemtap/cache/f5/stap_f59e55597ca61773644-
fc7321e27693f_790.c
Pass 4: using cached /root/.systemtap/cache/f5/stap_f59e55597ca61773644-
fc7321e27693f 790.ko
Pass 5: starting run,
. hello world : ; . : '
Pass 5: run completed in Ousr/10sys/283real mS-i .
從調(diào)試信息中,也可以確認(rèn)之前提到的
stap_f59e55597ca61773644fc7321e27693f_790.ko
一點(diǎn),即stap確實(shí)是編譯出來(lái)了一個(gè)
內(nèi)核模塊并加載的。
1.3.8.2基礎(chǔ)語(yǔ)法
首先介紹stap腳本的基礎(chǔ)語(yǔ)法,即常用函數(shù),控制結(jié)構(gòu)和運(yùn)行參數(shù)。
1.常用函數(shù)
stap腳本中每個(gè)完整的結(jié)構(gòu)都是由probe組成的,表明語(yǔ)句像探針一樣插入某個(gè)位置
等待觸發(fā)事件。事件分為同步事件和異步事件。
芎用的同步事件類型如表1.3所示。
表1-3 | |
事件類型 | 探針觸發(fā)時(shí)刻 |
kemel.function(" sys_sync").call | 調(diào)用sys_sync時(shí) |
kemel.function(" sys_syne ").retum | 返回sys_sync時(shí) |
syscall.read | 系統(tǒng)調(diào)用read()時(shí) |
kemel.function("*@kerne Vfork.c").return | 從fork.c中任一函數(shù)返回時(shí) |
kemel.statement("*@kernel/sched.c:29 1 7 ") | 運(yùn)行到文件kemel/sched.c第2917行 |
process("/lib/libs.so.6 ").function(" *malloc*') | 進(jìn)入名字包含“malloc”的glibe函數(shù) |
module(" ext3 ").function(" ext3~file_write") | 調(diào)用ext3模塊的write函數(shù)時(shí) |
異步事件則如表1-4所示。
表1-4 | |
事件類型 | 探針觸發(fā)時(shí)刻 a |
begin | stap腳本開(kāi)始運(yùn)行時(shí) 《 |
End
timer.jiffies(1000)
timer.ms(200).randomize(50)