歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 使用unix工具監控cpu、內存等系統資源占用率

使用unix工具監控cpu、內存等系統資源占用率

日期:2017/2/28 11:14:52   编辑:關於Unix


1)使用 sar -u 命令監控cpu使用
$ sar -u 5 5
12:21:15 %usr %sys %wio %idle
12:21:20 54 15 13 19
12:21:25 41 18 15 27
12:21:30 62 20 10 9
12:21:35 33 11 20 36
12:21:40 38 13 17 31
Average 45 15 15 24
%usr--運行在用戶模式下cpu的使用百分比
%sys--運行在系統模式下cpu的使用百分比
%wio--進程在等待塊I/O時閒置狀態下cpu的使用百分比
%idle--閒置狀態時cpu的使用百分比
很低的%idle說明cpu負載高,或者cpu處理能力不足,或者也可能是I/O問題。
很高的%wio,即系統I/O繁忙,進程獲得cpu但在等I/O,這部分時間的比例,有可能是I/O存在問題。
2)使用top命令發現系統中最影響性能的用戶
load averages: 2.83, 3.30, 3.67
143 processes: 124 sleeping, 15 running, 4 on cpu
CPU states: 45.9% idle, 24.8% user, 7.3% kernel, 22.0% iowait, 0.0% swap
Memory: 2048M real, 36M free, 2920M swap in use, 982M swap free
PID USERNAME LWP PRI NICE SIZE RES STATE TIME CPU COMMAND
23696 oracle 11 52 0 586M 536M run 279:55 7.57% oracle
19184 oracle 11 53 0 586M 536M run 166:47 2.51% oracle
11303 oracle 11 53 0 742M 698M run 25.2H 1.43% oracle
8156 oracle 11 48 0 741M 695M run 28.7H 0.96% oracle
12786 oracle 11 59 0 588M 529M run 111.8H 0.94% oracle
15222 oracle 11 49 0 741M 695M cpu/8 30.9H 0.85% oracle
2924 oracle 11 59 0 748M 688M sleep 107.5H 0.83% oracle
8178 oracle 11 59 0 741M 695M cpu/0 28.8H 0.81% oracle
15220 oracle 11 54 0 741M 697M run 31.4H 0.78% oracle
8168 oracle 11 39 0 741M 697M run 30.0H 0.77% oracle
15216 oracle 11 59 0 741M 697M cpu/9 30.1H 0.77% oracle
8164 oracle 11 39 0 741M 695M run 30.8H 0.76% oracle
11267 oracle 11 59 0 741M 697M sleep 32.3H 0.74% oracle
15214 oracle 11 59 0 741M 695M sleep 30.9H 0.70% oracle
11861 oracle 1 59 0 739M 696M sleep 16.9H 0.67% oracle
3)使用uptime命令監控cpu負載
$ uptime
12:45pm up 119 day(s), 19:01, 1 user, load average: 2.96, 2.98, 3.30
提供快速查看cpu中所有任務(包括正在運行的任務)在1分鐘,5分鐘,15分鐘內的負載。在sun下是1,5,15分鐘,在digital unix下是5,30,60分鐘。
4)使用mpstat命令確定cpu瓶頸
$ mpstat 10 3
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 91 14 127 406 245 97 49 62 45 0 351 25 9 9 57
1 106 16 145 174 101 312 70 111 33 0 327 27 6 10 56
4 99 16 83 173 101 294 68 108 33 0 290 26 6 10 58
5 102 17 126 184 110 313 70 115 33 0 336 26 6 10 57
8 97 17 127 174 101 302 69 113 33 0 299 25 6 11 58
9 93 11 335 329 274 239 61 103 59 0 217 23 10 7 60
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 19 33 3504 2160 1920 791 99 116 77 0 1401 30 17 12 42
1 82 39 1908 264 101 1210 157 215 49 0 2394 39 8 18 35
4 126 45 1839 276 102 1269 167 224 51 0 2511 34 9 14 43
5 133 49 2298 293 107 1384 178 239 53 0 2840 36 8 18 39
8 95 46 2772 266 101 1266 158 214 47 0 2638 38 7 14 40
9 115 38 2961 986 847 1173 158 213 88 0 2401 34 13 13 41
CPU minf mjf xcal intr ithr csw icsw migr smtx srw syscl usr sys wt idl
0 74 30 2438 1960 1743 670 65 100 66 0 1232 25 14 14 47
1 63 40 1615 229 101 1158 123 192 47 0 2277 35 6 14 44
4 145 28 1396 249 101 1148 142 190 42 0 2397 32 8 14 47
5 73 28 1588 253 107 1213 141 202 47 0 2578 32 8 9 51
8 44 29 3181 252 101 1210 146 187 39 0 2471 30 10 9 51
9 67 24 1345 823 727 1024 105 178 83 0 2006 26 9 9 55
mpstat命令是一個sun solaris工具,以報表形式報告每個處理器的統計數據。表的每一行代表一個處理器的活動情況。第一張表顯示了自啟動以來各種活動情況的總結。注意smtx項,它代表cpu嘗試獲取一個互斥鎖定(mutex)失敗的次數。mutex機制浪費cpu時間,並且降低多處理器的伸縮性能。如果stmx列的值大於200,說明將遇到cpu瓶頸問題。
5)使用sar命令監控磁盤I/O問題
$ sar -d 5 2
12:59:00 device %busy avque r+w/s blks/s avwait avserv
12:59:05 md30 71 0.8 103 1738 0.0 7.5
md31 34 0.4 52 934 0.0 7.1
md32 39 0.4 52 925 0.0 8.6
sd10 42 0.5 57 1001 0.0 9.0
sd10,a 0 0.0 0 0 0.0 0.0
sd10,b 0 0.0 0 0 0.0 0.0
sd10,c 0 0.0 0 0 0.0 0.0
12:59:10 md30 9 0.1 5 312 0.0 27.4
md31 4 0.1 4 277 0.0 16.1
md32 7 0.1 4 289 0.0 28.2
sd10 26 0.4 36 787 0.0 11.0
sd10,a 5 0.1 7 106 0.0 7.9
sd10,b 3 0.0 1 24 0.0 28.4
sd10,c 0 0.0 0 0 0.0 0.0
Average md30 40 0.5 54 1025 0.0 8.5
md31 19 0.2 28 606 0.0 7.7
md32 23 0.3 28 607 0.0 10.0
sd10 34 0.5 47 894 0.0 9.7
sd10,a 3 0.0 3 53 0.0 7.9
sd10,b 2 0.0 1 12 0.0 28.4
sd10,c 0 0.0 0 0 0.0 0.0
-d選項監控磁盤I/O
%busy
avque--平均隊列長度
r+w/s--讀和寫的活動
blks/s--傳送的數據塊的數量
avwait--平均等待時間
avserv--平均服務時間
較高的%busy和avque意味著出現了磁盤I/O瓶頸。
$ sar -b 2 5
17:08:24 bread/s lread/s %rcache bwrit/s lwrit/s %wcache pread/s pwrit/s
17:08:26 0 530 100 2 2 0 0 0
17:08:28 0 536 100 3 3 0 0 0
17:08:31 0 339 100 0 1 67 0 0
17:08:33 0 332 100 1 3 67 0 0
17:08:35 0 343 100 3 57 95 0 0
Average 0 416 100 2 13 85 0 0
-b選項報告緩沖區活動,它等同於磁盤I/O活動。如果懷疑數據庫I/O有問題,這個命令很有用。
bread/s--每秒鐘從磁盤進行物理讀入的數量
lread/s--每秒中從緩沖區讀入的數量
%rcache--讀入請求的緩沖區命中率
bwrit/s--每秒鐘向磁盤物理寫入的數量,它給dba提供了服務器上整體寫入活動的指標
lwrit/s--每秒鐘向緩沖區寫入的數量
%wcache--寫入請求的緩沖區命中率
pread/s--每秒鐘從磁盤讀入的數量,這個是I/O子系統上負載的極好度量
pwrit/s--每秒鐘寫入磁盤的數量
6)使用iostat確定磁盤I/O瓶頸
iostat可以用於報告終端和磁盤I/O活動情況,確定磁盤瓶頸。輸出結果的第一行顯示了自數據庫啟動以來各種I/O的統計數據。最常用的選項有-d,-x,-D,-c(cpu負載)。
$ iostat -d md30 md31 md32 sd10 5 5
md30 md31 md32 sd10
kps tps serv kps tps serv kps tps serv kps tps serv
9 1 13 7 0 15 7 0 14 46 6 14
112 14 11 56 7 12 56 7 10 439 46 14
24 3 8 13 2 6 11 1 10 51 6 8
3 0 12 2 0 14 2 0 9 89 10 7
3 0 25 2 0 40 2 0 10 34 19 29
-d選項可以列出每秒傳送的字節數,每秒的傳輸次數以及平均服務時間(以毫秒計)。-d僅僅顯示I/O,不區分讀操作和寫操作。
$ iostat -D md30 md31 md32 sd10 5 5
md30 md31 md32 sd10
rps wps util rps wps util rps wps util rps wps util
1 0 0.5 0 0 0.3 0 0 0.3 4 3 4.3
53 3 30.4 27 3 18.3 27 3 14.0 38 5 20.9
5 0 6.2 2 0 3.9 2 0 3.7 3 6 7.0
2 10 11.5 1 10 9.3 1 10 7.6 56 19 41.9
5 0 3.3 3 0 1.6 3 0 1.6 7 1 4.6
-D選項報告每秒的讀操作數量,寫操作數量以及磁盤使用率。
$ iostat -x 5 3
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
md30 0.5 0.1 4.0 4.5 0.0 0.0 12.8 0 0
md31 0.3 0.1 2.0 4.5 0.0 0.0 14.6 0 0
md32 0.3 0.1 2.0 4.5 0.0 0.0 14.1 0 0
sd10 3.6 2.6 37.0 8.6 0.0 0.1 14.1 0 4
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
md30 0.8 0.0 6.4 0.0 0.0 0.0 12.0 0 1
md31 0.4 0.0 3.2 0.0 0.0 0.0 13.0 0 1
md32 0.4 0.0 3.2 0.0 0.0 0.0 11.0 0 0
sd10 5.8 1.0 65.6 3.5 0.0 0.1 8.1 0 5
extended device statistics
device r/s w/s kr/s kw/s wait actv svc_t %w %b
md30 0.4 0.0 3.2 0.0 0.0 0.0 11.8 0 0
md31 0.2 0.0 1.6 0.0 0.0 0.0 12.7 0 0
md32 0.2 0.0 1.6 0.0 0.0 0.0 10.9 0 0
sd10 0.2 1.2 1.6 3.8 0.0 0.0 16.9 0 2
-x選項報告所有磁盤的擴展磁盤統計數據
7)使用sar命令和vmstat命令監控分頁/交換
一種可以快速判定自系統啟動以來是否存在任何交換活動的方法就是運行vmstat -S命令,如果swp/in和swp/out列出現非零值,就說明很可能出現了問題。另外可以使用sar命令挖掘更多的信息。
可以使用sar命令來檢查系統的分頁/交換活動。任何分頁和交換現象都預示著將出現問題。在虛擬內存系統中,如果當前非活動用戶(的進程)從內存移到磁盤上時,就會出現分頁現象(一個小問題)。而如果由於內存的不足造成當前活動用戶(的進程)被移到了磁盤上,就會出現交換現象(問題很嚴重)。分頁不像交換那麼糟糕,但是隨著分頁的增加,很快就會出現交換。
$ sar -p 5 5
15:15:44 atch/s pgin/s ppgin/s pflt/s vflt/s slock/s
15:15:49 109.15 302.58 351.29 154.67 680.91 0.40
15:15:54 293.25 287.50 317.86 380.95 1447.82 0.00
15:15:59 146.41 418.92 485.86 71.51 327.09 0.00
15:16:04 96.03 386.90 429.56 92.86 362.70 0.00
15:16:09 197.81 495.63 526.64 340.76 983.70 0.00
Average 168.56 378.26 422.18 208.23 760.73 0.08
-p選項報告分頁活動
atch/s--每秒的分頁故障數據,可通過在內存中重新聲明一個頁來解決故障(每秒的附件)
pgin/s--每秒換進pagein請求數
ppgin/s--每秒換進的頁數
pflt/s--每秒保護錯誤中的分頁錯誤數(非法訪問頁)或者copy-on-write(寫入時拷貝)數
vflt/s--每秒翻譯頁錯誤數(不在內存中的有效頁)
slock/s--每秒因軟件鎖請求物理I/O引起的錯誤數
$ sar -w 5 5
15:25:00 swpin/s bswin/s swpot/s bswot/s pswch/s
15:25:05 0.00 0.0 0.00 0.0 6520
15:25:10 0.00 0.0 0.00 0.0 6190
15:25:15 0.00 0.0 0.00 0.0 5432
15:25:20 0.00 0.0 0.00 0.0 5239
15:25:25 0.00 0.0 0.00 0.0 5620
Average 0.00 0.0 0.00 0.0 5800
-w選項報告交換和內存切換活動
swpin/s--每秒進程換入的數量
bswin/s--每秒512個字節的換入數量
swpot/s--每秒進程換出的數量
bswot/s--每秒512個字節的換出數量
pswch/s--每秒進程上下文切換的數量
$ sar -r 5 5
15:26:50 freemem freeswap
15:26:55 4544 1998060
15:27:00 4032 1995139
15:27:05 4325 1991663
15:27:10 4372 1991611
15:27:15 4522 1987298
Average 4360 1992754
-r選項報告空閒內存和空閒交換
當freemem(空閒內存--以512字節為單位列出)低於一個特定的水平時,系統就開始分頁。如果它繼續下降,系統就開始將一些進程交換出去。這個一個系統性能快速惡化的信號,可以查找占用過多內存的進程,或者是否存在過多的進程。
$ sar -g 5 5
15:35:46 pgout/s ppgout/s pgfree/s pgscan/s %ufs_ipf
15:35:51 43.54 58.45 57.06 0.00 0.00
15:35:56 5.95 7.94 7.54 0.00 0.00
15:36:01 105.59 132.73 224.95 1230.94 0.00
15:36:06 38.22 46.53 81.39 412.67 0.00
15:36:11 11.33 13.12 12.72 0.00 0.00
Average 40.86 51.67 76.59 327.94 0.00
-g選項報告分頁活動
pgout/s--每秒換出(pageout)請求數
ppgout/s--每秒換出(pageout)的頁數
pgfree/s--由分頁控制程序每秒放入空閒列表的頁數
pgscan/s--由分頁控制程序每秒掃描的分頁數
%ufs_ipf--UFS incode與由iget獲取的有重用頁的空閒列表的比例。這些頁已被填充,無法被進程重新聲明使用。這樣,它就是iget造成的頁面填充比例。
很高的ppgout(從內存中移出的頁面數)也說明內存不足的問題。
8)使用ipcs命令確定共享內存的使用情況
ipcs命令可以用來監控sga的使用情況。它報告sga中每個共享內存段的尺寸。如果在整個sga中沒有足夠的內存來容納一個連續的內存段,sga就將建立非連續的內存段。在實例崩潰的情況下,可能就會出現內存無法釋放的問題。如果發生了這樣的情況,注意ipcrm命令可以清除這些段(ipcrm -m用於內存段,ipcrm -s用於信號段)。
$ ipcs -b
IPC status from as of Sat Jan 7 16:04:05 CST 2006
T ID KEY MODE OWNER GROUP QBYTES
Message Queues:
T ID KEY MODE OWNER GROUP SEGSZ
Shared Memory:
m 4608 0xdf00bc84 --rw-r----- oracle dba 708837376
m 4609 0xbd76b6f0 --rw-r----- oracle dba 541065216
T ID KEY MODE OWNER GROUP NSEMS
Semaphores:
s 65536 0xae97 --ra------- root root 129
s 1 0x100ae97 --ra------- root root 128
s 2 0x1 --ra-ra-ra- root root 1
s 3 0x73657276 --ra-ra-ra- root root 3
s 1245188 0xd8647e24 --ra-r----- oracle dba 504
s 1245189 0xbcdcaaa8 --ra-r----- oracle dba 304
這裡,sga建立了2個非連續的段。通常最好是讓整個sga處於一個單一的共享內存段,因為跟蹤一個以上的段以及在這些段之間來回切換都需要額外的開銷。可以在/etc/system文件中增加參數SHMMAX的設置,以增加一個單一的共享內存段的最大尺寸。
Copyright © Linux教程網 All Rights Reserved