前言
由于工作中常常需要兼顧運維工作忧吟,涉及到對服務器資源的巡檢,所以會用到各種命令來檢查服務器各項指標是否正常,本篇文章將介紹巡檢過程中常用的命令裆装,也是給自己做一個總結,希望對各位讀者有所幫助倡缠。
一哨免、CPU篇
(一)top命令
top
命令其實算是一個比較綜合的查詢系統(tǒng)資源的命令,它提供了一個動態(tài)的昙沦、交互式的實時視圖琢唾。我們從下圖中可以看到,看板中大致可以分為兩個模塊盾饮,上面的模塊是系統(tǒng)的整體性能信息采桃,下面的模塊展示正在運行的進程的相關信息懒熙。
我們現(xiàn)在主要關心CPU參數,那么我們就先忽略其他內容普办,先聚焦于第三行的CPU信息工扎。
1、關于CPU 參數的解釋
我們可以看到衔蹲,圖中展示的cpu信息是:%Cpu(s): 5.6 us, 1.1 sy, 0.0 ni, 93.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
肢娘,這一串文本具體是什么意思呢?
我們可以結合下面的名詞解釋進行介紹踪危。
us
us是user
的縮寫蔬浙,表示用戶空間占用CPU百分比 。正常情況下贞远,我們部署在服務器上面的應用畴博、中間件以及執(zhí)行的腳本,都算是運行在用戶地址空間的進程蓝仲,這些程序如果不是處于idle狀態(tài)俱病,那么絕大多數的CPU時間都是運行在用戶態(tài)。
像5.6 us
表示的就是當前服務器用戶空間占用CPU的百分比為5.6%
袱结,其實很多應用都是屬于非CPU密集型類型的亮隙,所以CPU資源占用少是比較正常的。sy
sy是system
的縮寫垢夹,表示內核空間占用CPU百分比溢吻。所有進程要使用的系統(tǒng)資源都是由Linux內核處理的。當處于用戶態(tài)(用戶地址空間)的進程需要使用系統(tǒng)的資源時果元,比如需要分配一些內存促王、或是執(zhí)行IO操作、再或者是去創(chuàng)建一個子進程而晒,此時就會進入內核態(tài)(內核地址空間)運行蝇狼。事實上,決定進程在下一時刻是否會被運行的進程調度程序就運行在內核態(tài)倡怎。
一般來說迅耘,sy占比比較高的常見場景是系統(tǒng)中存在大量的IO操作(比如說文件拷貝,大批量的內存回收)或者是并發(fā)狀態(tài)下服務器處理請求ni
ni 是nice
的縮寫监署,表示用戶進程空間內改變過優(yōu)先級的進程占用CPU百分比颤专。Linux支持我們通過nice值調整進程用戶態(tài)的優(yōu)先級,這里顯示的ni表示調整過nice值的進程消耗掉的CPU時間钠乏。如果系統(tǒng)中沒有進程被調整過nice值血公,那么ni就顯示為0
(這個用得比較少,我們一般也不怎么關注)id
id 是idle
的縮寫缓熟,表示空閑CPU百分比累魔。我們可以利用這個值來獲取當前空閑的CPU以及反向推算CPU的使用率wa
wa是wait
的縮寫等待輸入輸出的CPU時間百分比。我們知道CPU的速度要遠比磁盤的IO速度快得多够滑,CPU在啟動一個磁盤讀寫操作后垦写,需要等待磁盤讀寫操作的結果。在磁盤讀寫操作完成前彰触,CPU只能處于空閑狀態(tài)梯投。Linux系統(tǒng)在計算系統(tǒng)平均負載時會把CPU等待IO操作的時間也計算進去,所以在我們看到系統(tǒng)平均負載過高時况毅,可以通過wa來判斷系統(tǒng)的性能瓶頸是不是過多的IO操作造成的分蓖。hi和si
hi和si分別是hard interrupt
和soft interrupt
,對應硬中斷和軟中斷占用百分比尔许。
硬中斷表示硬盤么鹤、網卡等硬件設備發(fā)送給CPU的中斷消息,當CPU收到中斷消息后需要進行適當的處理(消耗CPU時間)
軟中斷表示由程序發(fā)出的中斷味廊,最終也會執(zhí)行相應的處理程序(消耗CPU時間)
那么cpu使用率怎么看蒸甜?
可以兩種計算方式:100% - id%
或者 us% + sy% ni%
(后者的公式不是很嚴謹,沒算上等待時間和中斷時間余佛,但一般基本都夠用)柠新,通過任意一個式子基本上就可以得到當前服務器cpu資源的使用情況了
2、top命令常用的參數
選項 | 效果 |
---|---|
-d <秒數> | 指定 top 命令的刷新時間間隔辉巡,單位為秒(不指定的話默認3s刷新一次) |
-n <次數> | 指定 top 命令運行的次數后自動退出 |
-p <進程ID> | 僅顯示指定進程ID的信息 |
-u <用戶名> | 僅顯示指定用戶名的進程信息 |
-H | 在進程信息中顯示線程詳細信息 |
-i | 不顯示閑置(idle)或無用的進程 |
-b | 以批處理(batch)模式運行恨憎,直接將結果輸出到文件 |
-c | 顯示完整的命令行而不截斷 |
-S | 累計顯示進程的 CPU 使用時間 |
3、top的交互命令
top
命令和其他常見命令不同的地方在于郊楣,它在執(zhí)行過程中支持交互性的傳遞參數憔恳。下面我們就列舉幾個常用的交互性參數吧
命令 | 解釋 |
---|---|
1 | 多cpu情況下會展示每個cpu的使用情況,其實用得不算多 |
u + 用戶名 | 篩選出指定用戶的進程 |
E | 切換頂部的內存顯示單位痢甘,從KB/MB/GB/T/E等單位輪詢切換 |
e | 切換底部進程的內存顯示單位喇嘱,從KB/MB/GB/T/E等單位輪詢切換 |
c | 展示COMMAND 列中完整的命令行 |
注意事項
巡檢的時候由于服務器數量多,且top命令默認又是交互型的命令塞栅,所以我們一般不太會每臺服務器都登錄上去手動執(zhí)行top
命令后再手動按q
退出者铜。
我們一般會非交互式地執(zhí)行top
命令,并把結果輸出到一個結果文件中
top -n 1 >> a.txt
二放椰、內存篇
其實top
命令本身就已經包含了內存數據作烟,不過更多時候筆者還是習慣用free
命令來快速查看系統(tǒng)當前的內存使用情況
(一)free命令
free
命令是專門用來展示當前系統(tǒng)的內存和Swap交換區(qū)使用情況的命令,默認情況下結果以KB為單位進行展示
我們可以加一些選項來優(yōu)化輸出結果
結果以(人類)易讀模式展示
free -h
結果加上匯總列
free -t
三砾医、磁盤篇
(一)df
df命令是disk free
的縮寫拿撩,表示磁盤空間,是我們經常用來檢查磁盤使用空間的命令如蚜。df命令默認情況下也是以KB作為展示單位压恒,我們常常會使用df -h
命令來方便我們查看結果
了解Linux系統(tǒng)根路徑目錄的讀者可能已經發(fā)現(xiàn)了影暴,
df
命令的結果中并沒有/etc
、/proc
等根路徑目錄的存儲結果探赫,這是因為df
命令是以文件系統(tǒng)為單位進行展示的型宙,如果你想知道怎么判斷某個目錄是屬于哪個文件系統(tǒng),可以從下一小節(jié)的磁盤清理介紹中了解到更多細節(jié)伦吠。
(二)關于磁盤清理
當出現(xiàn)磁盤空間超過健康值的情況妆兑,我們一般會對磁盤容量進行分析,查看哪些文件以及目錄占用的磁盤空間比較高毛仪,再根據實際情況來進行轉移/壓縮或者刪除處理搁嗓。
假設現(xiàn)在我發(fā)現(xiàn)/dev/mapper/rootvg-lv_root
這個文件系統(tǒng)空間快滿了,希望刪除一些臨時文件來減輕磁盤壓力箱靴,那么這個時候我們會希望知道當前刪除的文件是否在這個文件系統(tǒng)上面腺逛。我們可以通過下面的命令來查看這個文件(夾)是屬于哪個文件系統(tǒng)的
df path
(三)du
du命令是disk usage
單詞的縮寫,表示磁盤使用情況刨晴。和df
命令不同屉来,df
命令是一個大而籠統(tǒng)的統(tǒng)計,有時候我們可能只是單純希望統(tǒng)計某個目錄下所有文件的總大小狈癞。這個時候du
命令會更適合我們茄靠,du命令默認情況下會展示當前目錄下所有子目錄的大小(注意蝶桶,這里的子目錄是已經包含子目錄內所有層級所有文件的大小))以及當前目錄的總大小慨绳,存儲單位為KB。但是du
命令默認不會展示目錄內非目錄類型的文件大小
下面是比較常見的選項
選項 | 解釋 |
---|---|
-a / -all | 詳細展示所有層級的子目錄和文件大小 |
-h或--human-readable | 以K真竖,M脐雪,G為單位,提高信息的可讀性 |
-s | 比較實用的命令恢共,一般來說我們更關注當前下一個層級目錄的總大小战秋。僅顯示指定目錄或文件的總大小,而不顯示其子目錄的大小 |
--exclude=<目錄或文件> | 略過指定的目錄或文件 |
--max-depth=<目錄層數> | 超過指定層數的目錄后讨韭,予以忽略 |
筆者一般會使用du -sh * | sort -rh | head -n 5
來快速查看當前目錄下最占空間的目錄或者文件