1. 程式人生 > >七周一次課 監控系統狀態命令

七周一次課 監控系統狀態命令

監控系統狀態

監控系統狀態
作為一名運維工程師,我們一定要了解我們的系統,如果出現問題,我們要查看哪裏出了問題,有什麽樣的癥狀。
如果我們要查看系統資源耗費情況。需要怎樣查看呢?
[root@localhost ~]# w
20:44:47(當前時間) up 7 min,(啟動多長時間) 1 user,(幾個用戶登錄,他可以在第二行詳細的看出) load average: 0.00, 0.04, 0.05(重點看系統負載)
USER (用戶) TTY (登錄的終端) FROM(從哪裏登錄來) LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 (網絡遠程登錄就是pts/0,pts/1,終端登錄則是tty1...) 192.168.1.101 20:38 7.00s 0.08s 0.01s w

load average: 0.00, 0.04, 0.05(重點看系統負載)。平日看最多的就是這個,他有三組數字,代表1分鐘,5分鐘,15分鐘。這個時間段內系統的負載值是多少,他是一個數值。那這個數值是什麽含義呢?它和cup有關系,單位時間段內使用cup的活動的進程有多少個。
比如第一組數值0.00,他是表示1分鐘內使用這個cpu活動的進程有多少個,這個數值不一定是整數,它是一個平均值,可以使零點幾,也可以是一百多,那麽這個數值多少算是正常的呢?比如當前值是0,說明當前沒有活動,機器處在空閑狀態,這對於服務器或者系統來講非常浪費。

那麽什麽時候是最理想的狀態呢?這取決與你有幾顆cup,這裏的cup指的是邏輯cpu,而不是物理cup。每一刻物理cpu上又有許多邏輯cpu。

那麽我們這樣查看設備上有幾顆cpu呢?用命令[root@localhost ~]# cat /proc/cpuinfo
[root@localhost ~]# cat /proc/cpuinfo
processor : 0(這個數字如果是0,那代表它有一顆cpu,如果是1那就有2顆,如果是39,或者40,那代表他有40顆。這只代表它有多少邏輯cup,而不是邏輯cpu。)

從上面的信息可以看出,我們的虛擬機只有一顆cpu,那麽第一組的數字為1的時候,它是最理想的。所以我們重點關註第一組數字。

當我們的系統負載值過高時,我們就需要想想這是為什麽?我的進程在幹什麽?我的那些任務在使用cpu呢?我們需要進一步查看系統的瓶頸在哪裏。

我們只要輸入vmstat這條命令就可以查看我們的cpu。內存。虛擬磁盤,io磁盤,system系統進程等等相關的東西。
這條命令一般這樣用。
[root@localhost ~]# vmstat 1 5(1代表每一秒鐘顯示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 737072 2076 141924 0 0 19 3 54 58 0 0 100 0 0
0 0 0 737056 2076 141924 0 0 0 0 49 46 0 0 100 0 0
0 0 0 737056 2076 141924 0 0 0 0 52 50 0 0 100 0 0
0 0 0 737056 2076 141924 0 0 0 0 46 38 0 0 100 0 0
0 0 0 737056 2076 141924 0 0 0 0 50 44 0 0 100 0 0

我們只需要關註r、b,swpd、si、so、bi、bo、us、wa這些就夠了。
r:run。表示運行或者等待cpu時間片的進程。我們不要以為這些等待的進程沒有運行,某一時刻1個cpu只能有一個進程占用,其他進程只能排隊,而此時這些排隊的進程仍然處於運行狀態,如果這個數值長期大於服務器cpu的個數,則說明cpu資源不夠用了。就好像有一個電話亭有十個人打電話,有點人打的時間長,有的人打的時間短,為了公平,我們讓每個人都只打1分鐘,然後再去後面排隊,等到每個人都打一遍後,再輪到第一個人打1分鐘。

b:block。有多少個進程在等待。

swpd:如果數字不變,沒有關系。如果數字持續變化,則說明交換分區和內存在頻繁的交換數據,這說明我們的內存不夠了。

