1. 程式人生 > >第13章 linux系統管理技巧(日常運維管理技巧)

第13章 linux系統管理技巧(日常運維管理技巧)

linux

第13章 linux系統管理技巧(日常運維管理技巧)

這一章的內容是核心,以後會用的幾率也是很大的,只要掌握必備的基礎知識,做初級系統管理員是不成問題的。

13.1監控系統的狀態

技術分享圖片

作為一個運維工程師、系統管理員,如果對自己的系統不了解的話,那怎麽排查問題呢?如果出現問題的話,肯定要查一下是什麽問題,哪裏的問題,系統的資源的耗費情況如何查看。

13.1.1使用w命令查看當前系統的負載

技術分享圖片

第一部分是系統時間,使用date命令也可以查看當前時間。

第二部分是系統運行時間

第三部分是登陸了幾個用戶,從下面可以看到,也可以看到登錄了哪個終端。如果是網絡登錄的話,終端是ps/0,ps/1這些;如果是系統登錄,會出現tty1,tty1- tty6是6個終端。from是可以看出從哪裏來的。

load average是關鍵的一段,這是它的系統負載,平時用的最多的就是這一部分了。它後面跟三個數字,分別是1分鐘、5分鐘、15分鐘內系統的平均負載值。第一個數字是單位時間內使用CPU的活動的進程有多少個,值越大說明服務器壓力越大。這個數字可以是零點幾,也可以是一百多,當前值是0,說明系統沒有負載,就沒有活動的進程,這說明服務器處於空閑的狀態。這對於Linux操作系統來講就比較浪費,它在空耗。那什麽值是理想狀態呢?看你有幾顆CPU,這個指的是邏輯CPU,而不是物理CPU。CPU有很多類型,Intel的,AMD的,都會有幾顆CPU,每顆上又會有很多邏輯CPU。查看CPU的命令如下:

cat /proc/cpuinfo,需要查看的數字是processor。如果是0,就代表有1顆;是1代表是2顆;如果有39,就代表有40顆。

技術分享圖片

技術分享圖片

這裏說的是邏輯CPU,而不是物理CPU。系統上的數字是0,代表有一個CPU,用w命令查到的第一個數字是1是最好的,不閑也沒什麽壓力。processor的最大數字是7,代表最多有8顆CPU,只要w命令查到的數字不大於8,就是可以的。LOGIN@是登陸的時間,IDLE是空閑了多長時間,PCPU是使用CPU的時間,WHAT是適用的命令,後面的可以不用管它。

還有一個命令是:uptime,它和w命令的結果一樣。

技術分享圖片

註:/proc/cpuinfo文件記錄了CPU的詳細信息。目前市場上多為2顆多核CPU,在Linux看來,它就是2*n個CPU(n為單顆物理CPU上有幾核)。如果n為4,則查看這個文件時會顯示8段信息,而最後一段信息的processor會顯示7,查看當前系統有幾個CPU,可以使用命令grep -c 'processor' /proc/cpuinfo。然後查看有幾顆物理CPU時,則需要查看關鍵字physical id。

13.1.2用vmstat命令查看監控系統的狀態

我們用w命令學會了查看負載情況,如果出現了負載值偏高的情況,如查詢的數字大於CPU核數了,說明CPU不夠用了。此時就需要思考CPU不夠用的原因,進程在幹什麽,都有哪些任務在使用CPU,你可能想去查看系統的瓶頸在哪裏。

技術分享圖片

可以查到CPU核數,內存,虛擬內存交換分區,io就是磁盤,系統的進程等等相關的東西。經常使用vmstat 1命令,每隔一秒輸出一次狀態,感覺差不多可以Ctrl C結束。

技術分享圖片

當然也可以vmstat 1 5,每隔一秒輸出一次狀態,輸出5次結束。

我們只需要關心如下幾列:

proc顯示進程的相關信息:

r,是run的簡寫,表示系統中有多少進程是屬於run的狀態。如果只有一個CPU,那某一個時間點只可能有一個進程在使用CPU,其他進程都在排隊。但它們那是循環的,每個進程都有機會使用CPU,都可以使用一會兒。不管是在使用還是在排隊,都是處於r的狀態。如果該數值長期大於服務器CPU的個數,則說明CPU資源不夠用了。

