常用資源監控命令

目錄

 

1、常見資源監控命令

1.1、vmstat

1.2、top

1.3、sar

1.4、netstat

1.5、ss

1.6、lsof

1.7、iostat


1、常見資源監控命令

1.1、vmstat

常用來查看整個機器的CPU、內存、IO。

$ vmstat 1 5 #第一個參數表示採樣間隔,第二個參數表示採樣次數(若不填,表示一直採樣)
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 8811888 9456764 81730248    0    0     1    10    0    0  2  2 96  0  0
 2  0      0 8813212 9456764 81730256    0    0     0    12 78605 85458  3  2 94  0  0
 3  0      0 8660600 9456764 81730264    0    0     0     8 65168 72699  5  4 91  0  0
 3  0      0 8661960 9456764 81730160    0    0     0   380 64622 72900  6  5 89  0  0
 4  0      0 8653380 9456764 81730176    0    0     0     0 64162 69613  5  3 91  0  0

各項指標的意義: 

r 表示運行隊列(就是說多少個進程真的分配到CPU),我測試的服務器目前CPU比較空閒,沒什麼程序在跑,當這個值超過了CPU數目,就會出現CPU瓶頸了。這個也和top的負載有關係,一般負載超過了3就比較高,超過了5就高,超過了10就不正常了,服務器的狀態很危險。top的負載類似每秒的運行隊列。如果運行隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。

b 表示阻塞的進程,這個不多說,進程阻塞,大家懂的。

swpd 虛擬內存已使用的大小,如果大於0,表示你的機器物理內存不足了,如果不是程序內存泄露的原因,那麼你該升級內存了或者把耗內存的任務遷移到其他機器。

free   空閒的物理內存的大小,我的機器內存總共8G,剩餘3415M。

buff   Linux/Unix系統是用來存儲,目錄裏面有什麼內容,權限等的緩存,我本機大概佔用300多M

cache cache直接用來記憶我們打開的文件,給文件做緩衝,我本機大概佔用300多M(這裏是Linux/Unix的聰明之處,把空閒的物理內存的一部分拿來做文件和目錄的緩存,是爲了提高 程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用。)

si  每秒從磁盤讀入虛擬內存的大小,如果這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。我的機器內存充裕,一切正常。

so  每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上。

bi  塊設備每秒接收的塊數量,這裏的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小是1024byte,我本機上沒什麼IO操作,所以一直是0,但是我曾在處理拷貝大量數據(2-3T)的機器上看過可以達到140000/s,磁盤寫入速度差不多140M每秒

bo 塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。

in 每秒CPU的中斷次數,包括時間中斷

cs 每秒上下文切換次數,例如我們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,我們一般做性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程可以由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,我們的代碼就會進入內核空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。

us 用戶CPU時間,我曾經在一個做加密解密很頻繁的服務器上,可以看到us接近100,r運行隊列達到80(機器在做壓力測試,性能表現不佳)。

sy 系統CPU時間,如果太高,表示系統調用時間長,例如是IO操作頻繁。

id  空閒 CPU時間,一般來說,id + us + sy = 100,一般我認爲id是空閒CPU使用率,us是用戶CPU使用率,sy是系統CPU使用率。

wt 等待IO CPU時間。

1.2、top

主要用來顯示系統資源使用情況(CPU、MEM、IO、系統負載、進程情況等)

# 查看pid爲8378,8377的進程的資源使用,採樣間隔2s,採樣5次
 top -c -p 8378,8377 -d 2 -n 5
#進入top後,可以鍵入常用的交互指令