si,so:它與swpd有關,si,i表示in,它表示有多少kb的數據從swap進入到內存中。。so表示out。它表示有多少kb的數據從內存進入到swap中。這裏面我們有參照物,這就是內存,in表示進去的,out表示出來的。

bi、bo:bi表示從磁盤中出來,進入到內存中,也是讀的數據量是多少。bo,寫的數據量。這兩個數據如果很大,這說明磁盤正在頻繁讀寫,磁盤相對於內存和cpu會慢很多,如果很多的數據需要讀寫,這樣對造成b列增加,會有更多的進程在等待磁盤。

us:表示用戶級別的資源占用cup的百分比。這個數字不會超過100。如果這個長時間數字大於50,這說明系統的資源不夠了。

wa:等待cpu的百分比。如果這一列很大,則表示cpu不夠用了。

top:查看進程使用資源情況
top - 21:57:44 up 53 min, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 84 total(任務總和), 2 running(運行), 82 sleeping(休眠狀態), 0 stopped(停止), 0 zombie(僵屍進程,主進程意外停止,子進程還在)
%Cpu(s): 0.3 us(如果這項在60%以上,那麽我們就要註意了。它會使我們電腦壽命大幅減小), 0.3 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st(被偷走的cpu百分比,如果服務器做了虛擬化,他會有一些子機,這樣可能會偷走一部分cpu)

KiB Mem(物理內存) : 1012376 total(內存總和), 750428 free(內存剩余), 130844 used(使用多少), 131104 buff/cache(我們一般關註物理分區)
KiB Swap(交換分區): 2097148 total, 2097148 free, 0 used. 727448 avail Mem

*我們的系統負載值可以很高,但是我們的us很低,這是可以的。但是大部分情況下,我們的us很高,我們的系統負載也一定會很高,因為我們某一些進程,它占用cpu很高,他勢必會造成CPU很忙,cpu很忙,那其他的進程就會排隊,一排隊,那系統負載肯定會增高*

這是我們真正要關註的東西,默認情況下它是按cpu的百分比排序,使用cpu多的會排在前面。
%MEN是內存。
RES是物理內存大小,單位是kb
如果我們想按照內存占用大小來排序,就按M(大寫),如果想切回cpu排序,就按P(大寫)。

我們還可以按數字1,查看指定cpu。默認是看cpu的平均值,按1可以來回切換。
按字母-c可以查看具體的進程命令全局的路徑,按-bn1可以靜態顯示所有進程信息,這個可以在我們寫腳本的時候用,按字母q退出。

我們也可以關註一下pid,如果我們想結束某一個進程,只要輸入kill+pid 號,就可以結束它。

sar:全面分析系統狀態的命令。它被成為linux系統中的瑞士×××,它的功能非常復雜,如果系統中沒有這個命令,我們就需要用yum安裝sysstat這個包。
安裝完成後,我們運行這條命令
[root@localhost ~]# sar
無法打開 /var/log/sa/sa06: 沒有那個文件或目錄
發現它無法運行,這是因為如果sar命令不加具體的選項或者參數,他默認會去調用系統裏邊保留的一個歷史文件。
[root@localhost ~]# ls /var/log/sa
sa06
這個目錄就是sar生成的歷史文件所在的目錄,sar有一個特性,它每十分鐘就會把系統狀態過濾一遍,保存在文件裏,而這個文件就存在在這個目錄中。如果想用sar這條命令,則要加參數。

比如我們要產看網卡流量
[root@localhost ~]# sar -n DEV 1 3(它的用法和vmstat類似,1代表每隔1秒顯示1次,3代表顯示三次。)
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 2018年03月06日 _x8664 (1 CPU)

22時52分25秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
22時52分26秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
22時52分26秒 ens33 0.99 0.99 0.06 0.18 0.00 0.00 0.00

22時52分26秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
22時52分27秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
22時52分27秒 ens33 1.01 1.01 0.06 0.39 0.00 0.00 0.00

22時52分27秒 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
22時52分28秒 lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
22時52分28秒 ens33 2.02 1.01 1.25 0.39 0.00 0.00 0.00

