一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Linux性能監(jiān)控(1)

 昵稱17328427 2014-09-12

        linux性能監(jiān)控,就是要監(jiān)控系統(tǒng)的各個子系統(tǒng)是否正常。linux主要的子系統(tǒng)包括:CPU、Memory、IO和Network,它們之間相互依賴,一個出問題可能會影響其他的。比如:網(wǎng)卡流量很大會導致更多的CPU開銷,因為頻繁的響應中斷執(zhí)行協(xié)議棧。

        性能監(jiān)控時,首先要確定應用的類型,然后對癥下藥,可以將應用分成:
        CPU密集型:CPU開銷很高,比如大量的CPU運算、科學計算等。通常web server屬于這類。
        IO密集型:大量的磁盤讀寫,高負荷的內(nèi)存使用。IO密集型不會對CPU發(fā)起更多的請求,它占用CPU只是為了產(chǎn)生IO請求然后sleep。通常數(shù)據(jù)庫屬于這一類型。

1. CPU

1. 上下文切換

        上下文切換(Context Switch)是多任務操作系統(tǒng)的基石,每個進程都有自己的執(zhí)行環(huán)境就是進程的上下文,這些上下文就是當前進程使用的寄存器,比如PC、棧指針%esp、幀指針%ebp等。每個處理器核心在任意時刻只能執(zhí)行一個進程或線程,當線程的時間片用盡或者線程阻塞(比如線程執(zhí)行磁盤io或網(wǎng)絡io時),進程調(diào)度器會根據(jù)一定的規(guī)則(比如選擇運行時間加權之后最少的)挑選一個線程占有處理器。因為CPU的寄存器集合只有一份,所有必須要保存上一個進程使用的寄存器,同時恢復被調(diào)度的進程的寄存器狀態(tài)。

        上下文切換時有損耗的。一般地,當系統(tǒng)中線程過多或者io負載過高時,上下文切換會比較頻繁,此時CPU時間過多的消耗在上下文切換。

2. 運行隊列

        內(nèi)核中的進程調(diào)度器維護著運行隊列(run queue),而每個阻塞源維護著自己的阻塞隊列(wait queue,比如一個文件描述符,正在讀寫該文件的進程會被阻塞在其阻塞隊列上)。任意一個進程要么處于可執(zhí)行狀態(tài),要么阻塞狀態(tài)。所有的可執(zhí)行狀態(tài)的進程都處于運行隊列,如果當前系統(tǒng)CPU負載很高,那么運行隊列的長度很大,進程調(diào)度器就不會及時響應系統(tǒng)請求。當運行隊列越來越大時,進程或線程將花費更多的時間來獲取CPU時間。

  1. > cat /proc/loadavg  
  2. 0.02 0.05 0.05 1/279 23903  
        上述命令可以顯示系統(tǒng)負載,分別是:過去1分鐘、5分鐘、15分鐘的系統(tǒng)負載、當前正在執(zhí)行的進程數(shù)/系統(tǒng)的所有進程數(shù)、最后執(zhí)行的進程的pid。top命令也可以現(xiàn)在系統(tǒng)負載。

3. vmstat

        vmstat提供一種低開銷的方式統(tǒng)計系統(tǒng)性能數(shù)據(jù)。

  1. >  vmstat 1 1  
  2. procs -----------memory------------------- ---swap-- -----io---- -system-- ----cpu----  
  3. r  b   swpd   free     buff    cache        si   so    bi    bo     in   cs     us sy id wa  
  4. 0  0      0   1540304  497972  1631008      0    0     0    45      0    0       2  0 97  1      
        與CPU相關的各個列的意思:
        r:當前運行隊列中的進程的數(shù)目,就是那些處于可執(zhí)行狀態(tài),但是得不到CPU的進程。
        b:當前處于阻塞狀態(tài),并等待IO請求完成的進程的數(shù)目。
        in:當前處理的中斷數(shù)目。
        cs:當前系統(tǒng)發(fā)生的上下文切換次數(shù)。
        us:CPU在用戶空間執(zhí)行的時間的百分比。
        sy:CPU在內(nèi)核空間執(zhí)行的時間的百分比。
        id:CPU空閑時間的百分比。
        wa:由于所有可運行進程等待IO請求完成被阻塞導致的CPU空閑時間的百分比。

