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

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

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

    qileilove

    blog已經轉移至github,大家請訪問 http://qaseven.github.io/

    linux操作系統性能監控優化--CPU、Memory、IO、Network

      操作系統性能監控優化不外乎對CPU、Memory、IO、Network這四個方面,下面分別介紹使用工具和指標

      一、CPU

      1、良好狀態指標

      CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%。

      上下文切換:與CPU利用率相關聯,如果CPU利用率狀態良好,大量的上下文切換也是可以接受的。

      可運行隊列:每個處理器的可運行隊列<=3個線程。

      2、監控工具

    vmstat
    $ 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
    14  0    140 2904316 341912 3952308  0    0     0   460 1106 9593 36 64  1  0  0
    17  0    140 2903492 341912 3951780  0    0     0     0 1037 9614 35 65  1  0  0
    20  0    140 2902016 341912 3952000  0    0     0     0 1046 9739 35 64  1  0  0
    17  0    140 2903904 341912 3951888  0    0     0    76 1044 9879 37 63  0  0  0
    16  0    140 2904580 341912 3952108  0    0     0     0 1055 9808 34 65  1  0  0

      重要參數:

      r,run queue,可運行隊列的線程數,這些線程都是可運行狀態,只不過CPU暫時不可用;

      b,被blocked的進程數,正在等待IO請求;

      in,interrupts,被處理過的中斷數

      cs,context switch,系統上正在做上下文切換的數目

      us,用戶占用CPU的百分比

      sys,內核和中斷占用CPU的百分比

      id,CPU完全空閑的百分比

      上例可得:

      sy高us低,以及高頻度的上下文切換(cs),說明應用程序進行了大量的系統調用;

      這臺4核機器的r應該在12個以內,現在r在14個線程以上,此時CPU負荷很重。

      查看某個進程占用的CPU資源

    $  while :; do ps -eo pid,ni,pri,pcpu,psr,comm | grep 'test_command'; sleep 1; done
    PID  NI PRI %CPU PSR COMMAND
    28577   0  23  0.0   0 test_command
    28578   0  23  0.0   3 test_command
    28579   0  23  0.0   2 test_command
    28581   0  23  0.0   2 test_command
    28582   0  23  0.0   3 test_command
    28659   0  23  0.0   0 test_command
    ……


     二、Memory

      1、良好狀態指標

      swap in (si) == 0,swap out (so) == 0

      應用程序可用內存/系統物理內存 <= 70%

      2、監控工具

    vmstat
    $ 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
    0  3 252696   2432    268   7148 3604 2368  3608  2372  288  288  0  0 21 78  1
    0  2 253484   2216    228   7104 5368 2976  5372  3036  930  519  0  0  0 100  0
    0  1 259252   2616    128   6148 19784 18712 19784 18712 3821 1853  0  1  3 95  1
    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  4

      重要參數:

      swpd,已使用的 SWAP 空間大小,KB 為單位;

      free,可用的物理內存大小,KB 為單位;

      buff,物理內存用來緩存讀寫操作的buffer大小,KB 為單位;

      cache,物理內存用來緩存進程地址空間的 cache 大小,KB 為單位;

      si,數據從 SWAP 讀取到 RAM(swap in)的大小,KB 為單位;

      so,數據從 RAM 寫到 SWAP(swap out)的大小,KB 為單位。

      上例可得:物理可用內存 free 基本沒什么顯著變化,swapd逐步增加,說明最小可用的內存始終保持在 256MB(物理內存大小) * 10% = 2.56MB 左右,當臟頁達到10%的時候就開始大量使用swap。

    free
    $ free -m
    total used free shared buffers cached
    Mem: 8111 7185 926 0 243 6299
    -/+ buffers/cache: 643 7468
    Swap: 8189 0 8189

      三、磁盤IO

      1、良好狀態指標

      iowait % < 20%

      提高命中率的一個簡單方式就是增大文件緩存區面積,緩存區越大預存的頁面就越多,命中率也越高。

      Linux 內核希望能盡可能產生次缺頁中斷(從文件緩存區讀),并且能盡可能避免主缺頁中斷(從硬盤讀),這樣隨著次缺頁中斷的增多,文件緩存區也逐步增大,直到系統只有少量可用物理內存的時候 Linux 才開始釋放一些不用的頁。

      2、監控工具

      查看物理內存和文件緩存情況

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

      這臺服務器總共有 8GB 物理內存(MemTotal),3GB 左右可用內存(MemFree),343MB左右用來做磁盤緩存(Buffers),4GB左右用來做文件緩存區(Cached)。

    sar
    $ sar -d 2 3
    Linux 2.6.9-42.ELsmp (webserver) 11/30/2008 _i686_ (8 CPU)
    11:09:33 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
    11:09:35 PM dev8-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
    11:09:35 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
    11:09:37 PM dev8-0 1.00 0.00 12.00 12.00 0.00 0.00 0.00 0.00
    11:09:37 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
    11:09:39 PM dev8-0 1.99 0.00 47.76 24.00 0.00 0.50 0.25 0.05
    Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util
    Average: dev8-0 1.00 0.00 19.97 20.00 0.00 0.33 0.17 0.02

      重要參數:

      await表示平均每次設備I/O操作的等待時間(以毫秒為單位)。

      svctm表示平均每次設備I/O操作的服務時間(以毫秒為單位)。

      %util表示一秒中有百分之幾的時間用于I/O操作。

      如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高于svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢。

      如果%util接近100%,表示磁盤產生的I/O請求太多,I/O系統已經滿負荷的在工作,該磁盤可能存在瓶頸。

      四、Network IO

      對于UDP

      1、良好狀態指標

      接收、發送緩沖區不長時間有等待處理的網絡包

      2、監控工具

      netstat

      對于UDP服務,查看所有監聽的UDP端口的網絡情況

    $ watch netstat -lunp
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    udp        0      0 0.0.0.0:64000           0.0.0.0:*                           -
    udp        0      0 0.0.0.0:38400           0.0.0.0:*                           -
    udp        0      0 0.0.0.0:38272           0.0.0.0:*                           -
    udp        0      0 0.0.0.0:36992           0.0.0.0:*                           -
    udp        0      0 0.0.0.0:17921           0.0.0.0:*                           -
    udp        0      0 0.0.0.0:11777           0.0.0.0:*                           -
    udp        0      0 0.0.0.0:14721           0.0.0.0:*                           -
    udp        0      0 0.0.0.0:36225           0.0.0.0:*                           -

      RecvQ、SendQ為0,或者不長時間有數值是比較正常的。

      對于UDP服務,查看丟包情況(網卡收到了,但是應用層沒有處理過來造成的丟包)

    $ watch netstat -su
    Udp:
    278073881 packets received
    4083356897 packets to unknown port received.
    2474435364 packet receive errors
    1079038030 packets sent

      packet receive errors 這一項數值增長了,則表明在丟包。

      這里有對“packet receive errors”的稍微詳細些的解釋,它包含了7種錯誤,and通常表明是checksum錯誤。不過我們通常通過這個數值的變化來判斷UDP服務是否丟包(第2項錯誤),不知道是否有其他什么方法來判斷UDP的丟包?:

    "packet receive errors" usually means:
    1) data is truncated, error in checksum while copying
    2) udp queue is full, so it needs to be dropped
    3) unable to receive udp package from encapsulated socket
    4) sock_queue_rcv_skb() failed with -ENOMEM
    5) it is a short packet
    6) no space for header in udp packet when validating packet
    7) xfrm6_policy_check() fails
    many times it means the checksum is not right.



      對于TCP(來自david的經驗,thx~~)

      1、良好狀態指標

      對于TCP而言,不會出現因為緩存不足而存在丟包的事,因為網絡等其他原因,導致丟了包,協議層也會通過重傳機制來保證丟的包到達對方。

      所以,tcp而言更多的專注重傳率。

      2、監控工具

    # cat /proc/net/snmp | grep Tcp:
    Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRsts
    Tcp: 1 200 120000 -1 78447 413 50234 221 3 5984652 5653408 156800 0 849

      重傳率 = RetransSegs / OutSegs

      至于這個值在多少范圍內,算ok的,得看具體的業務了。

      業務側更關注的是響應時間。


    posted on 2013-09-18 10:52 順其自然EVO 閱讀(1020) 評論(0)  編輯  收藏 所屬分類: linux

    <2013年9月>
    25262728293031
    1234567
    891011121314
    15161718192021
    22232425262728
    293012345

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 人妖系列免费网站观看| 亚洲av无码成人精品区| 在线免费观看伊人三级电影| 亚洲综合激情五月色一区| 亚洲A∨无码无在线观看| 国产亚洲AV手机在线观看| 国产美女被遭强高潮免费网站| 91福利免费视频| 中文在线观看国语高清免费| 四虎永久在线精品免费一区二区| 97se亚洲国产综合自在线| 久久亚洲AV成人出白浆无码国产 | 亚洲精品国产电影午夜| 国产亚洲精品自在线观看| 国产免费观看视频| 四虎成人免费观看在线网址| 一本无码人妻在中文字幕免费| 亚洲三级在线免费观看| 99国产精品免费观看视频| a级特黄毛片免费观看| 国产午夜无码片免费| 国产精品免费在线播放| 无码精品人妻一区二区三区免费 | 国产美女在线精品免费观看| 亚洲精品国产免费| 18女人水真多免费高清毛片| 99在线热视频只有精品免费| 中文字幕的电影免费网站| 国产精品青草视频免费播放| 国产免费人成视频尤勿视频 | 国产亚洲精品自在线观看| 久久久久亚洲AV无码专区网站| 亚洲国产精品成人AV无码久久综合影院| 最新69国产成人精品免费视频动漫| 猫咪社区免费资源在线观看| 在线观看视频免费完整版| 青娱分类视频精品免费2| 啦啦啦中文在线观看电视剧免费版| 成人免费毛片观看| 国产成人免费网站在线观看| 免费a级毛片无码a∨性按摩|