本博文主要講解Linux對(duì)硬件和軟件資源的監(jiān)控命令,包括:
- 查看cpu、內(nèi)存、上下文、vm狀態(tài)的
vmstat 、top(類似msgtask)和簡(jiǎn)單的free;
- IO相關(guān)信息
iostat -dx x y ;
- 查看網(wǎng)絡(luò)連接的
netstat 、網(wǎng)絡(luò)IO流量概覽的nload 和每個(gè)套接字IO流量的iftop
1. vmstat 和其他服務(wù)器資源管理命令
vmstat 是virtual memory status的縮寫,即虛擬內(nèi)存狀態(tài)??梢杂脕?lái)監(jiān)控CUP、虛擬內(nèi)存、IO等多個(gè)服務(wù)器指標(biāo)。
1.1 基本使用方式
vm有兩個(gè)參數(shù):
vmstat x y
- x、y為兩個(gè)整數(shù),前者表示采樣的時(shí)間間隔數(shù),后者表示采樣次數(shù)——省略一個(gè)參數(shù)表示一直采樣直至手動(dòng)停止,省略兩個(gè)參數(shù)表示查看機(jī)器啟動(dòng)以來(lái)的各指標(biāo)平均值(==第一行打印系統(tǒng)啟動(dòng)以來(lái)的平均值==)。
1.2 參數(shù)解釋
一次采樣vmstat :
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 1502252 18464 261972 0 0 70 11 158 391 4 0 95 0 0
使用man vmstat 可以查看vmstat參數(shù)說(shuō)明和打印詳解:
進(jìn)程相關(guān):
- r:可運(yùn)行的進(jìn)程數(shù)目,包括running、或者等待時(shí)間片的進(jìn)程;
- b:處于阻塞狀態(tài)(in uninterruptible sleep不可中斷休眠)的進(jìn)程數(shù),通常指等待IO,比如磁盤、網(wǎng)絡(luò)、輸入。
內(nèi)存相關(guān):
- swpd:使用的虛擬內(nèi)存容量,單位字節(jié);
- free:空閑的內(nèi)存容量;
- buff:作為緩沖buffers的內(nèi)存容量;
- cache:作為操作系統(tǒng)緩存cache的內(nèi)存容量;
- inact/active(-a):活躍和不活躍的內(nèi)存容量;
頁(yè)面調(diào)度相關(guān)swap(以下參數(shù)每秒不要超過(guò)10):
- si(swap in):每秒內(nèi)存從磁盤寫入的塊數(shù);
- so(swap out):每秒內(nèi)存寫出到磁盤的塊數(shù);
IO相關(guān):
- bi(block in):每秒從塊設(shè)備(磁盤和其他)獲取的塊數(shù);
- bo:每秒從塊設(shè)備獲取的塊數(shù)。
- 主存和磁盤以塊為單位傳送數(shù)據(jù)。
系統(tǒng)相關(guān):
- in:The number of interrupts per second, including the clock;
- cs(context swiches):每秒鐘上下文切換的次數(shù),cs次數(shù)太多是需要考慮調(diào)整程序線程數(shù)量;
cup相關(guān):五種操作對(duì)CPU時(shí)間的占比
- us(user time):cpu運(yùn)行非內(nèi)核代碼的時(shí)間;
- sy(system time):cpu運(yùn)行內(nèi)核代碼的時(shí)間;
- id(idle time):空閑時(shí)間,包括IO等待時(shí)間;
- wa:等待IO的時(shí)間;
- st:time stolen from a virtual machine.位置消耗時(shí)間。
1.3 分析思路(注意事項(xiàng)、未實(shí)戰(zhàn),純猜想:
以上重點(diǎn)參數(shù)已經(jīng)加粗:
如果b一直不為0可以考慮是否存在死鎖。
r表示使用和等待cup資源的進(jìn)程個(gè)數(shù),如果超過(guò)了cpu核數(shù)很多,就可能頻繁的引起上下文切換,表現(xiàn)為cs很大。
如果si、so很大、free很小,可能主存性能滿足不了現(xiàn)在工作,導(dǎo)致頻繁的磁盤IO甚至抖動(dòng)。
1.4 實(shí)例解析
1.procs ---------2.memory--------- ---3.swap-------4.io---- -5.system--------6.cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 1458020 22500 295004 0 0 1388 0 186 456 4 1 93 2 0
- 當(dāng)開啟爬蟲程序,需要從網(wǎng)絡(luò)讀取數(shù)據(jù),并寫入磁盤數(shù)據(jù)庫(kù)時(shí),各參數(shù)變化如下:
- 從網(wǎng)絡(luò)設(shè)備讀取數(shù)據(jù)時(shí)bi變大;
- 當(dāng)寫入數(shù)據(jù)到數(shù)據(jù)庫(kù)時(shí)bo變大;
- 開啟了十幾個(gè)線程因此需要頻繁的上下文切換;
- 用戶程序使用cup時(shí)間us經(jīng)常在90%以;
- 等待IO時(shí)間占比wa也變得不穩(wěn)定。
雖然沒(méi)有換入換出si/so的例子,但是應(yīng)當(dāng)知道這是vmstat 最終要的參數(shù),當(dāng)這兩個(gè)參數(shù)太大時(shí)應(yīng)該考慮優(yōu)化程序的實(shí)現(xiàn)和升級(jí)內(nèi)存容量。
1.5 cup密集型機(jī)器和IO密集型機(jī)器
cup密集型服務(wù)器vmstat 的us 輸出通常是一個(gè)很高的值,即cup花費(fèi)在非內(nèi)核代碼上的cup時(shí)間占比應(yīng)該很高。
cup密集型服務(wù)器上下文切換次數(shù)警告閾值是10萬(wàn)/s(具體情況看機(jī)器?)。
IO密集型服務(wù)器cup會(huì)花費(fèi)大量時(shí)間等待IO請(qǐng)求完成,則意味著很多任務(wù)處于非中斷休眠狀態(tài)(b 列),并且wa 數(shù)字也很高(等待IO時(shí)間)。
1.6 其他
top命令可以查看動(dòng)態(tài)刷新的各個(gè)進(jìn)程的cup和內(nèi)存使用率,以及執(zhí)行的命令和命令執(zhí)行的用戶和PID(進(jìn)程ID),界面類似于windows的任務(wù)管理器:
free命令,界面如下:
root@iZwz94idfw2r7h2hnepjZ:~# free
total used free shared buff/cache available
Mem: 2048212 587876 981736 5264 478600 1301432
Swap: 0 0 0
2.IO相關(guān)信息統(tǒng)計(jì)
2.1 iostat -dx a b
設(shè)備和分區(qū)的IO統(tǒng)計(jì)信息和cup統(tǒng)計(jì)信息。參數(shù)d x 分別表示顯示設(shè)備使用狀態(tài)和輸出更多信息。a和b分別表示采樣時(shí)間間隔和采樣次數(shù),同vmstat,第一次輸出也是系統(tǒng)啟動(dòng)以來(lái)的平均值:iostat -dx :爬蟲程序啟動(dòng)后的變化值:
root@iZwz94iww8uynepjZ:~# iostat -dx 3
Linux 4.4.0-63-generic (iZwz94iww8uynepjZ) 05/04/2018 _x86_64_ (1 CPU)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 0.00 0.00 0.33 0.00 5.33 32.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 7.33 0.00 1.33 0.00 37.33 56.00 0.00 0.00 0.00 0.00 0.00 0.00
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 4.00 0.00 10.00 0.00 57.33 11.47 0.01 0.80 0.00 0.80 0.80 0.80
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.00 28.52 0.00 87.25 0.00 1268.46 29.08 0.18 2.08 0.00 2.08 1.66 14.50
- 可以看到爬蟲程序啟動(dòng)后因?yàn)橐驍?shù)據(jù)庫(kù)寫入數(shù)據(jù),相關(guān)指數(shù)明顯變大;
r/s、w/s :每秒鐘發(fā)送到設(shè)備的讀寫請(qǐng)求;
avgqu-sz :在設(shè)備隊(duì)列中等待的請(qǐng)求數(shù)量;
await :磁盤排隊(duì)上花費(fèi)的毫秒數(shù),包括讀和寫;
svctm :服務(wù)請(qǐng)求花費(fèi)的毫秒數(shù),不包括排隊(duì)時(shí)間。
重要概念:請(qǐng)求服務(wù)并發(fā)數(shù):
concurrency=(r/s+w/s)*(svctm/1000)
表示在采樣周期內(nèi)每秒設(shè)備處理的請(qǐng)求數(shù)。
3. 網(wǎng)絡(luò)資源
3.1 netstat 連接詳情
Print network connections, routing tables, interface statistics, masquerade connections, and multicast membership
打印網(wǎng)絡(luò)連接、路由表、接口統(tǒng)計(jì)、偽裝連接和多播membership。
root@iZwz94i8afw2r7g62hnepjZ:~# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 localhost:32000 *:* LISTEN
tcp 0 0 *:http-alt *:* LISTEN
tcp 0 0 *:ssh *:* LISTEN
tcp 0 0 172.16.252.71:57346 211.151.27.128:http TIME_WAIT
tcp 0 0 172.16.252.71:57598 211.151.27.128:http TIME_WAIT
tcp 0 0 172.16.252.71:57306 211.151.27.128:http TIME_WAIT
tcp 0 0 172.16.252.71:39240 59.151.32.81:http TIME_WAIT
tcp 0 0 172.16.252.71:39274 59.151.32.81:http TIME_WAIT
tcp 0 0 172.16.252.71:39208 59.151.32.81:http TIME_WAIT
tcp 0 0 172.16.252.71:57480 211.151.27.128:http TIME_WAIT
tcp 0 0 172.16.252.71:39372 59.151.32.81:http TIME_WAIT
tcp 0 0 172.16.252.71:57450 211.151.27.128:http TIME_WAIT
tcp 0 0 172.16.252.71:57482 211.151.27.128:http TIME_WAIT
3.2 輸入輸出流量:nload 、iftop
nload 查看總體的輸入輸出流量,并且可以查看峰值、谷值和平均值,太簡(jiǎn)單,如圖開啟爬蟲:
iftop 則可以查看每個(gè)套接字的輸出輸出流量:
**以上提到的命令還可以用于數(shù)據(jù)庫(kù)查詢性能分析
|