4. pidstat

        pidstat用于查看進程所屬的線程的CPU的使用情況。

  1. > pidstat -p 2036 -t 1 1  
  2. Linux 2.6.32-5-xen-amd64 (vzw51173.puppetclient.163.com)        2012年10月12日  _x86_64_        (4 CPU)  
  3. 16時09分17秒      TGID       TID    %usr %system  %guest    %CPU   CPU  Command  
  4. 16時09分18秒      2036         -    0.00    2.00    0.00    2.00     3  python  
  5. 16時09分18秒         -      2036    0.00    0.00    0.00    0.00     3  |__python  
  6. 16時09分18秒         -      2041    0.00    0.00    0.00    0.00     3  |__python  
  7. 16時09分18秒         -      5639    0.00    0.00    0.00    0.00     2  |__python  
  8. 16時09分18秒         -      5650    0.00    1.00    0.00    1.00     1  |__python  
  9. 平均時間:      TGID       TID    %usr %system  %guest    %CPU   CPU  Command  
  10. 平均時間:      2036         -    0.00    2.00    0.00    2.00     -  python  
  11. 平均時間:         -      2036    0.00    0.00    0.00    0.00     -  |__python  
  12. 平均時間:         -      2041    0.00    0.00    0.00    0.00     -  |__python  
  13. 平均時間:         -      5639    0.00    0.00    0.00    0.00     -  |__python  
  14. 平均時間:         -      5650    0.00    1.00    0.00    1.00     -  |__python  
        Linux中是不區(qū)分進程和線程的,線程就是可以共享資源的進程。TID就是線程的PID,這里可以查看各個線程的CPU使用情況。

5. 總結(jié)

        vmstat     ->     top     ->     pidstat
        通過vmstat查看整體CPU使用情況,top查看CPU占用高的幾個進程,pidstat查看這幾個進程對應的線程。
        監(jiān)控CPU性能包括以下幾個部分:
       a. 檢查CPU的run queue,每個CPU的run queue最好不要超過3個進程。
       b. 確定CPU利用率在usr/sys = 65% / 35% ~ 70% / 30%之間。
       c. 當CPU的處理時間更多的是在system空間,說明已經(jīng)超負荷。
       d. 當I/O增多時,CPU密集型的應用將受到影響。
       e. 當CPU的IOWait占用比較大的比例時,說明IO出現(xiàn)異常。

2. Memory

1. 虛擬內(nèi)存

        虛擬內(nèi)存就是在硬盤上劃出一部分區(qū)域做為內(nèi)存使用,當系統(tǒng)可用的內(nèi)存低于某個值時,內(nèi)核就會將當前不再活躍的內(nèi)存塊寫入磁盤,然后這塊內(nèi)存可以作為其他用途使用。當cpu需要訪問被寫入磁盤的數(shù)據(jù)時,再把它讀入到內(nèi)存中。上述操作對用戶來說是透明的,磁盤的讀寫是很慢的,比內(nèi)存要慢幾千萬倍(磁盤10ms,內(nèi)存100-200ns),所以要盡量把數(shù)據(jù)放在內(nèi)存中,程序才會運行的更快。硬盤中用作替代內(nèi)存的部分就是虛擬內(nèi)存,成為swap space。

2. 頁高速緩存

        Linux內(nèi)核通過頁高速緩存來加快磁盤操作。當系統(tǒng)存在大量的空閑內(nèi)存時,內(nèi)核會把空閑內(nèi)存的一部分做為頁高速緩存。當某個磁盤塊被緩存之后,對于這個磁盤塊的讀寫就相當于內(nèi)存操作。讀操作時直接讀對應的page,寫操作時將內(nèi)容寫入對應的page,然后將該page標記為臟頁,會有后臺線程flush(linux 2.6內(nèi)核)完成將臟頁同步回磁盤。flush在臟頁比例大于某個閾值,或者修改超過一定時間之后進行寫回。

  1. > ps axu | grep flush  
  2. root       927  0.0  0.0      0     0 ?        S    May23   2:34 [flush-202:2]  
  3. root     14413  0.0  0.0  10200   856 pts/2    S+   16:53   0:00 grep flush  