平均時間: IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s
平均時間: lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均時間: ens33 1.34 1.00 0.45 0.32 0.00 0.00 0.00
它的輸出有兩個網卡,一個是lo,另一個是ens33,因為我的系統有兩個網卡。第一列是時間。第二列是網卡的名字,rxpck/s是每秒接收到的數據包,txpck/s是每秒發送出去的數據包。rxKB/s是接收到的數據量,txKB/s是發送的數據量,單位都是KB。我們著重看這幾個就可以了。

rxpck/s:如果有一些你不想要的東西向你的網卡發送很多的數據包,他發送很多數據包我們就要接受很多的數據包,數據包量很大的情況下我們的網卡承擔不了,最終導致網絡堵塞,網站不能打開。如果數據包是幾千個,是正常的,如果是上萬的,我們就要註意我們的網卡是否被攻擊了。

如果我們要查看相關歷史,加一個選項-f指定一個文件,/var/log/sa/saxx(xx表示文件日期的兩位數字),這個文件就是在這個目錄下的一個文件,因為我們剛剛裝上這個工具,所以只生成了當天的文件,這個文件名字是有規律的是哪一天,他就以那一天的數字作為結尾,這樣我們就可以查看歷史數據,這個目錄下的文件我們可以保留一個月。

我們也可以查看系統負載

[root@localhost ~]# sar -q 1 3
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 2018年03月06日 _x8664 (1 CPU)

23時20分26秒 runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked
23時20分27秒 1 101 0.00 0.01 0.05 0
23時20分28秒 1 101 0.00 0.01 0.05 0
23時20分29秒 1 101 0.00 0.01 0.05 0
平均時間: 1 101 0.00 0.01 0.05 0
查看系統負載我們經常是查看歷史數據
[root@localhost ~]# sar -q -f /var/log/sa/saxx

查看磁盤
[root@localhost ~]# sar -b 1 3
Linux 3.10.0-693.el7.x86_64 (localhost.localdomain) 2018年03月06日 _x8664 (1 CPU)

23時34分40秒 tps rtps wtps bread/s bwrtn/s
23時34分41秒 0.00 0.00 0.00 0.00 0.00
23時34分42秒 0.00 0.00 0.00 0.00 0.00
23時34分43秒 0.00 0.00 0.00 0.00 0.00
平均時間: 0.00 0.00 0.00 0.00 0.00
查看磁盤的歷史數據
[root@localhost ~]# sar -b -f /var/log/sa/saxx

有關sar的所有的歷史文件,我們都可以通過-f /var/log/sa/saxx來查看,只要在sar後面加上具體的參數,文件後面的具體日期就可以。
在/var/log/sa/這個目錄下不僅有saxx,還有一個sarxx,這個目錄不會當天生成,而是會在第二天生成,他們的區別在於sa是一個二進制文件,不能用cat查看,只能用sar -f去加載查看它,而sarxx是可以用cat查看的。

監控網卡流量的命令還有一個nload,但是系統中沒有這個命令,所以我們要安裝這個包,但是安裝前我們要先安裝epel-releaes這個包。

安裝完後我們直接運行這個命令,運行後就會出現一個動態的顯示網卡實時速度的頁面。

Device ens33 [192.168.1.105] (1/2):當前的網卡命和IP,按方向鍵可以切換出第二個網卡。

Incoming:

                                                                                                  Curr: 2.09 kBit/s(當前值)
                                                                                                  Avg: 4.87 kBit/s(平均值)
                                                                                                  Min: 944.00 Bit/s(最小值)
                                                                                                  Max: 49.74 kBit/s(最大值)
                                                                                                  Ttl: 8.06 MByte

Outgoing:

                                                                                                  Curr: 9.77 kBit/s(當前值)
                                                                                                  Avg: 9.16 kBit/s(平均值)
                                                                                                  Min: 3.52 kBit/s最小值)
                                                                                                  Max: 10.48 kBit/s(最大值)
                                                                                                  Ttl: 719.61 kByte

如果出現攻擊情況,進入的流量就會很大,那麽curr(當前值)就會很大,所以我們要多註意。

七周一次課 監控系統狀態命令