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

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

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

    以java平臺(tái)為基礎(chǔ),專(zhuān)注項(xiàng)目管理、關(guān)注電子商務(wù)
    攬住母親的肩頭,敬父親一杯酒,對(duì)愛(ài)的女人說(shuō)“我愛(ài)你”,和另外一個(gè)男人打架,不要打女人,有一個(gè)自己的孩子,年輕的時(shí)候去漂泊,有自己的一份事業(yè).

    ?????????磁盤(pán)通常是計(jì)算機(jī)最慢的子系統(tǒng),也是最容易出現(xiàn)性能瓶頸的地方,因?yàn)榇疟P(pán)離 CPU 距離最遠(yuǎn)而且 CPU 訪問(wèn)磁盤(pán)要涉及到機(jī)械操作,比如轉(zhuǎn)軸、尋軌等。訪問(wèn)硬盤(pán)和訪問(wèn)內(nèi)存之間的速度差別是以數(shù)量級(jí)來(lái)計(jì)算的,就像1天和1分鐘的差別一樣。要監(jiān)測(cè) IO 性能,有必要了解一下基本原理和 Linux 是如何處理硬盤(pán)和內(nèi)存之間的 IO 的。

    內(nèi)存頁(yè)

    上一篇 Linux 性能監(jiān)測(cè):Memory(三) 提到了內(nèi)存和硬盤(pán)之間的 IO 是以頁(yè)為單位來(lái)進(jìn)行的,在 Linux 系統(tǒng)上1頁(yè)的大小為 4K。可以用以下命令查看系統(tǒng)默認(rèn)的頁(yè)面大小:

    				$ /usr/bin/time -v date
    	...
    	Page size (bytes): 4096
    	...
    		

    缺頁(yè)中斷

    ?????????Linux 利用虛擬內(nèi)存極大的擴(kuò)展了程序地址空間,使得原來(lái)物理內(nèi)存不能容下的程序也可以通過(guò)內(nèi)存和硬盤(pán)之間的不斷交換(把暫時(shí)不用的內(nèi)存頁(yè)交換到硬盤(pán),把需要的內(nèi)存頁(yè)從硬盤(pán)讀到內(nèi)存)來(lái)贏得更多的內(nèi)存,看起來(lái)就像物理內(nèi)存被擴(kuò)大了一樣。事實(shí)上這個(gè)過(guò)程對(duì)程序是完全透明的,程序完全不用理會(huì)自己哪一部分、什么時(shí)候被交換進(jìn)內(nèi)存,一切都有內(nèi)核的虛擬內(nèi)存管理來(lái)完成。當(dāng)程序啟動(dòng)的時(shí)候,Linux 內(nèi)核首先檢查 CPU 的緩存和物理內(nèi)存,如果數(shù)據(jù)已經(jīng)在內(nèi)存里就忽略,如果數(shù)據(jù)不在內(nèi)存里就引起一個(gè)缺頁(yè)中斷(Page Fault),然后從硬盤(pán)讀取缺頁(yè),并把缺頁(yè)緩存到物理內(nèi)存里。缺頁(yè)中斷可分為主缺頁(yè)中斷(Major Page Fault)和次缺頁(yè)中斷(Minor Page Fault),要從磁盤(pán)讀取數(shù)據(jù)而產(chǎn)生的中斷是主缺頁(yè)中斷;數(shù)據(jù)已經(jīng)被讀入內(nèi)存并被緩存起來(lái),從內(nèi)存緩存區(qū)中而不是直接從硬盤(pán)中讀取數(shù)據(jù)而產(chǎn)生的中斷是次缺頁(yè)中斷。

    ?????????上面的內(nèi)存緩存區(qū)起到了預(yù)讀硬盤(pán)的作用,內(nèi)核先在物理內(nèi)存里尋找缺頁(yè),沒(méi)有的話產(chǎn)生次缺頁(yè)中斷從內(nèi)存緩存里找,如果還沒(méi)有發(fā)現(xiàn)的話就從硬盤(pán)讀取。很顯然,把多余的內(nèi)存拿出來(lái)做成內(nèi)存緩存區(qū)提高了訪問(wèn)速度,這里還有一個(gè)命中率的問(wèn)題,運(yùn)氣好的話如果每次缺頁(yè)都能從內(nèi)存緩存區(qū)讀取的話將會(huì)極大提高性能。要提高命中率的一個(gè)簡(jiǎn)單方法就是增大內(nèi)存緩存區(qū)面積,緩存區(qū)越大預(yù)存的頁(yè)面就越多,命中率也會(huì)越高。下面的 time 命令可以用來(lái)查看某程序第一次啟動(dòng)的時(shí)候產(chǎn)生了多少主缺頁(yè)中斷和次缺頁(yè)中斷:

    				$ /usr/bin/time -v date
    	...
    	Major (requiring I/O) page faults: 1
    	Minor (reclaiming a frame) page faults: 260
    	...
    		

    File Buffer Cache

    ?????????從上面的內(nèi)存緩存區(qū)(也叫文件緩存區(qū) File Buffer Cache)讀取頁(yè)比從硬盤(pán)讀取頁(yè)要快得多,所以 Linux 內(nèi)核希望能盡可能產(chǎn)生次缺頁(yè)中斷(從文件緩存區(qū)讀),并且能盡可能避免主缺頁(yè)中斷(從硬盤(pán)讀),這樣隨著次缺頁(yè)中斷的增多,文件緩存區(qū)也逐步增大,直到系統(tǒng)只有少量可用物理內(nèi)存的時(shí)候 Linux 才開(kāi)始釋放一些不用的頁(yè)。我們運(yùn)行 Linux 一段時(shí)間后會(huì)發(fā)現(xiàn)雖然系統(tǒng)上運(yùn)行的程序不多,但是可用內(nèi)存總是很少,這樣給大家造成了 Linux 對(duì)內(nèi)存管理很低效的假象,事實(shí)上 Linux 把那些暫時(shí)不用的物理內(nèi)存高效的利用起來(lái)做預(yù)存(內(nèi)存緩存區(qū))呢。下面打印的是 VPSee 的一臺(tái) Sun 服務(wù)器上的物理內(nèi)存和文件緩存區(qū)的情況:

    				$ cat /proc/meminfo
    MemTotal:      8182776 kB
    MemFree:       3053808 kB
    Buffers:        342704 kB
    Cached:        3972748 kB
    		

    這臺(tái)服務(wù)器總共有 8GB 物理內(nèi)存(MemTotal),3GB 左右可用內(nèi)存(MemFree),343MB 左右用來(lái)做磁盤(pán)緩存(Buffers),4GB 左右用來(lái)做文件緩存區(qū)(Cached),可見(jiàn) Linux 真的用了很多物理內(nèi)存做 Cache,而且這個(gè)緩存區(qū)還可以不斷增長(zhǎng)。

    頁(yè)面類(lèi)型

    Linux 中內(nèi)存頁(yè)面有三種類(lèi)型:

    • Read pages,只讀頁(yè)(或代碼頁(yè)),那些通過(guò)主缺頁(yè)中斷從硬盤(pán)讀取的頁(yè)面,包括不能修改的靜態(tài)文件、可執(zhí)行文件、庫(kù)文件等。當(dāng)內(nèi)核需要它們的時(shí)候把它們讀到內(nèi)存中,當(dāng)內(nèi)存不足的時(shí)候,內(nèi)核就釋放它們到空閑列表,當(dāng)程序再次需要它們的時(shí)候需要通過(guò)缺頁(yè)中斷再次讀到內(nèi)存。
    • Dirty pages,臟頁(yè),指那些在內(nèi)存中被修改過(guò)的數(shù)據(jù)頁(yè),比如文本文件等。這些文件由 pdflush 負(fù)責(zé)同步到硬盤(pán),內(nèi)存不足的時(shí)候由 kswapd 和 pdflush 把數(shù)據(jù)寫(xiě)回硬盤(pán)并釋放內(nèi)存。
    • Anonymous pages,匿名頁(yè),那些屬于某個(gè)進(jìn)程但是又和任何文件無(wú)關(guān)聯(lián),不能被同步到硬盤(pán)上,內(nèi)存不足的時(shí)候由 kswapd 負(fù)責(zé)將它們寫(xiě)到交換分區(qū)并釋放內(nèi)存。

    IO’s Per Second(IOPS)

    ??????每次磁盤(pán) IO 請(qǐng)求都需要一定的時(shí)間,和訪問(wèn)內(nèi)存比起來(lái)這個(gè)等待時(shí)間簡(jiǎn)直難以忍受。在一臺(tái) 2001 年的典型 1GHz PC 上,磁盤(pán)隨機(jī)訪問(wèn)一個(gè) word 需要 8,000,000 nanosec = 8 millisec,順序訪問(wèn)一個(gè) word 需要 200 nanosec;而從內(nèi)存訪問(wèn)一個(gè) word 只需要 10 nanosec 這個(gè)硬盤(pán)可以提供 125 次 IOPS(1000 ms / 8 ms)。

    順序 IO 和 隨機(jī) IO

    ?????????IO 可分為順序 IO 和 隨機(jī) IO 兩種,性能監(jiān)測(cè)前需要弄清楚系統(tǒng)偏向順序 IO 的應(yīng)用還是隨機(jī) IO 應(yīng)用。順序 IO 是指同時(shí)順序請(qǐng)求大量數(shù)據(jù),比如數(shù)據(jù)庫(kù)執(zhí)行大量的查詢、流媒體服務(wù)等,順序 IO 可以同時(shí)很快的移動(dòng)大量數(shù)據(jù)。可以這樣來(lái)評(píng)估 IOPS 的性能,用每秒讀寫(xiě) IO 字節(jié)數(shù)除以每秒讀寫(xiě) IOPS 數(shù),rkB/s 除以 r/s,wkB/s 除以 w/s. 下面顯示的是連續(xù)2秒的 IO 情況,可見(jiàn)每次 IO 寫(xiě)的數(shù)據(jù)是增加的(45060.00 / 99.00 = 455.15 KB per IO,54272.00 / 112.00 = 484.57 KB per IO)。相對(duì)隨機(jī) IO 而言,順序 IO 更應(yīng)該重視每次 IO 的吞吐能力(KB per IO):

    				$ iostat -kx 1
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.00    0.00    2.50   25.25    0.00   72.25
    
    Device:  rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
    sdb       24.00 19995.00 29.00 99.00  4228.00 45060.00   770.12    45.01  539.65   7.80  99.80
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               0.00    0.00    1.00   30.67    0.00   68.33
    
    Device:  rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
    sdb        3.00 12235.00  3.00 112.00   768.00 54272.00   957.22   144.85  576.44   8.70 100.10
    
    		

    ?????????隨機(jī) IO 是指隨機(jī)請(qǐng)求數(shù)據(jù),其 IO 速度不依賴于數(shù)據(jù)的大小和排列,依賴于磁盤(pán)的每秒能 IO 的次數(shù),比如 Web 服務(wù)、Mail 服務(wù)等每次請(qǐng)求的數(shù)據(jù)都很小,隨機(jī) IO 每秒同時(shí)會(huì)有更多的請(qǐng)求數(shù)產(chǎn)生,所以磁盤(pán)的每秒能 IO 多少次是關(guān)鍵。

    				$ iostat -kx 1
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               1.75    0.00    0.75    0.25    0.00   97.26
    
    Device:  rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
    sdb        0.00    52.00  0.00 57.00     0.00   436.00    15.30     0.03    0.54   0.23   1.30
    
    avg-cpu:  %user   %nice %system %iowait  %steal   %idle
               1.75    0.00    0.75    0.25    0.00   97.24
    
    Device:  rrqm/s   wrqm/s   r/s   w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
    sdb        0.00    56.44  0.00 66.34     0.00   491.09    14.81     0.04    0.54   0.19   1.29
    
    		

    按照上面的公式得出:436.00 / 57.00 = 7.65 KB per IO,491.09 / 66.34 = 7.40 KB per IO. 與順序 IO 比較發(fā)現(xiàn),隨機(jī) IO 的 KB per IO 小到可以忽略不計(jì),可見(jiàn)對(duì)于隨機(jī) IO 而言重要的是每秒能 IOPS 的次數(shù),而不是每次 IO 的吞吐能力(KB per IO)。

    SWAP

    ?????????當(dāng)系統(tǒng)沒(méi)有足夠物理內(nèi)存來(lái)應(yīng)付所有請(qǐng)求的時(shí)候就會(huì)用到 swap 設(shè)備,swap 設(shè)備可以是一個(gè)文件,也可以是一個(gè)磁盤(pán)分區(qū)。不過(guò)要小心的是,使用 swap 的代價(jià)非常大。如果系統(tǒng)沒(méi)有物理內(nèi)存可用,就會(huì)頻繁 swapping,如果 swap 設(shè)備和程序正要訪問(wèn)的數(shù)據(jù)在同一個(gè)文件系統(tǒng)上,那會(huì)碰到嚴(yán)重的 IO 問(wèn)題,最終導(dǎo)致整個(gè)系統(tǒng)遲緩,甚至崩潰。swap 設(shè)備和內(nèi)存之間的 swapping 狀況是判斷 Linux 系統(tǒng)性能的重要參考,我們已經(jīng)有很多工具可以用來(lái)監(jiān)測(cè) swap 和 swapping 情況,比如:top、cat /proc/meminfo、vmstat 等:

    				$ cat /proc/meminfo
    MemTotal:      8182776 kB
    MemFree:       2125476 kB
    Buffers:        347952 kB
    Cached:        4892024 kB
    SwapCached:        112 kB
    ...
    SwapTotal:     4096564 kB
    SwapFree:      4096424 kB
    ...
    
    $ vmstat 1
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     1  2 260008   2188    144   6824 11824 2584 12664  2584 1347 1174 14  0  0 86  0
     2  1 262140   2964    128   5852 24912 17304 24952 17304 4737 2341 86 10  0  0
    		
    posted on 2010-10-28 09:42 cssseek 閱讀(2034) 評(píng)論(0)  編輯  收藏

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     

    <2010年10月>
    262728293012
    3456789
    10111213141516
    17181920212223
    24252627282930
    31123456

    常用鏈接

    留言簿(3)

    隨筆分類(lèi)

    隨筆檔案

    友情鏈接

    最新隨筆

    搜索

    •  

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 中国一级毛片视频免费看| 1024免费福利永久观看网站| 亚洲va在线va天堂va不卡下载| 日韩人妻一区二区三区免费| 亚洲小说图区综合在线| 在线观看亚洲天天一三视| 免费99精品国产自在现线| 免费一级毛suv好看的国产网站| 美女视频黄频a免费观看| 国产亚洲高清不卡在线观看| 成人毛片免费观看视频| caoporn国产精品免费| 激情内射亚洲一区二区三区爱妻| 亚洲国产成人精品91久久久| 2020久久精品国产免费| 成人网站免费大全日韩国产| 国产成+人+综合+亚洲专| 免费看的一级毛片| 国产三级在线免费| 免费手机在线看片| 亚洲乱码在线播放| 免费观看国产小粉嫩喷水| 99久久久国产精品免费牛牛四川| 日韩一区二区三区免费播放| 亚洲永久在线观看| 久久精品国产亚洲AV网站| 亚洲国产精品人人做人人爱| 免费不卡视频一卡二卡| 久久久久久国产精品免费免费男同| 色欲aⅴ亚洲情无码AV| 亚洲1234区乱码| 亚洲高清在线观看| 久久青青草原亚洲av无码| 日韩视频在线免费| 久久天天躁狠狠躁夜夜免费观看| 两个人看的www免费视频| 美女视频黄频a免费观看| 亚洲欧美黑人猛交群| 亚洲一区在线免费观看| 亚洲美女免费视频| 亚洲国产美国国产综合一区二区 |