b,是block的縮寫,表示等待資源的進程數。b就是說進程被CPU以外的資源(硬盤或者網絡)給阻斷了,處於一個等待狀態,卡死了,b被堵死了。比如說網速慢,進程想要給你發一個數據包,假如網速很快,只需要1秒就發完了。但是現在速度慢,可能就花了10秒鐘,就是因為網速太慢,這個時候只能等網速了,這就是有多少進程在等待了。

memory顯示內存的相關信息

swpd,表示切換到交換分區中的內存數量,單位為KB。以前講分區時,有個swap交換分區,當內存不夠時,系統可以把內存中的一部分數據臨時放到swap空間裏面去。如果這個數字不變,那還好;如果這個數字在持續不斷的變化,那說明內存和交換分區在持續不斷的交換數據,這就說明內存不夠了。

free,buff,cache我們講內存時,再講這幾個單詞的含義。

swap顯示內存的交換情況

si、so和swapd相關,如果swapd頻繁變化,那他們也會相應發生變化。

si:表示有多少數據(塊)是由swap交換區進入內存中的,單位為KB。i表示in,進入內存的。o表示out,so表示有多少是從內存中出來的。

io顯示磁盤的情況

bi,bo是和磁盤有關系的。bi表示從塊設備讀取數據的量(讀磁盤),單位為KB。bo表示從塊設備寫入數據的量(寫磁盤),單位為KB。這個數據量很大,說明磁盤在頻繁的讀寫。io相比較磁盤來說,是很慢的。如果有那麽多的數據讀寫,肯定會造成並列增加,因為有很多進程在等待磁盤,這個是必然的。

CPU:顯示CPU的使用狀態

us:表示用戶級別的,比如說一個操作系統,肯定不可能只運行一個系統,還有跑一些服務。比如跑了一個網站,跑了一個MySQL,網站也好,MySQL也好,肯定會占一些資源,它就會體現us這一方面了,user占用的情況。us的數字是不會超過100的,因為一共就100%。us數字表示用戶下的資源占用CPU的百分比,us長期大於50就說明系統資源不夠了。

sy:顯示系統本身花費CPU的時間百分比。

id:表示空閑的百分比us+sy+id=100

wa:wait等待,表示I/O等待所占用CPU的時間百分比,這一列很大,說明CPU不夠用了。

通過vmstat命令可以判定出系統的瓶頸,如CPU不夠,內存不夠,還是磁盤io太大。

13.1.3用top命令顯示進程所占的系統資源

可以用top查看具體的進程。

技術分享圖片

第一行和w命令查到的是一樣的,總共有多少任務,有多少運行的任務,有多少正在sleeping的任務。僵屍進程,主進程被意外終止,子進程就沒人管了,就比較尷尬,沒人管,只能自生自滅。

風扇轉的歡,CPU很燙,說明CPU使用率很高。us長期在60%以上是對CPU沒有好處的。

下面是真正需要關心的東西,默認情況下,它會按CPU百分比從高到低排序,%MEM是內存,RES是物理內存大小,單位是KB千字節。

按大小字母M,會出現按內存使用大小排序,可以看到進程使用內存的具體大小。按大小字母P,換回CPU使用大小排序。按1的話,下面會列出

技術分享圖片

所有的CPU使用情況。按字母q會推出top命令。

使用top -c命令可以查看具體的進程命令,全局的路徑。

使用top -bn1命令,可以靜態的一次性的把所有的信息全部顯示出來。

技術分享圖片

技術分享圖片

技術分享圖片

這種用法適合在寫腳本的時候用。

可以關註一下PID,比如說要殺死一個命令,可以使用PID去殺。kill PID命令就可以殺死一個進程。

USER是哪個用戶運行的,PR、NI是關於優先級的,不需要過多關註。

註:使用top命令重點查看的還是下面的進程使用系統資源的詳細狀況。

13.1.4用sar命令監控系統狀態

技術分享圖片

sar是一個非常全面的分析系統狀態的命令,主要用來查看網卡的流量。它同樣可以查看你的CPU、內存、磁盤的狀態,它被稱為linux系統中的瑞士×××,也就是它的命令非常復雜和豐富。與其他系統狀態監控工具不同,它可以打印歷史信息,可以顯示當天從零點開始到當前時刻的系統狀態信息。

如果沒有這個命令,可以通過

yum install -y sysstat來安裝。

安裝完這個命令,首次使用這個命令會出現如下錯誤,那是因為sar工具還沒有生成相應的數據庫文件(無需時時監控,因為不用去查詢那個庫文件)。

技術分享圖片

如果sar不加參數的話,它會調用系統裏面保留的歷史文件,

