[[262055]]
概述
工作中有時領導會說明天有業務,讓你去檢查下服務器,監控下系統的狀態是不是正常的,這時候我們需要查看哪些信息呢?下面從負載、進程、內存、網絡、網卡等幾個方面來介紹下怎么去監控>
1. w查看當前系統的負載
攻擊" src="https://s3.51cto.com/oss/201904/11/d188525e772459418613695a19f2c4af.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/d188525e772459418613695a19f2c4af.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/d188525e772459418613695a19f2c4af.jpeg" width="645" height="85">
參數說明:
第一行從左面開始顯示的信息依次為:時間,系統運行時間,登錄用戶數,平均負載。
第二行開始以及下面所有的行,告訴我們的信息是,當前登錄的都有哪些用戶,以及他們是從哪里登錄的等等。其實,在這些信息當中,我們最應該關注的應該是第一行中的 ‘load average:’ 后面的三個數值。
- 第一個數值表示1分鐘內系統的平均負載值;
- 第二個數值表示5分鐘內系統的平均負載值;
- 第三個數值表示15分鐘系統的平均負載值。
這個值的意義是,單位時間段內CPU活動進程數。
當然這個值越大就說明你的服務器壓力越大。一般情況下這個值只要不超過服務器的cpu數量就沒有關系。
2. vmstat 監控系統的狀態
攻擊" src="https://s5.51cto.com/oss/201904/11/4ce8de4337dfc1a8c2092af36ad636ba.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/4ce8de4337dfc1a8c2092af36ad636ba.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/4ce8de4337dfc1a8c2092af36ad636ba.jpeg" width="755" height="86">
上面講的 w 查看的是系統整體上的負載,通過看那個數值可以知道當前系統有沒有壓力,但是具體是哪里(CPU, 內存,磁盤等)有壓力就無法判斷了。通過 vmstat 就可以知道具體是哪里有壓力。vmstat命令打印的結果共分為6部分:procs, memory, swap, io, system, cpu. 請重點關注一下r b si so bi bo幾列。
2.1、procs 顯示進程相關信息
- r :表示運行和等待cpu時間片的進程數,如果長期大于服務器cpu的個數,則說明cpu不夠用了;
- b :表示等待資源的進程數,比如等待I/O, 內存等,這列的值如果長時間大于1,則需要關注一下了;
2.2、memory 內存相關信息
- swpd :表示切換到交換分區中的內存數量 ;
- free :當前空閑的內存數量;buff :緩沖大小,(即將寫入磁盤的);
- cache :緩存大小,(從磁盤中讀取的);
2.3、swap 內存交換情況
- si :由交換區寫入到內存的數據量;
- so :由內存寫入到交換區的數據量;
2.4、io 磁盤使用情況
- bi :從塊設備讀取數據的量(讀磁盤);
- bo: 從塊設備寫入數據的量(寫磁盤);
2.5、system 顯示采集間隔內發生的中斷次數
- in :表示在某一時間間隔中觀測到的每秒設備中斷數;
- cs :表示每秒產生的上下文切換次數;
2.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 5
攻擊" src="https://s5.51cto.com/oss/201904/11/da6bd2e16bb3d19806f62a847619ec63.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/da6bd2e16bb3d19806f62a847619ec63.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/da6bd2e16bb3d19806f62a847619ec63.jpeg" width="745" height="164">
說明:每隔一秒鐘打印一次狀態,共打印5次。
3. top 顯示進程所占系統資源
攻擊" src="https://s1.51cto.com/oss/201904/11/02ed9fab57efc705c72ed83c222a6f32.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/02ed9fab57efc705c72ed83c222a6f32.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/02ed9fab57efc705c72ed83c222a6f32.jpeg" width="640" height="537">
這個命令用于動態監控進程所占系統資源,每隔3秒變一次。這個命令的特點是把占用系統資源(CPU,內存,磁盤IO等)最高的進程放到最前面。top命令打印出了很多信息,包括系統負載(loadaverage)、進程數(Tasks)、cpu使用情況、內存使用情況以及交換分區使用情況。其實上面這些內容可以通過其他命令來查看,所以用top重點查看的還是下面的進程使用系統資源詳細狀況。這部分東西反映的東西還是比較多的。
PS:分享下我經常用的一個命令 top -bn1 它表示非動態打印系統資源使用情況,可以用在shell腳本中:
攻擊" src="https://s2.51cto.com/oss/201904/11/33d7fd474dd827c5a835bc353a63c00c.jpeg" _fcksavedurl="https://s2.51cto.com/oss/201904/11/33d7fd474dd827c5a835bc353a63c00c.jpeg" _fcksavedurl="https://s2.51cto.com/oss/201904/11/33d7fd474dd827c5a835bc353a63c00c.jpeg" width="640" height="576">
和 top 命令唯一的區別就是,它一次性全部把所有信息輸出出來而非動態顯示。
4. sar監控系統狀態
sar 命令很強大,它可以監控系統所有資源狀態,比如平均負載、網卡流量、磁盤狀態、內存使用等等。它不同于其他系統狀態監控工具的地方在于,它可以打印歷史信息,可以顯示當天從零點開始到當前時刻的系統狀態信息。如果你系統沒有安裝這個命令,請使用 yum install -y sysstat (或者apt-get install -y sysstat)命令安裝。初次使用sar命令會報錯,那是因為sar工具還沒有生成相應的數據庫文件(時時監控就不會了,因為不用去查詢那個庫文件)。它的數據庫文件在 “/var/log/sa/” 目錄下,默認保存一個月。因為這個命令太過復雜,所以我只介紹幾個。
攻擊" src="https://s5.51cto.com/oss/201904/11/3e0764675f9352d37e7d6f1889edbd9d.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/3e0764675f9352d37e7d6f1889edbd9d.jpeg" _fcksavedurl="https://s5.51cto.com/oss/201904/11/3e0764675f9352d37e7d6f1889edbd9d.jpeg" width="813" height="159">
4.1、查看網卡流量 sar -n DEV
攻擊" src="https://s1.51cto.com/oss/201904/11/13e08c77d28c702977a9ab3f97975c62.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/13e08c77d28c702977a9ab3f97975c62.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/13e08c77d28c702977a9ab3f97975c62.jpeg" width="640" height="218">
參數說明: IFACE這列表示設備名稱,rxpck/s 表示每秒進入收取的包的數量,txpck/s 表示每秒發送出去的包的數量,rxbyt/s 表示每秒收取的數據量(單位Byte),txbyt/s表示每秒發送的數據量。后面幾列不需要關注。
如果有一天你所管理的服務器丟包非常嚴重,那么你就應該看一看這個網卡流量是否異常了,如果rxpck/s 那一列的數值大于4000,或者rxbyt/s那列大于5,000,000則很有可能是被攻擊了,正常的服務器網卡流量不會高于這么多,除非是你自己在拷貝數據。
上面的命令是查看網卡流量歷史的,如何時時查看網卡流量呢?
攻擊" src="https://s1.51cto.com/oss/201904/11/9777fe8f561649085a2df498d32796fb.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/9777fe8f561649085a2df498d32796fb.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/9777fe8f561649085a2df498d32796fb.jpeg" width="640" height="424">
4.2、查看歷史負載 sar -q
攻擊" src="https://s4.51cto.com/oss/201904/11/b3a5113ef4a815c77f47e27ee64926f4.jpeg" _fcksavedurl="https://s4.51cto.com/oss/201904/11/b3a5113ef4a815c77f47e27ee64926f4.jpeg" _fcksavedurl="https://s4.51cto.com/oss/201904/11/b3a5113ef4a815c77f47e27ee64926f4.jpeg" width="794" height="158">
這個命令可以查看服務器在過去的某個時間的負載狀況。
大家重點還是用來看是不是丟包和網絡情況吧!
5. free查看內存使用狀況
攻擊" src="https://s3.51cto.com/oss/201904/11/c1e23994a01cb0faa88866a0eca443ce.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/c1e23994a01cb0faa88866a0eca443ce.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/c1e23994a01cb0faa88866a0eca443ce.jpeg" width="674" height="119">
只需要敲一個 free 然后回車就可以當前系統的總內存大小以及使用內存的情況,還可以加-m 或者-g選項分別以M或G為單位打印內存使用狀況:
攻擊" src="https://s3.51cto.com/oss/201904/11/7978780ffd08875a02eb8ce6a11460ba.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/7978780ffd08875a02eb8ce6a11460ba.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/7978780ffd08875a02eb8ce6a11460ba.jpeg" width="685" height="110">
我一般用free -m方式查看內存占用情況(兆為單位),而系統實際可用內存以及可用內存有如下幾個加減法:
- used=total-free 即 total=used+free
- 實際內存占用:used-buffers-cached 即 total-free-buffers-cached
- 實際可用內存:buffers+cached+free
6. ps 查看系統進程
監控進程的話這里介紹一個專門顯示系統進程的命令,主要看下是不是有異常進程:
攻擊" src="https://s4.51cto.com/oss/201904/11/4bae2d4d7dd5b37d4dcdda67a0546553.jpeg" _fcksavedurl="https://s4.51cto.com/oss/201904/11/4bae2d4d7dd5b37d4dcdda67a0546553.jpeg" _fcksavedurl="https://s4.51cto.com/oss/201904/11/4bae2d4d7dd5b37d4dcdda67a0546553.jpeg" width="640" height="527">
參數說明:
PID :進程的id,這個id很有用,在linux中內核管理進程就得靠pid來識別和管理某一個程,比如我想終止某一個進程,則用 ‘kill 進程的pid 有時并不能殺掉,則需要加一個-9選項了 kill -9 進程pid
STAT :表示進程的狀態,進程狀態分為以下幾種(不要求記住,但要了解)
D 不能中斷的進程(通常為IO)
R 正在運行中的進程
S 已經中斷的進程,通常情況下,系統中大部分進程都是這個狀態
T 已經停止或者暫停的進程,如果我們正在運行一個命令,比如說 sleep 10 如果我們按一下ctrl -z 讓他暫停,那么我們用ps查看就會顯示T這個狀態
W 這個好像是說,從內核2.6xx 以后,表示為沒有足夠的內存頁分配
X 已經死掉的進程(這個好像從來不會出現)
Z 僵尸進程,殺不掉,打不死的垃圾進程,占系統一小點資源,不過沒有關系。如果太多,就有問題了。一般不會出現。
< 高優先級進程
N 低優先級進程
L 在內存中被鎖了內存分頁
s 主進程
l 多線程進程
+ 代表在前臺運行的進程
這個ps命令是我在工作中用的非常多的命令之一,必須掌握的。關于ps命令的使用,小編經常會連同管道符一起使用,用來查看某個進程或者它的數量。
攻擊" src="https://s1.51cto.com/oss/201904/11/7892044de6fe20319631a5166a84f161.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/7892044de6fe20319631a5166a84f161.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/7892044de6fe20319631a5166a84f161.jpeg" width="836" height="89">
7. netstat 查看網絡狀況
攻擊" src="https://s2.51cto.com/oss/201904/11/d6c1425c067a0afbb989242f1a10fd41.jpeg" _fcksavedurl="https://s2.51cto.com/oss/201904/11/d6c1425c067a0afbb989242f1a10fd41.jpeg" _fcksavedurl="https://s2.51cto.com/oss/201904/11/d6c1425c067a0afbb989242f1a10fd41.jpeg" width="640" height="422">
netstat命令用來打印網絡連接狀況、系統所開放端口、路由表等信息。小編最常用的關于netstat的命令就是這個 netstat -nlp (打印當前系統啟動哪些端口)以及 netstat -an (打印網絡連接狀況)這兩個命令非常有用,請一定要記住。
攻擊" src="https://s1.51cto.com/oss/201904/11/e24d27e7f7a7731baca474eace45e5d1.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/e24d27e7f7a7731baca474eace45e5d1.jpeg" _fcksavedurl="https://s1.51cto.com/oss/201904/11/e24d27e7f7a7731baca474eace45e5d1.jpeg" width="640" height="522">
如果你所管理的服務器是一臺提供web服務(80端口)的服務器,那么你就可以使用 netstat -an |grep 80 查看當前連接web服務的有哪些IP了,再進一步可以netstat -an|grep 80|wc -l來查看大概有多少個連接。
8、抓包工具tcpdump
有時候,也許你會有這樣的需求,想監控一下某個網卡上都有哪些數據包,尤其是當你初步判定你的服務器上有流量攻擊。這時,使用抓包工具來抓一下數據包,就可以知道有哪些IP在攻擊你了。
攻擊" src="https://s3.51cto.com/oss/201904/11/4aaa04b6c5dd8a81059ece97b6d0b1ef.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/4aaa04b6c5dd8a81059ece97b6d0b1ef.jpeg" _fcksavedurl="https://s3.51cto.com/oss/201904/11/4aaa04b6c5dd8a81059ece97b6d0b1ef.jpeg" width="640" height="395">
如果沒有tcpdump 這個命令,需要用 yum install -y tcpdump 命令去安裝一下。上例中第三列和第四列顯示的信息為哪一個IP+port在連接哪一個IP+port,后面的信息是該數據包的相關信息,如果不懂也沒有關系,畢竟我們不是專門搞網絡的,而這里需要關注的只是第三列以及第四列。-i 選項后面跟設備名稱,如果你想抓eth1網卡的包,后面則要跟eth1.至于-nn選項的作用是讓第三列和第四列顯示成IP+端口號的形式,如果不加-nn則顯示的是主機名+服務名稱。