
怎樣建設(shè)企業(yè)網(wǎng)站:命令參數(shù)
命令參數(shù)
寫好的stap語句在具體執(zhí)行時(shí),通常會(huì)需要配合一些stap的命令參數(shù),如表1-7所示。
一般來說,最常用的是.L和一g。
1.3.8.3運(yùn)用示例
stap功能非常強(qiáng)大,完全可以單獨(dú)寫成紅寶書一樣的巨著。這里只通過幾個(gè)與日常運(yùn)
維相關(guān)的運(yùn)用來做簡單的演示。更詳細(xì)的用例,讀者可以閱讀systemtap自帶的examples
或者章亦春的nginx-systemtap工具箱,地址:http s://github.c om/agentzh/n ginx - sy stemtap -
toolkit。
1.3.8.3.1 設(shè)置tcp_init_cwnd
Linux關(guān)于TCP擁塞窗口,是根據(jù)網(wǎng)絡(luò)狀況動(dòng)態(tài)控制的。從初始值開始,逐步增大。
隨著互聯(lián)網(wǎng)的發(fā)展,終端用戶上網(wǎng)速度已經(jīng)大大提高,所以對(duì)TCP的擁塞窗口的初始值
進(jìn)行增大可以顯著提高HTTP的性能。這個(gè)觀點(diǎn)最先由Google工程師提出并給出了對(duì)比
效果。隨后,Linux內(nèi)核對(duì)此也做出了相應(yīng)改變,3.0版本之后,tcp_init_cwnd在MSS為
1460時(shí)的默認(rèn)值從3提高到了10。只需要通過ip route命令即可設(shè)置,非常方便。
藕:蘩,".ipi"瀵蠢舔蠢蘸薯changelkls;fzrail彗j+;籬攀薰萋蘩麓i:黼}蘩瀚囊鬻鬻簍豢i耩藜囊囊jjjjitcwruj::20曩囊,ij薹i曩一曩_≯l 5
但是RHEL目前最新版本的Linux內(nèi)核也才2.6.32,沒有實(shí)現(xiàn)這點(diǎn)。如果要通過打patch
然后重編譯內(nèi)核的方式,對(duì)生產(chǎn)線上的服務(wù)器來說,動(dòng)作實(shí)在太大了。這時(shí)候可以通過
systemtap來實(shí)現(xiàn)。方法特別簡單,stap內(nèi)容只有三行。
然后運(yùn)行設(shè)定“tcp_init_cwnd”為10,并生成內(nèi)核模塊。
# stap -p4 -g -m initcwnd tcp init cwnd.stp 10
initcwnd. ko . ' .
然后可以讓stap加載運(yùn)行。
# staprun -o .:initcwnid out -D initcwn<i.ko
19122 ' ' '
19122是initcwnd模塊加載器在后臺(tái)運(yùn)行的進(jìn)程號(hào),需要的時(shí)候可以把模塊停掉。這
個(gè)進(jìn)程號(hào)也可以通過“lsmod”直接查看。
當(dāng)然如果你的模塊沒有輸出的話,也可以直接通過標(biāo)準(zhǔn)的內(nèi)核模塊加載方式運(yùn)行,這
樣更簡單通用。對(duì)于這種需要長期運(yùn)行的stap,也建議做成無輸出的格式。
# insmod initcwncii ko
1.3.8.3.2監(jiān)控統(tǒng)計(jì)系統(tǒng)調(diào)用
前文中介紹過用strace統(tǒng)計(jì)單一進(jìn)程的系統(tǒng)調(diào)用次數(shù),現(xiàn)在我們反過來,統(tǒng)計(jì)整個(gè)系
統(tǒng)中,各進(jìn)程的系統(tǒng)調(diào)用次數(shù)。stap腳本如下。
global syscalllist
probe begin { .
printf{"System Call Monitoring Started (10 seconds) .:.\n")
} :: .
probe syscall.* { :: :
syscalllist [pid () , execname () ] ++
probe timer.ms (10000) { : '
foreach ( [pid, procname] in syscalllist ) {
printf("oosf%d~ - %d\n", procname, pid, syscalllist[pid, procname]
exit () I i .
可以看到運(yùn)行在用戶空間中的每個(gè)進(jìn)程,以及在10秒鐘內(nèi)發(fā)出的系統(tǒng)調(diào)用的數(shù)量。
# stap profile.stp
System Call Monitoring Started {10 seconds) ...
stapio [403301~ = 265
kthread[183] = 9 , :
kstopmachine [407289] - 12 .
1.3.8.3.3 查看UNIX套接字狀態(tài)
SystemTap發(fā)行版本提供了一個(gè)命令行工具socktop,位于/usr/share/doc/systemtap-1.3/
examples/network/socktop,這是個(gè)非常方便的工具,用來統(tǒng)計(jì)UNIX域套接字的發(fā)送和接
收狀態(tài),可以分別針對(duì)進(jìn)程名和網(wǎng)卡接口做統(tǒng)計(jì)。相信很多讀者對(duì)統(tǒng)計(jì)進(jìn)程流量的方法是
渴望已久的。
腳本直接運(yùn)行效果如下。
一一一一一一一一一一一一一一一一一N-N PROCESSES一一一一一一一一__一一一一一卻一一一一一一一一一一
PID UID #SEND #RECV SEND KB RECV_KB PROT FAMILY COMMAND
411981 0 3239 38 94278 3 IPLOCAL sshd
411983 0 4 23 610 0 94277:; IP LOCAL scp
411982 74 25 20 2 0 IPLOCAL sshd
3398 0 2 0 0 0 IPLOCAL sshcl
3337 0 0 4 0 0 IP LOCAL syslogd
16596 28 4 8 . 0 IP LOCAL nscd
一一一一一一一一一——一DEVICES一一一一一一一一一一-一一一__-一一一一一 -
DEV
eth0
ethl
bond0
#XMIT
5
619 9
619 4
#RECV
6 6 8'7 4
0
0
XMIT_KB
. o'
437
. 437
RECV_KB
97798
0
0