3. vmstat

        vmstat可以查看系統(tǒng)的內(nèi)存相關信息。

  1. > vmstat 1  
  2. procs -----------memory------------- ----swap----- -----io---- -system-- ----cpu----  
  3. r  b   swpd   free     buff      cache     si   so    bi    bo   in    cs   us  sy id wa  
  4. 0  0   6004  38264  99552 3741240    0    0     0     4    0      0    0  0 100  0  
  5. 0  0   6004  37364  99552 3741244    0    0     0     0  1565  906  0  0 99  0  
        內(nèi)存相關列的意思:
        swpd:當前使用的虛擬內(nèi)存的總額(KB),當空閑內(nèi)存達到更低的閾值時,更多的頁會被交換到磁盤。
        free:當前內(nèi)存中的空閑空間的大小(KB)。
        buff:當前內(nèi)存中用于read和write操作的緩沖區(qū)的大小(KB)。
        cache:頁高速緩存大?。↘B)。
        si:從swap寫回內(nèi)存的大?。↘B)。
        so:寫入swap的大?。↘B)。
        bi:從文件系統(tǒng)或交換設備讀的磁盤塊的大?。↘B)。讀磁盤。
        bo:從內(nèi)存寫入文件系統(tǒng)或交換設備的大?。↘B)。寫磁盤。

4. pidstat

        查看進程的缺頁情況。

  1. > pidstat -r -p 31679 1 1  
  2. Linux 2.6.32-5-xen-amd64 (debian-org)   2012年10月12日  _x86_64_        (4 CPU)  
  3.   
  4. 17時10分02秒       PID      minflt/s  majflt/s     VSZ    RSS    %MEM  Command  
  5. 17時10分03秒     31679   1292.00      0.00    871348 107852   2.58   node  
  6. 平均時間:           31679   1292.00      0.00    871348 107852   2.58  node  
        各個列含義:
        minflt/s:進程平均每s造成的minor fault,這些錯誤不會導致從磁盤加載內(nèi)存頁。
        majflt/s:進程平均每s造成的major fault,這些錯誤會導致從磁盤加載內(nèi)存頁。
        VSZ:進程使用的所有虛擬內(nèi)存的大?。↘B)。
        RSS:進程使用的物理內(nèi)存大?。↘B)。
        %MEM:占用物理內(nèi)存百分比。

5. sar

        a. 查看頁統(tǒng)計信息
  1. > sar -B  
  2. Linux 2.6.32-5-xen-amd64 (debian-org)   2012年11月17日  _x86_64_        (4 CPU)  
  3.   
  4. 00時00分01秒  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff  
  5. 00時05分01秒      0.00    200.84      364.65      0.00    538.94      0.00      0.00      0.00      0.00  
  6. 00時15分01秒      0.00    184.84      353.72      0.00    396.33      0.00      0.00      0.00      0.00  
  7. ……  
  8. 09時45分01秒      0.00   1822.52    1175.53      0.00   9406.76      0.00      0.00      0.00      0.00  
  9. 09時55分01秒      0.00   3401.99    1556.25      0.00  10269.71      0.00      0.00      0.00      0.00  
  10. 平均時間:            0.00    319.68       429.48      0.00   1036.33      0.00      0.00      0.00      0.00  
        各個列的含義:
        pgpgin/s:每s從磁盤換入的頁的大?。↘B)
        pgpgout/s:每s換出到磁盤的頁的大小(KB)
        fault/s:每s發(fā)生的缺頁錯誤的次數(shù),包括minor fault和major fault。
        majflt/s:每s發(fā)生的major fault的次數(shù),major fault會導致從磁盤載入內(nèi)存頁(即使用了swap分區(qū))。
        pgfree/s:每s放入空閑列表中的頁的個數(shù)。
        pgscank/s:每s被kswapd后臺進程掃描的頁的個數(shù)。
        pgscand/s:每s直接被掃描的頁的個數(shù)。
        pgsteal/s:為了滿足內(nèi)存要求,每s從cache(pagecache和swapcache)回收的頁的個數(shù)。
        %vmeff:等于pgsteal  /  pgscan,用于計算頁回收(page reclaim)的效率。
        
        b. 查看內(nèi)存使用信息
  1. > sar -r  
  2. Linux 2.6.32-5-xen-amd64 (debian-org)   2012年11月17日  _x86_64_        (4 CPU)  
  3.   
  4. 00時00分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  
  5. 00時05分01秒   1636744   2551244             60.92    498112   1626600    180708      4.31  
  6. 00時15分01秒   1634724   2553264             60.97    498112   1626628    181304      4.33  
  7. ……  
  8. 09時55分01秒   1555940   2632048             62.85    498128   1624716    200876      4.80  
  9. 10時05分01秒   1548416   2639572             63.03    498128   1624760    206364      4.93  
  10. 10時15分01秒   1545200   2642788             63.10    498128   1624804    212948      5.08  
  11.   
  12. 10時15分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  
  13. 10時25分01秒   1542332   2645656     63.17    498128   1624852    211524      5.05  
  14. 平均時間:     1624618   2563370     61.21    498118   1626298    183528      4.38  
        各個列的含義:
        kbmemfree:可用的空閑內(nèi)存(KB)。
        kbmemused:使用的內(nèi)存,不包括內(nèi)核自己使用的內(nèi)存(KB)。
        %memused:使用的內(nèi)存的比例。
        kbbuffers:被內(nèi)核用做緩沖區(qū)的內(nèi)存(KB)。
        kbcached:被內(nèi)核用來緩存數(shù)據(jù)的內(nèi)存(KB)。
        kbcommit:對于當前的工作量需要的內(nèi)存(KB),確定RAM/Swap的大小以防止out of memory。
        %commit:當前的工作量需要的內(nèi)存和所有內(nèi)存(RAM+Swap)的百分比。
        上面兩種sar的使用方式可以查看從0點到現(xiàn)在的每分鐘的統(tǒng)計信息,可以通過sar -B interval times以固定間隔時間interval秒統(tǒng)計times次數(shù)據(jù),比如:
  1. sar -B 1 5  
  2. Linux 2.6.32-5-xen-amd64 (debian-org)   2012年11月17日  _x86_64_        (4 CPU)  
  3.   
  4. 18時53分20秒  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff  
  5. 18時53分21秒      0.00      0.00     40.00      0.00    355.00      0.00      0.00      0.00      0.00  
  6. 18時53分22秒      0.00      0.00     42.00      0.00    362.00      0.00      0.00      0.00      0.00  
  7. 18時53分23秒      0.00      0.00     32.00      0.00    355.00      0.00      0.00      0.00      0.00  
  8. 18時53分24秒      0.00   6584.00    104.00      0.00    414.00      0.00      0.00      0.00      0.00  
  9. 18時53分25秒      0.00     28.00     66.00      0.00    427.00      0.00      0.00      0.00      0.00  
  10. 平均時間:        0.00   1322.40     56.80      0.00    382.60      0.00      0.00      0.00      0.00  

