Linux 性能监控 : CPU 、Memory 、 IO 、Network
一、CPU
1.良好狀態指標
-
CPU利用率:User Time <= 70%,System Time <= 35%,User Time + System Time <= 70%
-
上下文切換:與CPU利用率相關聯,如果CPU利用率狀態良好,大量的上下文切換也是可以接受的
-
可運行隊列:每個處理器的可運行隊列<=3個線程
2.監控工具
- vmstat
重要參數:
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資源
二、Memory
1.良好狀態指標
- swap in (si) == 0,swap out (so) == 0
- 應用程序可用內存/系統物理內存 <= 70%
2.監控工具
- vmstat
重要參數:
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
三、磁盤IO
1.良好狀態指標
- iowait % < 20% 提高命中率的一個簡單方式就是增大文件緩存區面積,緩存區越大預存的頁面就越多,命中率也越高。 Linux 內核希望能盡可能產生次缺頁中斷(從文件緩存區讀),并且能盡可能避免主缺頁中斷(從硬盤讀),這樣隨著次缺頁中斷的增多,文件緩存區也逐步增大,直到系統只有少量可用物理內存的時候 Linux 才開始釋放一些不用的頁。
2.監控工具
- 查看物理內存和文件緩存情況
這臺服務器總共有 8GB 物理內存(MemTotal),3GB 左右可用內存(MemFree),343MB左右用來做磁盤緩存(Buffers),4GB左右用來做文件緩存區(Cached)。
- sar
重要參數:
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 -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,或者不長時間有數值是比較正常的。
對于UDP服務,查看丟包情況(網卡收到了,但是應用層沒有處理過來造成的丟包)
$ watch netstat -suUdp:278073881 packets received4083356897 packets to unknown port received.2474435364 packet receive errors1079038030 packets sentpacket receive errors 這一項數值增長了,則表明在丟包。
這里有對packet receive errors的稍微詳細些的解釋,它包含了7種錯誤,and通常表明是checksum錯誤。不過我們通常通過這個數值的變化來判斷UDP服務是否丟包(第2項錯誤),不知道是否有其他什么方法來判斷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.對于TCP(來自davidshan單衛的經驗,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 OutRstsTcp: 1 200 120000 -1 78447 413 50234 221 3 5984652 5653408 156800 0 849重傳率 = RetransSegs / OutSegs
至于這個值在多少范圍內,算ok的,得看具體的業務了。
業務側更關注的是響應時間。
總結
以上是生活随笔為你收集整理的Linux 性能监控 : CPU 、Memory 、 IO 、Network的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 文件指针和文件描述符之间的相互转换 fd
- 下一篇: linux中fstab文件详解