一、查看CPU使用情況
cpu使用率反映的是當前cpu的繁忙程度,忽高忽低的原因在於占用cpu處理時間的進程可能處於io等待狀態但卻還未釋放進入wait。
平均負載(loadaverage)是指某段時間內占用cpu時間的進程和等待cpu時間的進程數,這里等待cpu時間的進程是指等待被喚醒的進程,不包括處於wait狀態進程。
1、良好狀態指標
CPU利用率:
User Time <=70%,System Time <= 35%,User Time + System Time <= 70%。
上下文切換:與CPU利用率相關聯,如果CPU利用率狀態良好,大量的上下文切換也是可以接受的。
可運行隊列:每個處理器的可運行隊列<=3個線程。
2、工具
(1)vmstat
字段說明:
r (run queue)可運行隊列的線程數,這些線程都是可運行狀態,只不過CPU暫時不可用; b,被blocked的進程數,正在等待IO請求; in,interrupts,被處理過的中斷數; cs,context switch,系統上正在做上下文切換的數目; us,用戶占用CPU的百分比 sys,內核和中斷占用CPU的百分比 id,CPU完全空閑的百分比
(2)uptime
[root@node1 ~]#uptime 00:44:22 up 1:17,3 users, load average: 8.13, 5.90, 4,94 顯示的是過去的1,5,15分鍾內進程隊列中的平均進程數量
如何衡量當前系統是否負載過高?
如果每個cpu(可以按CPU核心的數量計算)上當前活動進程數
<=3,則系統性能良好,
=4,表示可以接受
>=5,則系統性能問題嚴重
上面例中的8.13,如果有2個cpu核心,則8.13/2=4.065, 此系統性能可以接受
建議設置嚴格的報警值為: CPU核心的數量
比如:CPU核心數量為2,則設置報警值為2
(3)top
[root@node1 ~]#top top - 10:31:45 up14:51, 3 users, load average: 0.07, 0.33, 0.33 Tasks: 91 total, 1running, 90 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us,0.2%sy, 0.0%ni, 99.8%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 502288ktotal, 494648k used, 7640k free, 220k buffers Swap: 1015800ktotal, 21792k used, 994008k free, 238468k cached
從top 要看CPU負載情況,可以看%us和%sy,其中%us<=70%, %sy<=35%,
%us+%sy<=70%說明狀態良好,同時可以結合idle值來看,也就是%id,如果%id<=70% 則表示IO的壓力較大
查看某個進程占用的CPU資源
二、Memory
1、良好狀態指標
swap in (si) == 0,swap out (so) == 0
應用程序可用內存/系統物理內存 <= 70%
2、監控工具
(1)vmstat
三、磁盤IO
1、良好狀態指標
iowait % < 20%
提高命中率的一個簡單方式就是增大文件緩存區面積,緩存區越大預存的頁面就越多,命中率也越高。
Linux 內核希望能盡可能產生次缺頁中斷(從文件緩存區讀),並且能盡可能避免主缺頁中斷(從硬盤讀),這樣隨着次缺頁中斷的增多,文件緩存區也逐步增大,直到系統只有少量可用物理內存的時候 Linux 才開始釋放一些不用的頁。
2、監控工具
(1)cat/proc/meminfo
這台機器總共有 256MB 物理內存(MemTotal),90MB 左右可用內存(MemFree),8MB左右用來做磁盤緩存(Buffers),40MB左右用來做文件緩存區(Cached)。
(2)sar
await表示平均每次設備I/O操作的等待時間(以毫秒為單位)。
svctm表示平均每次設備I/O操作的服務時間(以毫秒為單位)。
%util表示一秒中有百分之幾的時間用於I/O操作。
如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高於svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢。
如果%util接近100%,表示磁盤產生的I/O請求太多,I/O系統已經滿負荷的在工作,該磁盤可能存在瓶頸。
(3)iostat
rrqm/s: 每秒進行 merge 的讀操作數目。即 delta(rmerge)/s wrqm/s: 每秒進行 merge 的寫操作數目。即 delta(wmerge)/s r/s: 每秒完成的讀 I/O 設備次數。即 delta(rio)/s w/s: 每秒完成的寫 I/O 設備次數。即 delta(wio)/s rsec/s: 每秒讀扇區數。即 delta(rsect)/s wsec/s: 每秒寫扇區數。即 delta(wsect)/s rkB/s: 每秒讀K字節數。是 rsect/s 的一半,因為每扇區大小為512字節。(需要計算) wkB/s: 每秒寫K字節數。是 wsect/s 的一半。(需要計算) avgrq-sz: 平均每次設備I/O操作的數據大小 (扇區)。delta(rsect+wsect)/delta(rio+wio) avgqu-sz: 平均I/O隊列長度。即 delta(aveq)/s/1000 (因為aveq的單位為毫秒)。 await: 平均每次設備I/O操作的等待時間 (毫秒)。即 delta(ruse+wuse)/delta(rio+wio) svctm: 平均每次設備I/O操作的服務時間 (毫秒)。即 delta(use)/delta(rio+wio) %util: 一秒中有百分之多少的時間用於 I/O 操作,或者說一秒中有多少時間 I/O 隊列是非空的。即 delta(use)/s/1000 (因為use的單位為毫秒) 如果 %util 接近 100%,說明產生的I/O請求太多,I/O系統已經滿負荷,該磁盤可能存在瓶頸。 idle小於70% IO壓力就較大了,一般讀取速度有較多的wait.
同時可以結合vmstat 查看查看b參數(等待資源的進程數)和wa參數(IO等待所占用的CPU時間的百分比,高過30%時IO壓力高)
四、Network IO
對於UDP
1、良好狀態指標
接收、發送緩沖區不長時間有等待處理的網絡包
2、監控工具
netstat
對於UDP服務,查看所有監聽的UDP端口的網絡情況
RecvQ、SendQ為0,或者不長時間有數值是比較正常的。
對於UDP服務,查看丟包情況(網卡收到了,但是應用層沒有處理過來造成的丟包)
packet receiveerrors 這一項數值增長了,則表明在丟包
對於TCP
1、良好狀態指標
對於TCP而言,不會出現因為緩存不足而存在丟包的事,因為網絡等其他原因,導致丟了包,協議層也會通過重傳機制來保證丟的包到達對方。
所以,tcp而言更多的專注重傳率。
2、監控工具
重傳率 = RetransSegs / OutSegs
至於這個值在多少范圍內,算ok的,得看具體的業務了。
業務則更關注的是響應時間。
五、查看文件句柄數(文件描述符)
查看系統默認的最大文件句柄數,系統默認是1024
# ulimit -n
1024
查看當前進程打開了多少句柄數
# lsof -n|awk '{print $1,$2}'|sort|uniq-c|sort -nr|more [root@node1 ~]#lsof -n|awk '{print $1,$2}'|sort|uniq -c|sort -nr 125 master 1507 58 sshd 1577 48 mysqld 1451 45 qmgr 1526 45 pickup 1665 36 sshd 1100 20 rsyslogd 1064 20 init 1 19 crond 1527 18 udevd 436
........
其中第一列是打開的句柄數,第二列是進程ID。
本文轉載自:http://lib.csdn.net/article/linux/33040