<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    szhswl
    宋針還的個(gè)人空間
    DTrace即動(dòng)態(tài)跟蹤Dynamic Tracing,是Solaris 10的一個(gè)新功能,透過(guò)此一新功能,用戶能夠動(dòng)態(tài)檢測(cè)操作系統(tǒng)內(nèi)核和用戶進(jìn)程,以更精確地掌握系統(tǒng)的資源使用狀況,提高系統(tǒng)性能,減少支持成本,并進(jìn)行有效的調(diào)節(jié)。1997年,供職于Sun而現(xiàn)已是Solaris內(nèi)核開(kāi)發(fā)部高級(jí)工程師的Bryan Cantrill 與他的工作組在緊張地研究一個(gè)性能問(wèn)題,它出現(xiàn)在剛剛提及的Sun E10000服務(wù)器。該服務(wù)器在運(yùn)行基準(zhǔn)測(cè)試時(shí),速度突然在一段時(shí)間內(nèi)奇怪地降低。工作組經(jīng)過(guò)六天夜以繼日的工作后,終于發(fā)現(xiàn)了問(wèn)題的根本原因。某個(gè)“愚蠢之極”的配置錯(cuò)誤將服務(wù)器配置成了路由器。

    “我很受震驚,”Cantrill 說(shuō)到, “這是任何一個(gè)客戶都可能遇到的問(wèn)題,但是他們可不敢奢望讓內(nèi)核開(kāi)發(fā)人員為之夜以繼日地工作,編寫(xiě)自定義代碼以弄清楚問(wèn)題。我們得找出一個(gè)更好的方法。” 
    經(jīng)過(guò)兩年半的緊張開(kāi)發(fā),Cantrill和他的工作組終于研究出了這個(gè)更好的方法: Dtrace
    DTrace是過(guò)去十年中在操作系統(tǒng)方面最具意義的革新之一:
    Probe,Solaris中分散著30,000多的位置指針,也叫探測(cè)器probes,DTrace可激活成千上萬(wàn)的探測(cè)器,記錄所關(guān)注的位置指定的數(shù)據(jù),如命中,即可從該地址顯示用戶進(jìn)程或系統(tǒng)內(nèi)核的數(shù)據(jù),從而了解系統(tǒng),包括:
    1。任何函數(shù)的參數(shù)
    2。內(nèi)核的任何全局變量
    3。函數(shù)調(diào)用的時(shí)間(NS,十億分之一秒,無(wú)任何其它PC/Unix在ns一級(jí)精度)
    4。跟蹤堆棧,包括指明函數(shù)調(diào)用的代碼
    5。函數(shù)調(diào)用時(shí)運(yùn)行的進(jìn)程
    6。產(chǎn)生函數(shù)調(diào)用的線程
    Probe于自定義D語(yǔ)言程序相關(guān)聯(lián),probe表示的格式為:
    provider:module:function:name
    1。顯示當(dāng)前動(dòng)態(tài)系統(tǒng)中的動(dòng)態(tài)Dtrace探針probe:
    # dtrace -l |more
       ID   PROVIDER            MODULE                          FUNCTION NAME
        1     dtrace                                                     BEGIN
        2     dtrace                                                     END
        3     dtrace                                                     ERROR
        4     vminfo          fasttrap                   fasttrap_uwrite softlock
        5     vminfo          fasttrap                    fasttrap_uread softlock
        6        fbt              pool                         pool_open entry
        7        fbt              pool                         pool_open return
        8        fbt              pool                        pool_close entry
        9        fbt              pool                        pool_close return
       10        fbt              pool                        pool_ioctl entry
       11        fbt              pool                        pool_ioctl return
       12        fbt              pool                         pool_info entry
       13        fbt              pool                         pool_info return
    。。。
    43545        fbt              zmod                        z_strerror return
    43546        fbt              zmod                      z_uncompress entry
    43547        fbt              zmod                      z_uncompress return
    即當(dāng)前本人V210上有43547個(gè)probe。
    2。體驗(yàn) dtrace 與 Unix ps 命令:
    如用ps看mozilla進(jìn)程:
    # ps -e |grep mozilla
      2386 pts/11      0:00 mozilla
      2436 pts/11     10:12 mozilla-
    也可使用dtrace 通過(guò)probe探針看:
    # dtrace -n 'syscall::exece:return { trace(execname);}'
    dtrace: description 'syscall::exece:return ' matched 1 probe
    CPU     ID                    FUNCTION:NAME
      0  11082                     exece:return   uname                            
      0  11082                     exece:return   uname                            
      0  11082                     exece:return   basename  
    。。。
      0  11082                     exece:return   sed                              
      0  11082                     exece:return   mozilla-bin                      
      1  11082                     exece:return   csh                              
      1  11082                     exece:return   mozilla      
    。。。
    2。實(shí)際dtrace看的更細(xì),
    如用date顯示系統(tǒng)時(shí)間,很快就結(jié)束了,無(wú)法跟蹤,體驗(yàn)dtrace跟蹤效果:
    % date
    2005年05月24日 星期二 20時(shí)39分03秒 CST
    # dtrace -n 'syscall::exece: {trace(timestamp)}'
    ddtrace: description 'syscall::exece: ' matched 2 probes
    CPU     ID                    FUNCTION:NAME
      0  11081                      exece:entry   102890531281542
      0  11082                     exece:return   102890532181875
    即可跟蹤其在第102890531281542納秒開(kāi)始讀取,第102890532181875返回結(jié)果。
    3。體驗(yàn)Dtrace 對(duì)系統(tǒng)調(diào)用更多的觀察:
    如看機(jī)器忙閑狀態(tài),常用vmstat:
    # vmstat 1
     kthr      memory            page            disk          faults      cpu
     r b w   swap  free  re  mf pi po fr de sr s0 s3 s1 s1   in   sy   cs us sy id
     0 0 0 5523680 1378352 14 48 84 1  0  0  1  0  1  0  0  341 2058  883  3  1 96
     0 0 0 5368296 1218688 0 23 15  0  0  0  0  0  0  0  0  336 2605  722 10  1 89
     
    得知產(chǎn)生2605多系統(tǒng)調(diào)用,但無(wú)和簡(jiǎn)單查找哪個(gè)進(jìn)程的問(wèn)題呢,試用dtrace看:
    # dtrace -n 'syscall::read:entry {@NUM[execname] = count();}'
    ddtrace: description 'syscall::read:entry ' matched 1 probe
    ^C
      dtfile                                                            5
      sdtperfmeter                                                     12
      soffice.bin                                                      23
      dic                                                              23
      dtterm                                                           53
      mozilla-bin                                                     394
      Xsun                                                            545
    顯然發(fā)現(xiàn)CDE和Mozilla是產(chǎn)生大量系統(tǒng)調(diào)用的程序,看I/O分布也可:
    如還是Mozilla:
    # dtrace -n 'syscall::write:entry {@NUM[execname] = quantize(arg2);}'
    ... 
      mozilla-bin                                       
               value  ------------- Distribution ------------- count    
                   0 |                                         0        
                   1 |@@@@@@@@@@@@@@@@@@@@@                    470      
                   2 |                                         0        
                   4 |                                         7        
                   8 |                                         0        
                  16 |                                         0        
                  32 |                                         0        
                  64 |                                         0        
                 128 |                                         10       
                 256 |@@@@@@@@                                 184      
                 512 |@@@@@@                                   146      
                1024 |@@@                                      78       
                2048 |                                         8        
                4096 |                                         1        
                8192 |                                         0    
    ...
    可觀察到大量Mozilla產(chǎn)生的I/O在256-512字節(jié)間。
    4。 想再仔細(xì)看程序內(nèi)部情況?
    truss不錯(cuò):
    # truss /usr/sfw/bin/mozilla
    execve("/usr/bin/ksh", 0xFFBFF564, 0xFFBFF574)  argc = 3
    resolvepath("/usr/bin/ksh", "/usr/bin/ksh", 1023) = 12
    resolvepath("/usr/lib/ld.so.1", "/lib/ld.so.1", 1023) = 12
    stat("/usr/bin/ksh", 0xFFBFF340)                = 0
    open("/var/ld/ld.config", O_RDONLY)             Err#2 ENOENT
    stat("/lib/libc.so.1", 0xFFBFEE70)              = 0
    resolvepath("/lib/libc.so.1", "/lib/libc.so.1", 1023) = 14
    open("/lib/libc.so.1", O_RDONLY)                = 3
    mmap(0x00010000, 8192, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_ALIGN, 3, 。。。
    試下dtrace:
    # dtrace -n 'syscall::read:return /execname =="mozilla" /{ ustack();}'
    dtrace: description 'syscall::read:return ' matched 1 probe
    CPU     ID                    FUNCTION:NAME
      0  10984                      read:return 
                  libc.so.1`_read+0x8
                  ksh`io_readbuff+0x264
                  ksh`0x245e4
                  ksh`io_readc+0x2c
                  ksh`0x29c54
                  ksh`main+0xa30
                  ksh`_start+0x108
      0  10984                      read:return 
                  libc.so.1`_read+0x8
                  ksh`io_readbuff+0x264
                  ksh`0x245e4
                  ksh`io_readc+0x2c
                  ksh`0x28938
                  ksh`0x28654
    ...
    看到n多調(diào)用,開(kāi)始和返回,夠開(kāi)發(fā)人員分析的。 
            總結(jié),Dtrace功能強(qiáng)大,精度高,輕量,truss有時(shí)降低系統(tǒng)30%CPU利用率。但復(fù)雜,需對(duì)系統(tǒng)內(nèi)核和應(yīng)用熟悉,否則看不懂跟蹤到的數(shù)據(jù),估計(jì)以后CU該開(kāi)Dtrace編程板塊了。


    ---------------------------------------------------------------------------------------------------------------------------------
    說(shuō)人之短,乃護(hù)己之短。夸己之長(zhǎng),乃忌人之長(zhǎng)。皆由存心不厚,識(shí)量太狹耳。能去此弊,可以進(jìn)德,可以遠(yuǎn)怨。
    http://www.tkk7.com/szhswl
    ------------------------------------------------------------------------------------------------------ ----------------- ---------
    posted on 2007-12-06 19:55 宋針還 閱讀(270) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 操作系統(tǒng)
    主站蜘蛛池模板: 114一级毛片免费| 永久免费bbbbbb视频| 亚洲人成综合在线播放| 永久免费无码网站在线观看 | 日本一道高清不卡免费| 中文字幕在线视频免费| 久久精品亚洲视频| 在线精品免费视频无码的| 成人免费av一区二区三区| 亚洲国产精品成人精品小说| 国产精品免费播放| 99热这里有免费国产精品| 免费观看四虎精品成人| 亚洲国产超清无码专区| 国内精品99亚洲免费高清| 免费无码肉片在线观看| 国产免费阿v精品视频网址| 亚洲Aⅴ在线无码播放毛片一线天| 亚洲国产精品无码专区影院 | 亚洲国产成人久久精品99| 99久热只有精品视频免费看| 欧洲美女大片免费播放器视频| 亚洲福利一区二区精品秒拍| 亚洲精品成人a在线观看| 成人片黄网站A毛片免费| 亚洲国产精品免费视频| 日韩av无码免费播放| 白白色免费在线视频| 亚洲欧美第一成人网站7777| 亚洲精品永久www忘忧草| 亚洲国产精品无码av| 中文字幕亚洲一区二区三区| 国产成人青青热久免费精品| 好大好深好猛好爽视频免费| 亚欧色视频在线观看免费| 无码免费一区二区三区免费播放| 福利免费在线观看| 天堂在线免费观看| 毛片免费在线观看| 久草免费在线观看视频| 色哟哟国产精品免费观看|