Linux 性能监控 : CPU 、Memory 、 IO 、Network
一、CPU
1.良好狀態(tài)指標(biāo)
-
CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%
-
上下文切換:與CPU利用率相關(guān)聯(lián),如果CPU利用率狀態(tài)良好,大量的上下文切換也是可以接受的
-
可運(yùn)行隊(duì)列:每個(gè)處理器的可運(yùn)行隊(duì)列<=3個(gè)線程
2.監(jiān)控工具
- vmstat
重要參數(shù):
r,run queue,可運(yùn)行隊(duì)列的線程數(shù),這些線程都是可運(yùn)行狀態(tài),只不過(guò)CPU暫時(shí)不可用
b,被blocked的進(jìn)程數(shù),正在等待IO請(qǐng)求
in,interrupts,被處理過(guò)的中斷數(shù)
cs,context switch,系統(tǒng)上正在做上下文切換的數(shù)目
us,用戶(hù)占用CPU的百分比
sys,內(nèi)核和中斷占用CPU的百分比
id,CPU完全空閑的百分比
上例可得:
sy高us低,以及高頻度的上下文切換(cs),說(shuō)明應(yīng)用程序進(jìn)行了大量的系統(tǒng)調(diào)用;
這臺(tái)4核機(jī)器的r應(yīng)該在12個(gè)以?xún)?nèi),現(xiàn)在r在14個(gè)線程以上,此時(shí)CPU負(fù)荷很重。
- 查看某個(gè)進(jìn)程占用的CPU資源
二、Memory
1.良好狀態(tài)指標(biāo)
- swap in (si) == 0,swap out (so) == 0
- 應(yīng)用程序可用內(nèi)存/系統(tǒng)物理內(nèi)存 <= 70%
2.監(jiān)控工具
- vmstat
重要參數(shù):
swpd,已使用的 SWAP 空間大小,KB 為單位 free,可用的物理內(nèi)存大小,KB 為單位 buff,物理內(nèi)存用來(lái)緩存讀寫(xiě)操作的buffer大小,KB 為單位 cache,物理內(nèi)存用來(lái)緩存進(jìn)程地址空間的 cache 大小,KB 為單位 si,數(shù)據(jù)從 SWAP 讀取到 RAM(swap in)的大小,KB 為單位 so,數(shù)據(jù)從 RAM 寫(xiě)到 SWAP(swap out)的大小,KB 為單位
上例可得:
物理可用內(nèi)存 free 基本沒(méi)什么顯著變化,swapd逐步增加,說(shuō)明最小可用的內(nèi)存始終保持在 256MB(物理內(nèi)存大小) * 10% = 2.56MB 左右,當(dāng)臟頁(yè)達(dá)到10%的時(shí)候就開(kāi)始大量使用swap。
- free
三、磁盤(pán)IO
1.良好狀態(tài)指標(biāo)
- iowait % < 20% 提高命中率的一個(gè)簡(jiǎn)單方式就是增大文件緩存區(qū)面積,緩存區(qū)越大預(yù)存的頁(yè)面就越多,命中率也越高。 Linux 內(nèi)核希望能盡可能產(chǎn)生次缺頁(yè)中斷(從文件緩存區(qū)讀),并且能盡可能避免主缺頁(yè)中斷(從硬盤(pán)讀),這樣隨著次缺頁(yè)中斷的增多,文件緩存區(qū)也逐步增大,直到系統(tǒng)只有少量可用物理內(nèi)存的時(shí)候 Linux 才開(kāi)始釋放一些不用的頁(yè)。
2.監(jiān)控工具
- 查看物理內(nèi)存和文件緩存情況
這臺(tái)服務(wù)器總共有 8GB 物理內(nèi)存(MemTotal),3GB 左右可用內(nèi)存(MemFree),343MB左右用來(lái)做磁盤(pán)緩存(Buffers),4GB左右用來(lái)做文件緩存區(qū)(Cached)。
- sar
重要參數(shù):
await表示平均每次設(shè)備I/O操作的等待時(shí)間(以毫秒為單位)
svctm表示平均每次設(shè)備I/O操作的服務(wù)時(shí)間(以毫秒為單位)
%util表示一秒中有百分之幾的時(shí)間用于I/O操作
如果svctm的值與await很接近,表示幾乎沒(méi)有I/O等待,磁盤(pán)性能很好,如果await的值遠(yuǎn)高于svctm的值,則表示I/O隊(duì)列等待太長(zhǎng),系統(tǒng)上運(yùn)行的應(yīng)用程序?qū)⒆兟?/p>
如果%util接近100%,表示磁盤(pán)產(chǎn)生的I/O請(qǐng)求太多,I/O系統(tǒng)已經(jīng)滿(mǎn)負(fù)荷的在工作,該磁盤(pán)可能存在瓶頸。
四、Network IO
對(duì)于UDP
1.良好狀態(tài)指標(biāo)
接收、發(fā)送緩沖區(qū)不長(zhǎng)時(shí)間有等待處理的網(wǎng)絡(luò)包
2.監(jiān)控工具
- netstat
對(duì)于UDP服務(wù),查看所有監(jiān)聽(tīng)的UDP端口的網(wǎng)絡(luò)情況
$ watch netstat -lunpProto Recv-Q Send-Q Local Address Foreign Address State PID/Program nameudp 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,或者不長(zhǎng)時(shí)間有數(shù)值是比較正常的。
對(duì)于UDP服務(wù),查看丟包情況(網(wǎng)卡收到了,但是應(yīng)用層沒(méi)有處理過(guò)來(lái)造成的丟包)
$ watch netstat -suUdp:278073881 packets received4083356897 packets to unknown port received.2474435364 packet receive errors1079038030 packets sentpacket receive errors 這一項(xiàng)數(shù)值增長(zhǎng)了,則表明在丟包。
這里有對(duì)packet receive errors的稍微詳細(xì)些的解釋,它包含了7種錯(cuò)誤,and通常表明是checksum錯(cuò)誤。不過(guò)我們通常通過(guò)這個(gè)數(shù)值的變化來(lái)判斷UDP服務(wù)是否丟包(第2項(xiàng)錯(cuò)誤),不知道是否有其他什么方法來(lái)判斷UDP的丟包?:
"packet receive errors" usually means:1) data is truncated, error in checksum while copying2) 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.對(duì)于TCP(來(lái)自davidshan單衛(wèi)的經(jīng)驗(yàn),thx~)
1.良好狀態(tài)指標(biāo)
對(duì)于TCP而言,不會(huì)出現(xiàn)因?yàn)榫彺娌蛔愣嬖趤G包的事,因?yàn)榫W(wǎng)絡(luò)等其他原因,導(dǎo)致丟了包,協(xié)議層也會(huì)通過(guò)重傳機(jī)制來(lái)保證丟的包到達(dá)對(duì)方。
所以,tcp而言更多的專(zhuān)注重傳率。
2、監(jiān)控工具
# cat /proc/net/snmp | grep Tcp:Tcp: RtoAlgorithm RtoMin RtoMax MaxConn ActiveOpens PassiveOpens AttemptFails EstabResets CurrEstab InSegs OutSegs RetransSegs InErrs OutRstsTcp: 1 200 120000 -1 78447 413 50234 221 3 5984652 5653408 156800 0 849重傳率 = RetransSegs / OutSegs
至于這個(gè)值在多少范圍內(nèi),算ok的,得看具體的業(yè)務(wù)了。
業(yè)務(wù)側(cè)更關(guān)注的是響應(yīng)時(shí)間。
總結(jié)
以上是生活随笔為你收集整理的Linux 性能监控 : CPU 、Memory 、 IO 、Network的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 文件指针和文件描述符之间的相互转换 fd
- 下一篇: linux中fstab文件详解