linux下查看硬件資源和網絡資源的使用狀況

本博文主要講解Linux對硬件和軟件資源的監控命令,包括:ios

  1. 查看cpu、內存、上下文、vm狀態的vmstat、top(相似msgtask)和簡單的free;
  2. IO相關信息iostat -dx x y;
  3. 查看網絡鏈接的netstat、網絡IO流量概覽的nload和每一個套接字IO流量的iftop
1. vmstat和其餘服務器資源管理命令

vmstat是virtual memory status的縮寫,即虛擬內存狀態。能夠用來監控CUP、虛擬內存、IO等多個服務器指標。數據庫

1.1 基本使用方式

vm有兩個參數:vim

vmstat x y
  • x、y爲兩個整數,前者表示採樣的時間間隔數,後者表示採樣次數——省略一個參數表示一直採樣直至手動中止,省略兩個參數表示查看機器啓動以來的各指標平均值(第一行打印系統啓動以來的平均值)。
1.2 參數解釋

一次採樣vmstat:windows

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參數說明和打印詳解:緩存

進程相關服務器

  1. r:可運行的進程數目,包括running、或者等待時間片的進程;
  2. b:處於阻塞狀態(in uninterruptible sleep不可中斷休眠)的進程數,一般指等待IO,好比磁盤、網絡、輸入。

內存相關網絡

  1. swpd:使用的虛擬內存容量,單位字節;
  2. free:空閒的內存容量;
  3. buff:做爲緩衝buffers的內存容量;
  4. cache:做爲操做系統緩存cache的內存容量;
  5. inact/active(-a):活躍和不活躍的內存容量;

頁面調度相關swap(如下參數每秒不要超過10)併發

  1. si(swap in):每秒內存從磁盤寫入的塊數;
  2. so(swap out):每秒內存寫出到磁盤的塊數;

IO相關:ssh

  1. bi(block in):每秒從塊設備(磁盤和其餘)獲取的塊數;
  2. bo:每秒從塊設備獲取的塊數。
  3. 主存和磁盤以塊爲單位傳送數據。

系統相關tcp

  1. in:The number of interrupts per second, including the clock;
  2. cs(context swiches):每秒鐘上下文切換的次數,cs次數太可能是須要考慮調整程序線程數量

cup相關:五種操做對CPU時間的佔比

  1. us(user time):cpu運行非內核代碼的時間;
  2. sy(system time):cpu運行內核代碼的時間;
  3. id(idle time):空閒時間,包括IO等待時間;
  4. wa:等待IO的時間;
  5. st:time stolen from a virtual machine.位置消耗時間。
1.3 分析思路(注意事項、未實戰,純猜測:

以上重點參數已經加粗:

若是b一直不爲0能夠考慮是否存在死鎖。

r表示使用和等待cup資源的進程個數,若是超過了cpu核數不少,就可能頻繁的引發上下文切換,表現爲cs很大。

若是si、so很大、free很小,可能主存性能知足不了如今工做,致使頻繁的磁盤IO甚至抖動。

1.4 實例解析
  • 當上傳文件並放入到本地磁盤時,bo忽然很大:

  • 當使用vim將本地磁盤數據讀入到內存中時,bi忽然變大:

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
  • 當開啓爬蟲程序,須要從網絡讀取數據,並寫入磁盤數據庫時,各參數變化以下:
    1. 從網絡設備讀取數據時bi變大;
    2. 當寫入數據到數據庫時bo變大;
    3. 開啓了十幾個線程所以須要頻繁的上下文切換;
    4. 用戶程序使用cup時間us常常在90%以;
    5. 等待IO時間佔比wa也變得不穩定。

雖然沒有換入換出si/so的例子,可是應當知道這是vmstat最終要的參數,當這兩個參數太大時應該考慮優化程序的實現和升級內存容量。

1.5 cup密集型機器和IO密集型機器

cup密集型服務器vmstatus輸出一般是一個很高的值,即cup花費在非內核代碼上的cup時間佔比應該很高。

cup密集型服務器上下文切換次數警告閾值是10萬/s(具體狀況看機器?)。

IO密集型服務器cup會花費大量時間等待IO請求完成,則意味着不少任務處於非中斷休眠狀態(b列),而且wa數字也很高(等待IO時間)。

1.6 其餘

top命令能夠查看動態刷新的各個進程的cup和內存使用率,以及執行的命令和命令執行的用戶和PID(進程ID),界面相似於windows的任務管理器:

free命令,界面以下:

root@iZwz94idfw2r7h2hnepjZ:~# free
              total        used        free      shared  buff/cache   available
Mem:        2048212      587876      981736        5264      478600     1301432
Swap:             0           0           0

2.IO相關信息統計

2.1 iostat -dx a b

設備和分區的IO統計信息和cup統計信息。參數d x分別表示顯示設備使用狀態和輸出更多信息。a和b分別表示採樣時間間隔和採樣次數,同vmstat,第一次輸出也是系統啓動以來的平均值:iostat -dx:爬蟲程序啓動後的變化值:

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
  • 能夠看到爬蟲程序啓動後由於要向數據庫寫入數據,相關指數明顯變大;
  • r/s、w/s:每秒鐘發送到設備的讀寫請求;
  • avgqu-sz:在設備隊列中等待的請求數量;
  • await:磁盤排隊上花費的毫秒數,包括讀和寫;
  • svctm:服務請求花費的毫秒數,不包括排隊時間。

重要概念:請求服務併發數
concurrency=(r/s+w/s)*(svctm/1000)
表示在採樣週期內每秒設備處理的請求數。

3. 網絡資源
3.1 netstat鏈接詳情

Print network connections, routing tables, interface statistics, masquerade connections, and multicast membership

打印網絡鏈接、路由表、接口統計、假裝鏈接和多播membership。

  • a、t、u表示羅列出全部的tcp和udp鏈接:
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 輸入輸出流量:nloadiftop

nload查看整體的輸入輸出流量,而且能夠查看峯值、谷值和平均值,太簡單,如圖開啓爬蟲:

iftop則能夠查看每一個套接字的輸出輸出流量:

**以上提到的命令還能夠用於數據庫查詢性能分析

相關文章
相關標籤/搜索