命令 w 、vmstat、top、sar、nload

Linux 平常運維管理技巧shell

 

監控系統狀態數據庫

 

 

一、使用 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的數量,就沒有太大問題。ui

‘/proc/cpuinfo’ 這個文件記錄了cpu的詳細信息。目前市面上的服務器一般都是2顆4核cpu,在 Linux 看來,它就是8個cpu。查看這個文件時則會顯示8段相似的信息,而最後一段信息中processor : 後面跟的是 ‘7’ 因此查看當前系統有幾個cpu,咱們可使用這個命令: grep -c 'processor' /proc/cpuinfo 而如何看幾顆物理cpu呢,須要查看關鍵字 「physical id」, 因爲個人虛擬機只有一個cpu因此並未顯示關於 「physical id」 的信息。3d

還有一個命令 uptime ,見下圖,

結果跟 w 命令的第一行一摸同樣,因此通常都使用 w 命令來查看。

 

二、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不夠用。

 

三、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排序,直接按下 shift + p,即大寫的 P ,就能夠了。見下圖,

還有一個選項,數字 1 ,按數字 ‘1’ 能夠列出各顆cpu的使用狀態,見下圖,

按下 1 以後,能夠注意到上圖紅色框框的內容,與上上圖顯示的內容仍是有差異的,如今顯示的是指定CPU的狀況。%CPU0是單核,因此只有一行。再按一次 1 ,就恢復到默認狀態,默認狀況下查看的是平均值。

按字母 q ,就能夠退出 top 查看的狀態。

還有一種用法是 top -c,輸入 top -c ,回車,見下圖,

上圖中,咱們能夠看到具體的命令的進程,看到的是所有的路徑名稱。單純使用命令 top 的 話,只能查看最後面進程的名字。

還有一種用法,輸入命令 top -bn1 ,回車,見下圖,

上圖把全部的進程,所有一次性列出,呈靜態顯示。此命令適合在寫shell腳本的時候應用。

這邊想要終止一個進程,使用命令 kill+PID號,回車,便可。

 

四、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 。這些文件最長能夠保留一個月,一個月後就會自動清空。

查看系統負載,見下圖,

查看系統磁盤,見下圖,

查看磁盤讀和寫,見下圖,

 

五、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             監控網卡流量

相關文章
相關標籤/搜索