h 顯示幫助畫面,給出一些簡短的命令總結說明
k 終止一個進程。
i 忽略閒置和僵死進程。這是一個開關式命令。
q 退出程序
r 重新安排一個進程的優先級別
S 切換到累計模式
s 改變兩次刷新之間的延遲時間(單位爲s
f或者F 從當前顯示中添加或者刪除項目
o或者O 改變顯示項目的順序
l 切換顯示平均負載和啓動時間信息
m 切換顯示內存信息
t 切換顯示進程和CPU狀態信息
c 切換顯示命令名稱和完整命令行
M 根據駐留內存大小進行排序
P 根據CPU使用百分比大小進行排序
T 根據時間/累計時間進行排序
W 將當前設置寫入~/.toprc文件中

1.3、sar

sar是一款全面的資源監控工具。

$ sar -h
用法: sar [ 選項 ] [ <時間間隔> [ <次數> ] ]
主選項和報告:
        -b      I/O 和傳輸速率信息狀況
        -B      分頁狀況
        -d      塊設備狀況
        -I { <中斷> | SUM | ALL | XALL }
                中斷信息狀況
        -m      電源管理信息狀況
        -n { <關鍵詞> [,...] | ALL }
                網絡統計信息
                關鍵詞可以是:
                DEV     網卡
                EDEV    網卡 (錯誤)
                NFS     NFS 客戶端
                NFSD    NFS 服務器
                SOCK    Sockets (套接字)        (v4)
                IP      IP 流   (v4)
                EIP     IP 流   (v4) (錯誤)
                ICMP    ICMP 流 (v4)
                EICMP   ICMP 流 (v4) (錯誤)
                TCP     TCP 流  (v4)
                ETCP    TCP 流  (v4) (錯誤)
                UDP     UDP 流  (v4)
                SOCK6   Sockets (套接字)        (v6)
                IP6     IP 流   (v6)
                EIP6    IP 流   (v6) (錯誤)
                ICMP6   ICMP 流 (v6)
                EICMP6  ICMP 流 (v6) (錯誤)
                UDP6    UDP 流  (v6)
        -q      隊列長度和平均負載
        -r      內存利用率
        -R      內存狀況
        -S      交換空間利用率
        -u [ ALL ]
                CPU 利用率
        -v      Kernel table 狀況
        -w      任務創建與系統轉換統計信息
        -W      交換信息
        -y      TTY 設備狀況

常見使用方法參考:https://www.cnblogs.com/weosuper/p/10647031.html

 

1.4、netstat

協議統計數據和當前TCP/IP網絡的連接相關信息。

$ netstat -h
usage: netstat [-veenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
       netstat [-vnNcaeol] [<Socket> ...]
       netstat { [-veenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay]

        -r, --route                display routing table
        -I, --interfaces=<Iface>   display interface table for <Iface>
        -i, --interfaces           display interface table
        -g, --groups               display multicast group memberships
        -s, --statistics           display networking statistics (like SNMP)
        -M, --masquerade           display masqueraded connections

        -v, --verbose              be verbose
        -n, --numeric              don't resolve names
        --numeric-hosts            don't resolve host names
        --numeric-ports            don't resolve port names
        --numeric-users            don't resolve user names
        -N, --symbolic             resolve hardware names
        -e, --extend               display other/more information
        -p, --programs             display PID/Program name for sockets
        -c, --continuous           continuous listing

        -l, --listening            display listening server sockets
        -a, --all, --listening     display all sockets (default: connected)
        -o, --timers               display timers
        -F, --fib                  display Forwarding Information Base (default)
        -C, --cache                display routing cache instead of FIB
        -T, --notrim               stop trimming long addresses
        -Z, --context              display SELinux security context for sockets

1.5、ss

Socket Statistics,用來獲取socket統計信息,它可以顯示和netstat類似的內容。但ss的優勢在於它能夠顯示更多更詳細的有關TCP和連接狀態的信息,而且比netstat更快速更高效。

ss -l 顯示本地打開的所有端口
ss -pl 顯示每個進程具體打開的socket
ss -t -a 顯示所有tcp socket
ss -u -a 顯示所有的UDP Socekt
ss -o state established '( dport = :smtp or sport = :smtp )' 顯示所有已建立的SMTP連接
ss -o state established '( dport = :http or sport = :http )' 顯示所有已建立的HTTP連接
ss -x src /tmp/.X11-unix/* 找出所有連接X服務器的進程
ss -s 列出當前socket詳細信息

 

1.6、lsof

list open file,列出當前系統打開文件的工具。常見使用方法如下:

1.列出所有打開的文件:

lsof

備註: 如果不加任何參數,就會打開所有被打開的文件,建議加上一下參數來具體定位

2. 查看誰正在使用某個文件

lsof   /filepath/file

3.遞歸查看某個目錄的文件信息

lsof +D /filepath/filepath2/

備註: 使用了+D,對應目錄下的所有子目錄和文件都會被列出

4. 比使用+D選項,遍歷查看某個目錄的所有文件信息 的方法

lsof | grep ‘/filepath/filepath2/’

5. 列出某個用戶打開的文件信息

lsof  -u username

備註: -u 選項,u其實是user的縮寫

6. 列出某個程序所打開的文件信息

lsof -c mysql

備註: -c 選項將會列出所有以mysql開頭的程序的文件,其實你也可以寫成lsof | grep mysql,但是第一種方法明顯比第二種方法要少打幾個字符了

7. 列出多個程序多打開的文件信息

lsof -c mysql -c apache

8. 列出某個用戶以及某個程序所打開的文件信息

lsof -u test -c mysql

9. 列出除了某個用戶外的被打開的文件信息

lsof   -u ^root

備註:^這個符號在用戶名之前,將會把是root用戶打開的進程不讓顯示

10. 通過某個進程號顯示該進行打開的文件

lsof -p 1

11. 列出多個進程號對應的文件信息

lsof -p 123,456,789

12. 列出除了某個進程號,其他進程號所打開的文件信息

lsof -p ^1

13 . 列出所有的網絡連接

lsof -i

14. 列出所有tcp 網絡連接信息

lsof  -i tcp

15. 列出所有udp網絡連接信息

lsof  -i udp

16. 列出誰在使用某個端口

lsof -i :3306

17. 列出誰在使用某個特定的udp端口

lsof -i udp:55

特定的tcp端口

lsof -i tcp:80

18. 列出某個用戶的所有活躍的網絡端口

lsof  -a -u test -i

19. 列出所有網絡文件系統

lsof -N

20.域名socket文件

lsof -u

21.某個用戶組所打開的文件信息

lsof -g 5555

22. 根據文件描述列出對應的文件信息

lsof -d description(like 2)

23. 根據文件描述範圍列出文件信息

lsof -d 2-3

 

1.7、iostat

監控系統設備的IO負載情況。(磁盤的讀寫和負載等情況)

# 查看磁盤sda的使用情況,每隔2s監控1次,共監控5次

$ iostat -d sda -x -k 2 5
Linux 2.6.32_1-17-0-0 (nj03-giano-dev02.nj03.baidu.com)         2019年11月22日  _x86_64_        (40 CPU)

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.20    11.33    0.49    8.05     6.25   179.62    43.51     0.06    7.14   2.14   1.83

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    13.50    0.00    7.50     0.00    78.00    20.80     0.04    4.73   4.47   3.35

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    12.50    0.00    8.00     0.00  1094.00   273.50     0.03    3.31   0.81   0.65

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00    13.50    0.00    7.00     0.00    82.00    23.43     0.04    5.43   5.43   3.80

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     8.00    0.00    6.00     0.00    56.00    18.67     0.01    0.92   0.67   0.40

各項指標意義:

tps:該設備每秒的傳輸次數(Indicate the number of transfers per second that were issued to the device.)。"一次傳輸"意思是"一次I/O請求"。多個邏輯請求可能會被合併爲"一次I/O請求"。"一次傳輸"請求的大小是未知的。

kB_read/s:每秒從設備(drive expressed)讀取的數據量;
kB_wrtn/s:每秒向設備(drive expressed)寫入的數據量;
kB_read:讀取的總數據量;
kB_wrtn:寫入的總數量數據量;這些單位都爲Kilobytes。
rrqm/s:每秒這個設備相關的讀取請求有多少被Merge了(當系統調用需要讀取數據的時候,VFS將請求發到各個FS,如果FS發現不同的讀取請求讀取的是相同Block的數據,FS會將這個請求合併Merge);wrqm/s:每秒這個設備相關的寫入請求有多少被Merge了。

rsec/s:每秒讀取的扇區數;
wsec/:每秒寫入的扇區數。
rKB/s:The number of read requests that were issued to the device per second;
wKB/s:The number of write requests that were issued to the device per second;
avgrq-sz 平均請求扇區的大小
avgqu-sz 是平均請求隊列的長度。毫無疑問,隊列長度越短越好。    
await:  每一個IO請求的處理的平均時間(單位是微秒毫秒)。這裏可以理解爲IO的響應時間,一般地系統IO響應時間應該低於5ms,如果大於10ms就比較大了。
         這個時間包括了隊列時間和服務時間,也就是說,一般情況下,await大於svctm,它們的差值越小,則說明隊列時間越短,反之差值越大,隊列時間越長,說明系統出了問題。
svctm    表示平均每次設備I/O操作的服務時間(以毫秒爲單位)。如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高於svctm的值,則表示I/O隊列等待太長,         系統上運行的應用程序將變慢。
%util: 在統計時間內所有處理IO時間,除以總共統計時間。例如,如果統計間隔1秒,該設備有0.8秒在處理IO,而0.2秒閒置,那麼該設備的%util = 0.8/1 = 80%,所以該參數暗示了設備的繁忙程度
。一般地,如果該參數是100%表示設備已經接近滿負荷運行了(當然如果是多磁盤,即使%util是100%,因爲磁盤的併發能力,所以磁盤使用未必就到了瓶頸)。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章