5. 總結(jié)

        a. 當系統(tǒng)出現(xiàn)較少的page fault,說明頁命中率很高,會獲得較好的響應時間。
        b. 在沒有寫入swap和disk的情況下,空閑內(nèi)存越小,表明頁高速緩存利用率越高。
        c. 如果系統(tǒng)不斷報告swap device繁忙,那么說明系統(tǒng)內(nèi)存不足。


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产又粗又长又大的视频| 91播色在线免费播放| 欧美日韩综合在线精品| 国产亚洲精品一二三区| 激情少妇一区二区三区| 九九热九九热九九热九九热| 国产精品午夜福利免费阅读| 欧美自拍系列精品在线| 国产成人精品国产亚洲欧洲| 国语久精品在视频在线观看| 人人妻在人人看人人澡| 日本人妻丰满熟妇久久| 欧美日韩校园春色激情偷拍| 日韩中文字幕欧美亚洲| 日韩高清一区二区三区四区| 九九蜜桃视频香蕉视频| 日韩人妻av中文字幕| 亚洲国产成人一区二区在线观看| 亚洲天堂精品在线视频| 青草草在线视频免费视频| 欧美日韩国产成人高潮| 日韩一本不卡在线观看| 日本不卡在线一区二区三区| 国产成人精品国产亚洲欧洲| 女厕偷窥一区二区三区在线| 亚洲精品蜜桃在线观看| 亚洲国产色婷婷久久精品| 欧美日韩国产的另类视频| 亚洲高清亚洲欧美一区二区| 亚洲超碰成人天堂涩涩| 国产一区二区三区午夜精品| 中文字幕日韩欧美亚洲午夜| 黄片在线免费观看全集| 亚洲熟女诱惑一区二区| 国产精品日本女优在线观看| 91蜜臀精品一区二区三区| 中文字幕免费观看亚洲视频| 老熟妇2久久国内精品| 日本精品啪啪一区二区三区| 亚洲高清亚洲欧美一区二区| 成人精品亚洲欧美日韩|