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


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

  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有兩個參數:

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

一次采樣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參數說明和打印詳解:

進程相關

  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相關:

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

系統相關

  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則可以查看每個套接字的輸出輸出流量:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM