1. 程式人生 > >命令 w 、vmstat、top、sar、nload

命令 w 、vmstat、top、sar、nload

w vmstat top sar nload

Linux 日常運維管理技巧

監控系統狀態

技術分享圖片

1、使用 w 查看系統負載

首先來使用 w 命令,見下圖,
技術分享圖片
上圖紅色框框的內容, 22:23:31 表示系統當前的時間,up 0 min 表示啟動多長的時間,剛剛啟動 0 分鐘。下面的 date 命令也可以查看當前的日期和時間。1 user 表示目前登錄一個用戶,登錄的用戶可以從下面的兩行看到具體信息,TTY 這邊,如果是網絡登錄的話,就會顯示成 pts/0 或 pts/1 。
上面是使用 PuTTY 登錄的終端,接著來看一下原始終端,也就是虛擬機登錄的信息,見下圖,
技術分享圖片
具體顯示的信息和上面差不多,但是這邊可以看到,有兩個用戶登錄 2 users ,分別是 tty1 和 pts/0 ,tty 之前講過,有6個級別。

load average:0.72,0.20,0.07 這條信息就比較關鍵,顯示的是系統平均負載。平時看的最多的就是這一部分,這三個數字分別表示1分鐘,5分鐘,15分鐘,這個時間段內系統的平均負載值是多少。這三個數值的含義跟CPU有關系,表示的意義是,單位時間段內CPU活動進程數。當然這個值越大就說明你的服務器壓力越大。一般情況下這個值只要不超過服務器的cpu數量就沒有關系,如果服務器cpu數量為8,那麽這個值若小於8,就說明當前服務器沒有壓力,否則就要關註一下了。這些數值為0也不好,說明服務器空閑著,太浪費了。那麽這些數值什麽時候才是最理想的狀態?這時候就要查看 CPU 數量,這邊的CPU數量指的是邏輯CPU,而不是物理CPU,使用命令 cat /proc/cpuinfo ,回車,見下圖,

技術分享圖片
這邊只需要關註上圖紅色框框的內容,0 表示只有一個邏輯CPU。load average 這邊的第一數值為 1 的時候,最為理想,既沒有空著,也沒有太多負載。其他兩個數值同理,一般最為關註的是第一個數值。只要數值不超過CPU的數量,就沒有太大問題。
‘/proc/cpuinfo’ 這個文件記錄了cpu的詳細信息。目前市面上的服務器通常都是2顆4核cpu,在 Linux 看來,它就是8個cpu。查看這個文件時則會顯示8段類似的信息,而最後一段信息中processor : 後面跟的是 ‘7’ 所以查看當前系統有幾個cpu,我們可以使用這個命令: grep -c ‘processor‘ /proc/cpuinfo 而如何看幾顆物理cpu呢,需要查看關鍵字 “physical id”, 由於我的虛擬機只有一個cpu所以並未顯示關於 “physical id” 的信息。
還有一個命令 uptime ,見下圖,
技術分享圖片
結果跟 w 命令的第一行一摸一樣,所以一般都使用 w 命令來查看。

2、vmstat 命令

上面講的 w 查看的是系統整體上的負載,通過看這些數值可以知道當前系統有沒有壓力,但是具體是哪裏(CPU, 內存,磁盤等)有壓力就無法判斷了。這時候就需要用到 vmstat 命令,可以知道具體是哪裏有壓力。vmstat命令打印的結果共分為6部分:procs, memory, swap, io, system, cpu,見下圖,
技術分享圖片
1)procs 顯示進程相關信息
r :表示運行和等待cpu時間片的進程數,如果長期大於服務器cpu的個數,則說明cpu不夠用了;
b :表示等待資源的進程數,比如等待I/O, 內存等,這列的值如果長時間大於1,則需要關註一下了;
2)memory 內存相關信息
swpd :表示切換到交換分區中的內存數量 ;
free :當前空閑的內存數量;
buff :緩沖大小,(即將寫入磁盤的);
cache :緩存大小,(從磁盤中讀取的);
3)swap 內存交換情況
si :由交換區寫入到內存的數據量;
so :由內存寫入到交換區的數據量;
4)io 磁盤使用情況
bi :從塊設備讀取數據的量(讀磁盤);
bo: 從塊設備寫入數據的量(寫磁盤);
5)system 顯示采集間隔內發生的中斷次數
in :表示在某一時間間隔中觀測到的每秒設備中斷數;
cs :表示每秒產生的上下文切換次數;
6)CPU 顯示cpu的使用狀態
us :顯示了用戶下所花費 cpu 時間的百分比;
sy :顯示系統花費cpu時間百分比;
id :表示cpu處於空閑狀態的時間百分比;
wa :表示I/O等待所占用cpu時間百分比;
st :表示被偷走的cpu所占百分比(一般都為0,不用關註);

以上所介紹的各個參數中,我們經常會關註r列,b列,和wa列,三列代表的含義在上邊說得已經很清楚。IO部分的bi以及bo也是要經常參考的對象。如果磁盤io壓力很大時,這兩列的數值會比較高。另外當si, so兩列的數值比較高,並且在不斷變化時,說明內存不夠了,內存中的數據頻繁交換到交換分區中,這往往對系統性能影響極大。
我們使用 vmstat 查看系統狀態的時候,通常都是使用下圖的形式來看的:
技術分享圖片
vmstat 1 顯示的是,每隔1秒打印一次狀態,一直打印,直到我們按 Ctrl + c 結束。還有另外一種方式,見下圖,
技術分享圖片
vmstat 1 5 表示每隔一秒鐘打印一次狀態,共打印5次,然後命令自動結束。這邊顯示的結果 裏面,我們一般只需關註這幾列:r、b、swpd、si、so、bi、bo、us、wa。r(run)表示有多少個進程處於運行狀態。b(block)表示進程被CPU以外的資源(比如硬盤、網絡)給阻斷了,處於一個等待的狀態。swpd 交換分區,當內存不夠的時候,系統會把內存裏的一部分數據釋放一些出來,臨時放到 swpd 空間裏面,當這一列的數據沒有變化的時候,說明沒有什麽問題,如果這一列的數據一直在跳動的話,就說明內存不夠。si 和 so 這兩列數據和 swpd 是有關系的,他們的單位都是KB,si 是由swpd寫入到內存的數據量,so 是由內存寫入到swpd的數據量,i 是in,o 是out。bi 和 bo 這兩列數據和磁盤是有關系的,bi 是從塊設備讀取數據的量(讀磁盤),bo 是從塊設備寫入數據的量(寫磁盤),這兩個數據很大的話,說明磁盤在頻繁的讀和寫。bi 和 bo 的數據很大,必然造成 b 列的數據增加。us 表示用戶級別的,顯示了用戶下所花費 cpu 時間的百分比,這個數據是不會超過100的,如果這個數字長時間大於 50 ,也是說明資源不夠。us + sy(系統花費CPU百分比) + id(空閑百分比) = 100 。wa(wait 等待)與 b 類似,表示等待 CPU 的百分比,即由多少個進程在等待CPU,如果這個數很大,說明CPU不夠用。

3、top 命令

查看進程使用資源情況。這個命令用於動態監控進程所占系統資源,每隔3秒變一次。它的特點是把占用系統資源(CPU,內存,磁盤IO等)最高的進程放到最前面。top命令打印出了很多信息,包括系統負載(loadaverage)、進程數(Tasks)、cpu使用情況、內存使用情況以及交換分區使用情況。其實上面這些內容可以通過其他命令來查看,所以用top重點查看的還是下面的進程使用系統資源詳細狀況。這部分東西反映的東西還是比較多的,不過需要你關註的也就是幾項:%CPU, %MEM, COMMAND 。RES 這一項為進程所占內存大小,而 %MEM 為使用內存百分比。在 top 狀態下,按 “shift + m”, 可以按照內存使用大小排序。按數字 ‘1’ 可以列出各顆cpu的使用狀態。
輸入 top ,回車,見下圖,
技術分享圖片
上圖是動態顯示的,每隔3秒變一次。第1行顯示的內容和命令 w 是一樣的。第2行顯示的是進程的狀態,92個任務,1個正在運行的任務,91個休眠任務,0個停止任務,0個僵屍任務。僵屍進程的意思就是主進程被意外中止,一些子進程還留著,沒有人管。第3行是CPU百分比,也可以驗證 us + sy + id = 100 這個公式,ni 、hi 和 si 這三個不用理解,st 表示被偷走的CPU百分比。這邊比較關註的是 us ,如果長時間數值在60%以上,太耗費CPU,所以平時需要多關註這個數值。系統負載值可以很高,而 us 可以很低。下面2行是內存使用情況,第4行是物理內存,第5行是交換分區,通常情況下會比較關註第4行,交換分區。總的內存是999936,空閑的是696656,使用中是125512,關於 buff/cache 後面再說。
接著往下看,動態呈現的這些內容才是我們要關註的東西,默認是按CPU百分比(%CPU)排序,%CPU數值大的排在前面。%MEM為使用內存百分比,RES是物理內存大小,單位是K。假如我現在想讓排序按%MEM來排序,要怎麽操作呢?按下 ctrl + m ,也就是大寫的M,見下圖,
技術分享圖片
現在就是按%MEN的大小來排序,排在第一位的是 firewalld。現在想要換回默認的%CPU排序,直接按下 ctrl + p,即大寫的 P ,就可以了。見下圖,
技術分享圖片
還有一個選項,數字 1 ,按數字 ‘1’ 可以列出各顆cpu的使用狀態,見下圖,
技術分享圖片
按下 1 之後,可以註意到上圖紅色框框的內容,與上上圖顯示的內容還是有差別的,現在顯示的是指定CPU的情況。%CPU0是單核,所以只有一行。再按一次 1 ,就恢復到默認狀態,默認情況下查看的是平均值。
按字母 q ,就可以退出 top 查看的狀態。
還有一種用法是 top -c,輸入 top -c ,回車,見下圖,
技術分享圖片
上圖中,我們可以看到具體的命令的進程,看到的是全部的路徑名稱。單純使用命令 top 的 話,只能查看最後面進程的名字。
還有一種用法,輸入命令 top -bn1 ,回車,見下圖,
技術分享圖片
技術分享圖片
技術分享圖片
上圖把所有的進程,全部一次性列出,呈靜態顯示。此命令適合在寫shell腳本的時候應用。
這邊想要終止一個進程,使用命令 kill+PID號,回車,即可。

4、sar 命令

技術分享圖片

sar 命令很強大,它可以監控系統所有資源狀態,比如平均負載、網卡流量、磁盤狀態、內存使用等等。它不同於其他系統狀態監控工具的地方在於,它可以打印歷史信息,可以顯示當天從零點開始到當前時刻的系統狀態信息。如果你系統沒有安裝這個命令,請使用 yum install -y sysstat 命令安裝。初次使用sar命令會報錯,那是因為sar工具還沒有生成相應的數據庫文件(時時監控就不會了,因為不用去查詢那個庫文件)。它的數據庫文件在 “/var/log/sa/” 目錄下,默認保存一個月。因為這個命令太過復雜,所以這邊只介紹幾個。

安裝 sar 命令,見下圖,
技術分享圖片
技術分享圖片
安裝完畢後運行 sar ,見下圖,
技術分享圖片
因為剛剛安裝了 sar 命令,所有執行命令 ls /var/log/sa ,沒有結果,需要等十分鐘才會生成文件,因為每隔十分鐘會生成一個文件。所以需要給 sar 命令加上具體的選項和參數,見下圖,
技術分享圖片
1 表示每隔 1秒,10 表示顯示10次。上圖紅色框框顯示有兩個網卡,分別是 lo 和 ens33 。第1列是時間,第2列是網卡的名字(IFACE)表示設備名稱,第3列 rxpck/s 表示每秒進入收取的包的數量,第4列 txpck/s 表示每秒發送出去的包的數量,第5列 rxkb/s 表示每秒收取的數據量(單位Byte),第6列 txkb/s表示每秒發送的數據量。後面3列不需要關註,始終都是0.00。
如果有一天你所管理的服務器丟包非常嚴重,那麽你就應該看一看這個網卡流量是否異常了,如果rxpck/s 那一列的數值大於4000,或者rxkb/s那列大於5,000,000則很有可能是被攻擊了,正常的服務器網卡流量不會高於這麽多,除非是你自己在拷貝數據。
接著來查看 sar 命令,見下圖,
技術分享圖片
命令 sar 的結果,正常只會出現第一行,出現上圖情況,是因為我重啟過虛擬機。然後查看 ls /var/log/sa ,就有出現了文件 sa20 。這個 sa 文件後面是以當天日期命名的,今天是2018年3月20日,所有文件名是 sa20 。
另外也可以查看某一天的網卡流量歷史,使用-f選項,後面跟文件名,如果系統格式 Redhat 或者 CentOS 那麽 sar 的庫文件一定是在 /var/log/sa/ 目錄下的。見下圖,
技術分享圖片
上圖命令,可以查看歷史數據的,例如昨天的 sa19 ,前天的 sa18 。這些文件最長可以保留一個月,一個月後就會自動清空。
查看系統負載,見下圖,
技術分享圖片
查看系統磁盤,見下圖,
技術分享圖片
查看磁盤讀和寫,見下圖,
技術分享圖片

5、nload 命令

監控網卡流量,這個命令默認是沒有安裝的,具體操作見下圖,
技術分享圖片
技術分享圖片
技術分享圖片
安裝 nload 之前,需要先安裝 epel-release ,安裝完畢之後,接著往下操作,直接輸入命令 nload ,回車,進入下圖,
技術分享圖片
上圖顯示的信息是動態的,這只是其中一個網卡 ens33 ,按向右的方向鍵 → ,即可查看另一個網卡 lo 的信息,見下圖,
技術分享圖片
按向左的方向鍵 ← ,又可以回到上一個網卡 ens33 ,可以來回切換。按字母 q 就可以退出這個界面。

總結:
w 查看系統負載
date 查看當前的日期和時間
vmstat n 每隔n秒打印一次狀態
vmstat n m 每隔n秒打印一次狀態,一共打印m次
top 查看進程使用情況
大寫的M %MEN內存排序
大寫的P %CPU排序。
數字 1 查看指定每個CPU的使用狀態
字母 q 退出 top 查看狀態
top -c 查看具體的命令的進程
top -bn1 靜態的顯示全部進程,適合在寫shell腳本的時候應用
sar -n DEV 查看網卡流量歷史的
sar -q 查看系統負載
sar -b 查看系統磁盤
nload 監控網卡流量

命令 w 、vmstat、top、sar、nload