技術分享圖片

這個目錄就是它生成的歷史文件所在的目錄,什麽叫歷史文件呢?因為sar有一個特性,每10分鐘會把系統的狀態過濾一遍,抓一邊保存在文件裏,這個文件就存在上面的目錄裏。

這個命令要想用,需要加上合適的選項和參數,如果要查看網卡的流量,需要使用如下命令:

技術分享圖片

這個用法和vmstat的用法類似,就是每隔1秒鐘顯示1次,總共顯示10次結束。

IFACE表示網卡的名字。

rxpck/s和txpck/s表示每秒鐘的包的數量,單位是個。rx是receive的簡寫,代表收取的,tx代表發送的。

rxkB/s這一列表示每秒收取的數據量(單位是KB)

txkB/s這一列表示每秒發送的數據量(後面幾列不需要關註,阿銘老師工作這麽多年,後面幾列都是不超過0的,也就是都是0)

一個網站如果遭到攻擊,它會發送很多的數據包給你的網站,意味著你要接受很多的數據包。量很大的話,意味著你的網卡承擔不了,最終導致網絡堵塞,你的網站不能打開。

那多少包合適呢?

有時候也要關註網卡是否跑滿,比如你的公司買了一個機櫃,分配了一些帶寬(比如說100M),100M不大,如果換算成常規理解的就是12.5M/s,也不是很大。如果有幾個人同時下載的話,很快就占滿了。如果rxpck/s的數據包有幾千是正常的,如果有幾萬的話,就不正常了。有幾萬,幾十萬的話,就是被攻擊了。如果被攻擊了,可以看rxpck/s的數據包有多少,這個不太確定,需要用抓包工具。

使用如下命令可以查看某一天的網卡流量:

sar -n DEV -f /var/log/sa/sarn,n代表具體的日期

技術分享圖片

數據在這個目錄下最多保留一個月

sar -q是查看服務器在過去的某個時間的負載情況

技術分享圖片

sar -b是查看磁盤的

技術分享圖片

下面的命令是看它的讀和寫

技術分享圖片

13.1.5用nload命令查看網卡流量

sar命令可以查看網卡流量,但是不夠直觀,使用nload命令更好。nload命令默認沒有安裝,需要使用如下命令安裝:

yum install -y epel-release;yum install -y nload

安裝完運行,就會出現動態的顯示網卡:

技術分享圖片

最上面一行是網卡名字以及IP地址,按向右箭頭可以查看其他網卡的網絡流量。輸出結果分為兩部分,Incoming為進入網卡的流量,Outgoing為網卡出去的流量,我們關註的當然是Curr那行的數據,其單位也可以動態自動調整,非常人性化。按q退出該界面。買的帶寬是出去的帶寬,如果有攻擊,進來的數字就會很大。

sar的補充內容:

技術分享圖片

這個目錄等到明天才會生成,sar28是可以通過cat來查看的,而sa28不能。

13.1.6監控io性能(這個是關於磁盤的,磁盤的狀態的兩個命令)

技術分享圖片

在日常運維過程中,除了CPU、內存外,磁盤的io也是非常重要的指標。有時候CPU、內存明明有剩余,但系統就是負載很高,我們用vmstat命令查看會發現b列或wa列比較大,那就說明系統磁盤有瓶頸。

我們在安裝sysstat包時,就會安裝iostat命令,它和sar屬於同一個包。

iostat的用法:

技術分享圖片

也可以

技術分享圖片

要講的是iostat -x命令,這裏有一個非常重要的指標。

技術分享圖片

%util首先是一個百分比,這一列表示io等待,總之就是磁盤使用有多少時間是占用你CPU的。CPU有一部分時間是給進程處理、計算的,也有一部分是等待io的,等待磁盤讀寫的。如果這個數字是50%以上,就說明磁盤太差了,它非常忙碌。如果硬盤有問題,即使CPU再快,再厲害,還是存在很大的瓶頸。如果磁盤嚴重不行,只能更換磁盤。

如果發現磁盤io很忙,很頻繁,如果想知道是哪一個進程在頻繁的讀寫,就可以使用Iotop命令。但發現沒有安裝,使用yum install -y iotop安裝。

它和top很像,是動態的,按排行來排。

技術分享圖片

我們看的是IO百分比

13.1.7用free命令查看內存使用情況

技術分享圖片

技術分享圖片

