本文目錄: 10.1 /proc的意義及說明 10.2 查看進程信息 10.2.1 pstree命令 10.2.2 ps命令 10.2.3 ps後grep問題 10.2.4 top、htop以及iftop命令 10.3 vmstat命令 10.4 iostat命令 10.5 sar命令 10.5.1 ...
本文目錄:
寫在前面的話:本文是假設你已經有了進程、記憶體、cpu的理論基礎而寫的,文中涉及的各種狀態只給出了簡單說明而沒有解釋它們的意義,如果不懂這些理論性的東西,本文可能讓你看的直接想右上角叉叉。關於這些理論,可以閱讀我另一篇文章:http://www.cnblogs.com/f-ck-need-u/p/7058920.html
10.1 /proc的意義及說明
在Linux中查看各種狀態,其實質是查看內核中相關進程的數據結構中的項,通過工具將其格式化後輸出出來。但是內核的數據是絕對不能隨意查看或更改的,至少不能直接去修改。所以,在linux上出現了偽文件系統/proc,它是內核中各屬性或狀態向外提供訪問和修改的介面。
在/proc下,記錄了內核自己的數據信息,各進程獨立的數據信息,統計信息等。絕大多數文件都是只讀不可改的,即使對root也一樣,但/proc/sys除外,為何如此稍後解釋。
其中數字命名的目錄對應的是各進程的pid號,其內的文件記錄的都是該進程當前的數據信息,且都是只讀的,例如記錄命令信息的cmdline文件,進程使用哪顆cpu信息cpuset,進程占用記憶體的信息mem文件,進程IO信息io文件等其他各種信息文件。
[root@xuexi ~]# ls /proc/6982
attr clear_refs cpuset fd loginuid mounts numa_maps pagemap schedstat stat task
autogroup cmdline cwd fdinfo maps mountstats oom_adj personality sessionid statm wchan
auxv comm environ io mem net oom_score root smaps status
cgroup coredump_filter exe limits mountinfo ns oom_score_adj sched stack syscall
非數字命名的目錄各有用途,例如bus表示匯流排信息,driver表示驅動信息,fs表示文件系統特殊信息,net表示網路信息,tty表示跟物理終端有關的信息,最特殊的兩個是/proc/self和/proc/sys。
先說/proc/self目錄,它表示的是當前正在訪問/proc目錄的進程,因為/proc目錄是內核數據向外記錄的介面,所以當前訪問/proc目錄的進程表示的就是當前cpu正在執行的進程。如果執行cat /proc/self/cmdline,會發現其結果總是該命令本身,因為cat是手動敲入的命令,它是重要性進程,cpu會立即執行該命令。
再說/proc/sys這個目錄,該目錄是為管理員提供用來修改內核運行參數的,所以該目錄中的文件對root都是可寫的,例如管理數據包轉發功能的/proc/sys/net/ipv4/ip_forward文件。使用sysctl命令修改內核運行參數,其本質也是修改/proc/sys目錄中的文件。
10.2 查看進程信息
10.2.1 pstree命令
pstree命令將以樹的形式顯示進程信息,預設樹的分支是收攏的,也不顯示pid,要顯示這些信息需要指定對應的選項。
pstree [-a] [-c] [-h] [-l] [-p] [pid] 選項說明: -a:顯示進程的命令行 -c:展開分支 -h:高亮當前正在運行的進程及其父進程 -p:顯示進程pid,此選項也將展開分支 -l:允許顯示長格式進程。預設在顯示結果中超過132個字元時將截斷後面的字元。
例如:
10.2.2 ps命令
ps命令查看當前這一刻的進程信息,註意查看的是靜態進程信息,要查看隨時刷新的動態進程信息(如windows的進程管理器那樣,每秒刷新一次),使用top或htop命令。
這個命令的man文檔及其複雜,它同時支持3種類型的選項:GUN/BSD/UNIX,不同類型的選項其展示的信息格式不一樣。有些加了"-"的是SysV風格 的選項,不加"-"的是BSD選項,加不加"-"它們的意義是不一樣的,例如ps aux 和ps -aux是不同的。
其實只需掌握少數幾個選項即可,關鍵的是要瞭解ps顯示出的進程信息中每一列代表什麼屬性。
對於BSD風格的選項,只需知道一個用法ps aux足以,選項"a"表示列出依賴於終端的進程,選項"x"表示列出不依賴於終端的進程,所以兩者結合就表示列出所有進程,選項"u"表示展現的進程信息是以用戶為導向的,不用管它什麼是以用戶為導向,用ps aux就沒錯。
[root@server2 ~]# ps aux | tail
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1340 0.0 0.0 27176 588 ? Ss 20:30 0:00 /usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid
root 2266 0.0 0.1 93212 2140 ? Ss 20:30 0:00 /usr/libexec/postfix/master -w
postfix 2268 0.0 0.2 93384 3992 ? S 20:30 0:00 qmgr -l -t unix -u
postfix 2306 0.0 0.2 93316 3972 ? S 20:31 0:00 pickup -l -t unix -u
root 2307 0.0 0.2 145552 5528 ? Ss 20:31 0:00 sshd: root@pts/0
root 2309 0.0 0.0 0 0 ? S< 20:31 0:00 [kworker/3:1H]
root 2310 0.0 0.1 116568 3184 pts/0 Ss 20:31 0:00 -bash
root 2352 0.0 0.0 0 0 ? S< 20:31 0:00 [kworker/1:2H]
root 2355 0.0 0.0 139492 1632 pts/0 R+ 20:34 0:00 ps aux
root 2356 0.0 0.0 107928 676 pts/0 R+ 20:34 0:00 tail
各列的意義:
- %CPU:表示CPU占用百分比,註意,CPU的衡量方式是占用時間,所以百分比的計算方式是"進程占用cpu時間/cpu總時間",而不是cpu工作強度的狀態。
- %MEM:表示各進程所占物理記憶體百分比。
- VSZ:表示各進程占用的虛擬記憶體,也就是其線上性地址空間中實際占用的記憶體。單位為kb。
- RSS:表示各進程占用的實際物理記憶體。單位為Kb。
- TTY:表示屬於哪個終端的進程,"?"表示不依賴於終端的進程。
- STAT:進程所處的狀態。
- D:不可中斷睡眠
- R:運行中或等待隊列中的進程(running/runnable)
- S:可中斷睡眠
- T:進程處於stopped狀態
- Z:僵屍進程
對於BSD風格的ps選項,進程的狀態還會顯示下麵幾個組合信息。
-
- <:高優先順序進程
- N:低優先順序進程
- L:該進程在記憶體中有被鎖定的頁
- s:表示該進程是session leader,即進程組的首進程。例如管道左邊的進程,shell腳本中的shell進程
- l:表示該進程是一個線程
- +:表示是前段進程。前段進程一般來說都是依賴於終端的
- START:表示進程是何時被創建的
- TIME:表示各進程占用的CPU時間
- COMMAND:表示進程的命令行。如果是內核線程,則使用方括弧"[]"包圍
註意到了沒,ps aux沒有顯示出ppid。
另外常用的ps選項是ps -elf。其中"-e"表示輸出全部進程信息,"-f"和"-l"分別表示全格式輸出和長格式輸出。全格式會輸出cmd的全部參數。
[root@server2 ~]# ps -lf
F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
4 S postfix 2306 2266 0 80 0 - 23329 ep_pol 20:31 ? 00:00:00 pickup -l -t unix -u
4 S root 2307 1141 0 80 0 - 36388 poll_s 20:31 ? 00:00:00 sshd: root@pts/0
1 S root 2309 2 0 60 -20 - 0 worker 20:31 ? 00:00:00 [kworker/3:1H]
4 S root 2310 2307 0 80 0 - 29142 wait 20:31 pts/0 00:00:00 -bash
1 S root 2433 2 0 60 -20 - 0 worker 21:21 ? 00:00:00 [kworker/1:1H]
1 S root 2479 2 0 80 0 - 0 worker 21:25 ? 00:00:00 [kworker/1:0]
1 S root 2503 2 0 60 -20 - 0 worker 21:28 ? 00:00:00 [kworker/1:2H]
1 S root 2532 2 0 80 0 - 0 worker 21:30 ? 00:00:00 [kworker/1:1]
0 R root 2539 2310 0 80 0 - 34873 - 21:33 pts/0 00:00:00 ps -elf
0 S root 2540 2310 0 80 0 - 26982 pipe_w 21:33 pts/0 00:00:00 tail
各列的意義:
- F:程式的標誌位。0表示該程式只有普通許可權,4表示具有root超級管理員許可權,1表示該進程被創建的時候只進行了fork,沒有進行exec
- S:進程的狀態位,註意ps選項加了"-"的是非BSD風格選項,不會有"s""<""N""+"等的狀態標識位
- C:CPU的百分比,註意衡量方式是時間
- PRI:進程的優先順序,值越小,優先順序越高,越早被調度類選中運行
- NI:進程的NICE值,值為-20到19,影響優先順序的方式是PRI(new)=PRI(old)+NI,所以NI為負數的時候,越小將導致進程優先順序越高。
- :但要註意,NICE值只能影響非實時進程。
- ADDR:進程在物理記憶體中哪個地方。
- SZ:進程占用的實際物理記憶體
- WCHAN:若進程處於睡眠狀態,將顯示其對應內核線程的名稱,若進程為R狀態,則顯示"-"
10.2.3 ps後grep問題
在ps後加上grep篩選目標進程時,總會發現grep自身進程也被顯示出來。先解釋下為何會如此。
[root@xuexi ~]# ps aux | grep "crond"
root 1425 0.0 0.1 117332 1276 ? Ss Jun10 0:00 crond
root 8275 0.0 0.0 103256 856 pts/2 S+ 17:07 0:00 grep crond
通過管道將ps結果傳遞給grep時,管道協調了ps和grep兩進程間通信,但管道的本質是進程間數據傳遞。管道左邊的輸出數據放入記憶體,由管道右邊的進程讀取。假如劃分的記憶體不足以完全存放輸出數據,則管道左邊的進程將一直等待,直到管道右邊取出記憶體中一部分的數據以讓管道左邊的進程繼續輸出,而管道右邊的進程在管道左邊的進程啟動後也立刻啟動了,但是它一直處於等待狀態,等待接收管道傳遞來的數據(就像是平時執行命令時不給輸入文件將會一直等待輸入一樣)。
也就是說,管道左右兩端的進程是同時被創建的(不考慮父進程創建進程消耗的那點時間),但數據傳輸是有先後順序的,左邊先傳,右邊後收,所以可能會造成交叉的情況,左邊還沒執行完,就捕獲到了右邊的進程信息。在此處體現在ps還沒有統計完進程信息時,grep進程就已經被ps抓到了。
要將grep自身進程排除在結果之外,方法有二:
[root@xuexi ~]# ps aux | grep "crond" | grep -v "grep" # 使用-v將grep自己篩選掉
root 1425 0.0 0.1 117332 1276 ? Ss Jun10 0:00 crond
[root@xuexi ~]# ps aux | grep "cron[d]"
root 1425 0.0 0.1 117332 1276 ? Ss Jun10 0:00 crond
第二種方法能成功是因為grep進程被ps捕獲時的結果是"grep cron[d]",而使用cron[d]匹配時,它將只能匹配crond,所以"grep cron[d]"被篩選掉了。其實加上其他字元將更容易理解。
[root@xuexi ~]# ps aux | grep "cron[dabc]"
root 1425 0.0 0.1 117332 1276 ? Ss Jun10 0:00 crond
10.2.4 top、htop以及iftop命令
top命令查看動態進程狀態,預設每5秒刷新一次。
top選項說明:
-d:指定top刷新的時間間隔,預設是5 秒
-b:批處理模式,每次刷新分批顯示
-n:指定top刷新幾次就退出,可以配合-b使用
-p:指定監控的pid,指定方式為-pN1 -pN2 ...或-pN1, N2 [,...]
-u:指定要監控的用戶的進程,可以是uid也可以是user_name
在top動態模式下,按下各種鍵可以進行不同操作。使用"h"或"?"可以查看相關鍵的說明。
- 1 :(數字一)表示是否要在top的頭部顯示出多個cpu信息
- H :表示是否要顯示線程,預設不顯示
- c,S : c表示是否要展開進程的命令行,S表示顯示的cpu時間是否是累積模式,cpu累積模式下已死去的子進程cpu時間會累積到父進程中
- x,y :x高亮排序的列,y表示高亮running進程
- u :僅顯示指定用戶的進程
- n or #:設置要顯示最大的進程數量
- k :殺進程
- q :退出top
- P :以CPU 的使用資源排序顯示
- M :以Memory 的使用資源排序顯示
- N :以PID 來排序
以下是top的一次結果。
[root@xuexi ~]# top top - 17:43:44 up 1 day, 14:16, 2 users, load average: 0.10, 0.06, 0.01 Tasks: 156 total, 1 running, 155 sleeping, 0 stopped, 0 zombie Cpu0 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu1 : 0.0%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.3%si, 0.0%st Cpu2 : 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Cpu3 : 0.3%us, 0.0%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 1004348k total, 417928k used, 586420k free, 52340k buffers Swap: 2047996k total, 0k used, 2047996k free, 243800k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19364 1444 1132 S 0.0 0.1 0:00.96 init 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root RT 0 0 0 0 S 0.0 0.0 0:01.28 migration/0 4 root 20 0 0 0 0 S 0.0 0.0 0:00.59 ksoftirqd/0 5 root RT 0 0 0 0 S 0.0 0.0 0:00.00 stopper/0
- 第1行:和w命令的第一行一樣,也和uptime命令的結果一樣。此行各列分別表示"當前時間"、"已開機時長"、"當前線上用戶"、"前1、5、15分鐘平均負載率"。
- 第2行:分別表示總進程數、running狀態的進程數、睡眠狀態的進程數、停止狀態進程數、僵屍進程數。
- 第3-6行:每顆cpu的狀況。
- us = user mode
- sy = system mode
- ni = low priority user mode (nice)(用戶空間中低優先順序進程的cpu占用百分比)
- id = idle task
- wa = I/O waiting
- hi = servicing IRQs(不可中斷睡眠,hard interruptible)
- si = servicing soft IRQs(可中斷睡眠,soft interruptible)
- st = steal (time given to other DomU instances)(被偷走的cpu時間,一般被虛擬化軟體偷走)
- 第7-8行:從字面意思理解即可。
- VIRT:虛擬記憶體總量
- RES:實際記憶體總量
- SHR:共用記憶體量
- TIME:進程占用的cpu時間(若開啟了時間累積模式,則此處顯示的是累積時間)
top命令雖然非常強大,但是太老了。所以有了新生代的top命令htop。htop預設沒有安裝,需要手動安裝。
[root@xuexi ~]# yum -y install htop
htop可以使用滑鼠完成點擊選中。其他使用方法和top類似,使用h查看各按鍵意義即可。
iftop用於動態顯示網路介面的數據流量。用法也很簡單,按下h鍵即可獲取幫助。
10.3 vmstat命令
註意vmstat的第一次統計是自開機起的平均值信息,從第二次開始的統計才是指定刷新時間間隔內的資源利用信息,若不指定刷新時間間隔,則預設只顯示一次統計信息。
vmstat [-d] [delay [ count]]
vmstat [-f]
選項說明:
-f:統計自開機起fork的次數。包括fork、clone、vfork的次數。但不包括exec次數。
-d:顯示磁碟統計信息。
delay:刷新時間間隔,若不指定,則只統計一次信息就退出vmstat。
count:總共要統計的次數。
例如,只統計一次信息。
[root@xuexi ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 583692 52684 244200 0 0 5 3 4 5 0 0 100 0 0
其中各列的意義如下:
Procs
- r: 等待隊列中的進程數
- b: 不可中斷睡眠的進程數
Memory
- swpd: 虛擬記憶體使用總量
- free: 空閑記憶體量
- buff: buffer占用的記憶體量(buffer用於緩衝寫)
- cache: cache占用的記憶體量(cache用於緩存讀,諧音"快取",即為了加快取數據的速度)
Swap
- si:從磁碟載入到swap分區的數據流量,單位為"kb/s"
- so: 從swap分區寫到磁碟的數據流量,單位為"kb/s"
IO
- bi: 從塊設備接受到數據的速率,單位為blocks/s
- bo: 發送數據到塊設備的速率,單位為blocks/s
System
- in: 每秒中斷數,包括時鐘中斷數量
- cs: 每秒上下文切換次數
CPU:統計的是cpu時間百分比,具體信息和top的cpu統計列一樣
- us: Time spent running non-kernel code. (user time, including nice time)
- sy: Time spent running kernel code. (system time)
- id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.
- wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.
- st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.
還可以統計磁碟的IO信息。統計信息的結果很容易看懂,所以略過。
10.4 iostat命令
iostat主要統計磁碟或分區的整體使用情況。也可以輸出cpu信息,甚至是NFS網路文件系統的信息。同vmstat/sar一樣,第一次統計的都是自系統開機起的平均統計信息。
iostat [ -c ] [ -d ] [ -n -h ][ -k | -m ] [ -p [device][,...] ] [ interval [ count ] ]
選項說明:
-c:統計cpu信息
-d:統計磁碟信息
-n:統計NFS文件系統信息
-h:使NFS統計信息更人類可讀化
-k:指定以kb/s為單位顯示
-m:指定以mb/s為單位顯示
-p:指定要統計的設備名稱
-y:指定不顯示第一次統計信息,即不顯示自開機起的統計信息。
interval:刷新時間間隔
count:總統計次數
例如:
[root@xuexi ~]# iostat
Linux 2.6.32-504.el6.x86_64 (xuexi.longshuai.com) 06/11/2017 _x86_64_ (4 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
0.01 0.00 0.03 0.01 0.00 99.96
Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
sda 0.58 39.44 23.14 5557194 3259968
sdb 0.00 0.03 0.00 4256 0
各列的意義都很清晰,從字面即可理解。
- tps:每秒transfer速率(transfers per second),一次對物理設備的IO請求為一個transfer,但多個邏輯請求可能只組成一個transfer
- Blk_read/s:每秒讀取的block數量
- Blk_wrtn/s:每秒寫入的block總數
- Blk_read:讀取的總block數量
- Blk_wrtn:寫入的總block數量
10.5 sar命令
sar是一個非常強大的性能分析工具,它可以獲取系統的cpu/等待隊列/磁碟IO/記憶體/網路等性能指標。
功能多的必然結果是選項多,應用複雜,但只要知道一些常用的選項足以。
sar [options] [-o filename] [delay [count] ]
選項說明:
-A:顯示系統所有資源運行狀況
-b:顯示磁碟IO和tranfer速率信息,和iostat的信息一樣,是總體IO統計信息
-d:顯示磁碟在刷新時間間隔內的活躍情況,可以指定一個或多個設備,和-b不同的是,它顯示的是單設備的IO、transfer信息。
:建議配合-p使用顯示友好的設備名,否則預設顯示帶主次設備號的設備名
-P:顯示指定的某顆或某幾顆cpu的使用情況。指定方式為,-P 0,1,2,3或ALL。
-u:顯示每顆cpu整體平均使用情況。-u和-P的區別通過下麵的示例很容易區分。
-r:顯示記憶體在刷新時間間隔內的使用情況
-n:顯示網路運行狀態。後可接DEV/NFS/NFSD/FULL等多種參數。
:DEV表示顯示網路介面信息,NFS和NFSD分別表示顯示NFS客戶端服務端的流量信息,FULL表示顯示所有信息。
-q:顯示等待隊列大小
-o filename:將結果存入到文件中
delay:狀態刷新時間間隔
count:總共刷新幾次
10.5.1 統計cpu使用情況
[root@server2 ~]# sar -P ALL 1 2
Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU)
01:18:49 AM CPU %user %nice %system %iowait %steal %idle
01:18:50 AM all 0.00 0.00 0.25 0.00 0.00 99.75
01:18:50 AM 0 0.00 0.00 0.00 0.00 0.00 100.00
01:18:50 AM 1 0.00 0.00 0.00 0.00 0.00 100.00
01:18:50 AM 2 0.00 0.00 0.00 0.00 0.00 100.00
01:18:50 AM 3 0.00 0.00 0.00 0.00 0.00 100.00
01:18:50 AM CPU %user %nice %system %iowait %steal %idle
01:18:51 AM all 0.00 0.00 0.00 0.00 0.00 100.00
01:18:51 AM 0 0.00 0.00 0.00 0.00 0.00 100.00
01:18:51 AM 1 0.00 0.00 0.99 0.00 0.00 99.01
01:18:51 AM 2 0.00 0.00 0.00 0.00 0.00 100.00
01:18:51 AM 3 0.00 0.00 0.00 0.00 0.00 100.00
Average: CPU %user %nice %system %iowait %steal %idle
Average: all 0.00 0.00 0.12 0.00 0.00 99.88
Average: 0 0.00 0.00 0.00 0.00 0.00 100.00
Average: 1 0.00 0.00 0.50 0.00 0.00 99.50
Average: 2 0.00 0.00 0.00 0.00 0.00 100.00
Average: 3 0.00 0.00 0.00 0.00 0.00 100.00
各列的意義就不再贅述了,在前面幾個信息查看命令已經解釋過多次了。
在上面的例子中,統計了所有cpu(0,1,2,3共4顆)每秒的狀態信息,每秒還進行了一次彙總,即all,最後還對每顆cpu和彙總all計算了平均值。而我們真正需要關註的是最後的average部分的idle值,idle越小,說明cpu處於空閑時間越少,該顆或整體cpu使用率就越高。
或者直接對整體進行統計。如下:
[root@server2 ~]# sar -u 1 2
Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU)
01:18:37 AM CPU %user %nice %system %iowait %steal %idle
01:18:39 AM all 0.00 0.00 0.00 0.00 0.00 100.00
01:18:40 AM all 0.00 0.00 0.23 0.00 0.00 99.77
Average: all 0.00 0.00 0.12 0.00 0.00 99.88
10.5.2 統計記憶體使用情況
[root@server2 ~]# sar -r 1 2
Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU)
01:49:04 AM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty
01:49:05 AM 1315968 552720 29.58 932 319888 225164 5.75 282760 85740 0
01:49:06 AM 1315984 552704 29.58 932 319888 225164 5.75 282760 85740 0
Average: 1315976 552712 29.58 932 319888 225164 5.75 282760 85740 0
其中kbdirty表示記憶體中臟頁的大小,即記憶體中還有多少應該刷新到磁碟的數據。
10.5.3 統計網路流量
第一種方法是查看/proc/net/dev文件。
[root@server2 ~]# cat /proc/net/dev
Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
eth0: 209644 1834 0 0 0 0 0 0 981664 1679 0 0 0 0 0 0
lo: 340 4 0 0 0 0 0 0 340 4 0 0 0 0 0 0
關註列:receive和transmit分別表示收包和發包,關註每個網卡的bytes即可獲得網卡的情況。寫一個腳本計算每秒的差值即為網路流量。
或者使用sar -n命令統計網卡介面的數據。
[root@server2 ~]# sar -n DEV 1 2
Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU)
01:51:11 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
01:51:12 AM eth0 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:51:12 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
01:51:12 AM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
01:51:13 AM eth0 0.99 0.99 0.06 0.41 0.00 0.00 0.00
01:51:13 AM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
Average: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
Average: eth0 0.50 0.50 0.03 0.21 0.00 0.00 0.00
Average: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
各列的意義如下:
- rxpck/s:每秒收到的包數量
- txpck/s:每秒發送的包數量
- rxkB/s:每秒收到的數據,單位為kb
- txkB/s:每秒發送的數據,單位為kb
- rxcmp/s:每秒收到的壓縮後的包數量
- txcmp/s:每秒發送的壓縮後的包數量
- rxmcst/s:每秒收到的多播包數量
10.5.4 查看隊列情況
[root@server2 ~]# sar -q
Linux 3.10.0-327.el7.x86_64 (server2.longshuai.com) 06/20/2017 _x86_64_ (4 CPU)
12:00:01 AM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
12:10:01 AM 0 446 0.01 0.02 0.05 0
12:20:01 AM 0 445 0.02 0.03 0.05 0
12:30