【操作系統(tǒng)】Linux性能監(jiān)控——CPU、Memory、IO、Network
by
illidan
(綜合了幾篇文章和自己的實踐)
一、CPU 1、良好狀態(tài)指標(biāo)
2、監(jiān)控工具
$ 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 重要參數(shù): r,run queue,可運行隊列的線程數(shù),這些線程都是可運行狀態(tài),只不過CPU暫時不可用; b,被blocked的進(jìn)程數(shù),正在等待IO請求; in,interrupts,被處理過的中斷數(shù) cs,context switch,系統(tǒng)上正在做上下文切換的數(shù)目 us,用戶占用CPU的百分比 sys,內(nèi)核和中斷占用CPU的百分比 id,CPU完全空閑的百分比 上例可得: sy高us低,以及高頻度的上下文切換(cs),說明應(yīng)用程序進(jìn)行了大量的系統(tǒng)調(diào)用; 這臺4核機(jī)器的r應(yīng)該在12個以內(nèi),現(xiàn)在r在14個線程以上,此時CPU負(fù)荷很重。
$ 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、良好狀態(tài)指標(biāo)
2、監(jiān)控工具
$ 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 重要參數(shù): swpd,已使用的 SWAP 空間大小,KB 為單位; free,可用的物理內(nèi)存大小,KB 為單位; buff,物理內(nèi)存用來緩存讀寫操作的buffer大小,KB 為單位; cache,物理內(nèi)存用來緩存進(jìn)程地址空間的 cache 大小,KB 為單位; si,數(shù)據(jù)從 SWAP 讀取到 RAM(swap in)的大小,KB 為單位; so,數(shù)據(jù)從 RAM 寫到 SWAP(swap out)的大小,KB 為單位。 上例可得: 物理可用內(nèi)存 free 基本沒什么顯著變化,swapd逐步增加,說明最小可用的內(nèi)存始終保持在 256MB(物理內(nèi)存大小) * 10% = 2.56MB 左右,當(dāng)臟頁達(dá)到10%的時候就開始大量使用swap。
$ 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、良好狀態(tài)指標(biāo)
提高命中率的一個簡單方式就是增大文件緩存區(qū)面積,緩存區(qū)越大預(yù)存的頁面就越多,命中率也越高。 Linux 內(nèi)核希望能盡可能產(chǎn)生次缺頁中斷(從文件緩存區(qū)讀),并且能盡可能避免主缺頁中斷(從硬盤讀),這樣隨著次缺頁中斷的增多,文件緩存區(qū)也逐步增大,直到系統(tǒng)只有少量可用物理內(nèi)存的時候 Linux 才開始釋放一些不用的頁。 2、監(jiān)控工具
$ cat /proc/meminfo MemTotal: 8182776 kB MemFree: 3053808 kB Buffers: 342704 kB Cached: 3972748 kB 這臺服務(wù)器總共有 8GB 物理內(nèi)存(MemTotal),3GB 左右可用內(nèi)存(MemFree),343MB左右用來做磁盤緩存(Buffers),4GB左右用來做文件緩存區(qū)(Cached)。
$ 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 重要參數(shù): await表示平均每次設(shè)備I/O操作的等待時間(以毫秒為單位)。 svctm表示平均每次設(shè)備I/O操作的服務(wù)時間(以毫秒為單位)。 %util表示一秒中有百分之幾的時間用于I/O操作。 如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊列等待太長,系統(tǒng)上運行的應(yīng)用程序?qū)⒆兟?/span> 如果%util接近100%,表示磁盤產(chǎn)生的I/O請求太多,I/O系統(tǒng)已經(jīng)滿負(fù)荷的在工作,該磁盤可能存在瓶頸。
四、Network IO 對于UDP 1、良好狀態(tài)指標(biāo) 接收、發(fā)送緩沖區(qū)不長時間有等待處理的網(wǎng)絡(luò)包 2、監(jiān)控工具
對于UDP服務(wù),查看所有監(jiān)聽的UDP端口的網(wǎng)絡(luò)情況 $ 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,或者不長時間有數(shù)值是比較正常的。
對于UDP服務(wù),查看丟包情況(網(wǎng)卡收到了,但是應(yīng)用層沒有處理過來造成的丟包) $ watch netstat -su Udp: 278073881 packets received 4083356897 packets to unknown port received. 2474435364 packet receive errors 1079038030 packets sent packet receive errors 這一項數(shù)值增長了,則表明在丟包。 這里有對“packet receive errors”的稍微詳細(xì)些的解釋,它包含了7種錯誤,and通常表明是checksum錯誤。不過我們通常通過這個數(shù)值的變化來判斷UDP服務(wù)是否丟包(第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的經(jīng)驗,thx~~) 1、良好狀態(tài)指標(biāo) 對于TCP而言,不會出現(xiàn)因為緩存不足而存在丟包的事,因為網(wǎng)絡(luò)等其他原因,導(dǎo)致丟了包,協(xié)議層也會通過重傳機(jī)制來保證丟的包到達(dá)對方。 所以,tcp而言更多的專注重傳率。 2、監(jiān)控工具 # 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 至于這個值在多少范圍內(nèi),算ok的,得看具體的業(yè)務(wù)了。 業(yè)務(wù)側(cè)更關(guān)注的是響應(yīng)時間。
本文原創(chuàng)自無線技術(shù)運營空間: http://wireless.qzone.qq.com 及 http://blog.csdn.net/wireless_tech (專注無線技術(shù)運營——無線技術(shù)(操作系統(tǒng)/數(shù)據(jù)庫/WEB前端/負(fù)載均衡/系統(tǒng)容災(zāi)/系統(tǒng)安全/短信接入/WAP接入/3G等)、無線業(yè)務(wù)運營、無線開放平臺、統(tǒng)計分析(用戶行為分析/數(shù)據(jù)挖掘)、CP合作,聯(lián)系我們:1780551083@qq.com) |
|