free命令可以查看當前系統的總內存大小以及使用內存的情況。CentOS 7系統的free命令顯示結果比CentOS 6更簡潔一些,但大體一致。

總共有三行,第一行是說明,第二行是內存的使用情況,第三行是交換分區的情況。

total:內存總大小

used:真正使用的實際內存大小

free:剩余物理內存大小(沒有被分配,純剩余)

shared:共享內存大小,這個不用關註

buff/cache:分配格buff/cache的內存總共有多大。

簡單區分一下buff(緩沖)和cache(緩存),數據的流向不一樣,所叫的名字也不一樣。buff/cache都是一部分內存,內存的作用就是緩解CPU和IO(如,磁盤)的的速度差距的。可以這樣理解:數據經過CPU計算,即將要寫入磁盤,這是用的內存為fuff;CPU要計算時,需要把數據從磁盤中讀出來,臨時先放到內存中,這部分內存就是cache。

avaliable:系統可使用內存有多大,它包含了free。linux系統為了讓應用跑得更快,系統會預先預留出一部分(buff/cache)給某些應用使用,雖然這部分內存並沒有真正使用,但也已經分配出去了。然而,當另外一個服務要使用更多內存時,是可以把這一部分預先分配的內存拿來用的。所以,

available=free+buff/cache

total=used+free+buff/cache

技術分享圖片

buffer和cache如此重要,系統會預先預留出一部分給buffer和cache。

使用free命令需要關註的是available這一項。

技術分享圖片

13.1.8使用ps查看系統進程

技術分享圖片

技術分享圖片

技術分享圖片

ps -elf和ps aux結果差不多

技術分享圖片

技術分享圖片

技術分享圖片

vmstat根本占用不了CPU多少時間,運行一下就sleep了。+說的是前臺進程,說的是終端上的進程。

Z表示僵屍進程,這種進程不多,也會有。如果多的話,就想辦法把它殺死。

<表示高優先級進程,優先級比較高,CPU先緊著給它用。

N表示低優先級進程,有Z相對,意味著它 不著急,晚一點用也沒關系。

|多線程進程,線程和進程是有區別的,線程有一個大的進程組成的,一個進程裏面有多個線程。概念回去查一查,進程和進程之間內存相互之間是不共享的,但線程之間使用了同一個進程的內存的區域。比如給進程分配了一個進程塊,這個進程本來對這個內存是有使用權限的,但它下面的線程不管有多少,它們共享這一塊內存,這就是線程的特點。多線程進程是說,進程有多個線程。

13.1.9用netstat命令查看網絡狀態

技術分享圖片

linux作為服務器的操作系統,服務器上會有很多服務,服務往往是和客戶端相互通信的,這就意味著它要有監聽端口,要有對外的通信端口。這個命令查看的就是TCP/IP通信的狀態。安裝一個MySQL,提供一個數據庫服務,就要有一個監聽端口,那麽何為監聽端口?正常情況下一臺機器是沒有任何的端口監聽的,這就意味著它沒有辦法和其他的機器通信。你要想讓其他人訪問你的網站,它就需要監聽一個端口,它把這個端口放開,打開一個孔。就像網卡上搞了一個小孔出來,然後遠程的設備想辦法和這個設備相連,數據就可以通過這個孔進入到網卡裏,進入到服務器裏,相互的進行通信。

端口查看命令:

技術分享圖片

技術分享圖片

l代表的是listen

sshd有兩個,一個是tcp,一個是tcp6,tcp6就是Ipv6(tcp和udp的資料自行查閱,這個不作為重點)

master 25端口,發郵件的端口

第二個命令:

技術分享圖片

這個命令會查看tcp/ip狀態

技術分享圖片

技術分享圖片

擴展知識:tcp/ip的三次握手,四次揮手,這個往往在面試的時候被問到

技術分享圖片

查看tcp/ip,需要關註一個值就是ESTABLISHED,如果這個值很大,說明你的系統很忙。並發連接數,就是同一時間有多少客戶端在連接你,我們可以那這個數字來說明並發連接數有多少。上面說明有45個客戶端和服務端進行通信,正在連接。這個是真正的通信,1000以內服務器都是能接受的。

技術分享圖片

ss -an 命令也能顯示tcp/ip的狀態

技術分享圖片

技術分享圖片

它有一個缺點,它不會顯示進程的名字,vmstst -lntp命令可以

技術分享圖片

13.1.10linux下的抓包工具

技術分享圖片

技術分享圖片


第13章 linux系統管理技巧(日常運維管理技巧)