引言
Linux以其穩定性,越來越多地被用作服務器的操作系統(當然,有人會較真地說一句:Linux只是操作系統內核:)。但使用了Linux作為底層的操作系統,是否我們就能保證我們的服務做到7*24地穩定呢?非也,要知道業務功能是由系統上跑的程序實現的,要實現業務功能的穩定性,選擇Linux只是邁出的第一步,我們更多地工作是不讓業務程序成為穩定性的短板。
當我們的服務器出現問題的時候,外在的表現是業務功能不能正常提供,內在的原因,從程序的角度看,可能是業務程序的問題(程序自身的bug),也可能是服務器上人為的誤操作(不當地執行腳本或命令);從系統資源的角度看,可能是CPU搶占、內存泄漏、磁盤IO讀寫異常、網絡異常等。出現問題后,面對各種各樣可能的原因,我們應如何著手進行分析?我們有什么工具進行問題定位嗎?
atop簡介
本文要介紹的atop就是一款用于監控Linux系統資源與進程的工具,它以一定的頻率記錄系統的運行狀態,所采集的數據包含系統資源(CPU、內存、磁盤和網絡)使用情況和進程運行情況,并能以日志文件的方式保存在磁盤中,服務器出現問題后,我們可獲取相應的atop日志文件進行分析。atop是一款開源軟件,我們可以從這里獲得其源碼和rpm安裝包。
atop使用方法
在安裝atop之后,我們在命令行下敲入”atop"命令即可看到系統當前的運行情況:

系統資源監控字段含義
上圖中列出了不少字段以及數值,各字段的含義是什么?我們應該怎么看?以上每個字段的含義都是相對采樣周期而言的,下面我們先來關注上圖顯示的上半部分。
ATOP列:該列顯示了主機名、信息采樣日期和時間點
PRC列:該列顯示進程整體運行情況
sys、usr字段分別指示進程在內核態和用戶態的運行時間
#proc字段指示進程總數
#zombie字段指示僵死進程的數量
#exit字段指示atop采樣周期期間退出的進程數量
CPU列:該列顯示CPU整體(即多核CPU作為一個整體CPU資源)的使用情況,我們知道CPU可被用于執行進程、處理中斷,也可處于空閑狀態(空閑狀態分兩種,一種是活動進程等待磁盤IO導致CPU空閑,另一種是完全空閑)
sys、usr字段指示CPU被用于處理進程時,進程在內核態、用戶態所占CPU的時間比例
irq字段指示CPU被用于處理中斷的時間比例
idle字段指示CPU處在完全空閑狀態的時間比例
wait字段指示CPU處在“進程等待磁盤IO導致CPU空閑”狀態的時間比例
CPU列各個字段指示值相加結果為N00%,其中N為cpu核數。
cpu列:該列顯示某一核cpu的使用情況,各字段含義可參照CPU列,各字段值相加結果為100%
CPL列:該列顯示CPU負載情況
avg1、avg5和avg15字段:過去1分鐘、5分鐘和15分鐘內運行隊列中的平均進程數量
csw字段指示上下文交換次數
intr字段指示中斷發生次數
MEM列:該列指示內存的使用情況
tot字段指示物理內存總量
free字段指示空閑內存的大小
cache字段指示用于頁緩存的內存大小
buff字段指示用于文件緩存的內存大小
slab字段指示系統內核占用的內存大小
SWP列:該列指示交換空間的使用情況
tot字段指示交換區總量
free字段指示空閑交換空間大小
PAG列:該列指示虛擬內存分頁情況
swin、swout字段:換入和換出內存頁數
DSK列:該列指示磁盤使用情況,每一個磁盤設備對應一列,如果有sdb設備,那么增多一列DSK信息
sda字段:磁盤設備標識
busy字段:磁盤忙時比例
read、write字段:讀、寫請求數量
NET列:多列NET展示了網絡狀況,包括傳輸層(TCP和UDP)、IP層以及各活動的網口信息
XXXi 字段指示各層或活動網口收包數目
XXXo 字段指示各層或活動網口發包數目
進程視圖
為了更全面地展示進程信息,atop提供了多種進程視圖。
默認視圖(Generic information)
進入atop信息界面,我們看到的就是進程信息的默認視圖(上圖下半部分),按g鍵可以從其他視圖跳到默認視圖。

從上圖中,我們可以看到PID為3061的find進程在退出前在內核模式下占用了3.43秒CPU時間,在用戶模式下占用了0.96秒CPU時間,共使用CPU時間為4.39秒,相對10分鐘采樣周期,CPU時間占用比例為1%,ST列表示進程狀態,N表示該進程是前一個采樣周期新生成的進程,E表示該進程已退出,EXC列指示進程的退出碼。從進程名在“<>”符號中,我們亦可知該進程已退出。
內存視圖(Memory consumption)
內存視圖展示了進程使用內存情況,按m鍵可進入內存視圖。

上圖下半部分展示了每個進程占用的虛擬內存空間(VSIZE)、內存空間(RSIZE)大小,以及在上一個采樣周期中虛擬內存和物理內存增長大小(VGROW、RGROW),MEM列指示進程所占物理內存大小。
從上圖的PAG列的信息,我們可以知道此時系統內存負載較高,出現頁換出情況,從進程視圖中VGROW和RGROW列可看出VirtualBox進程占用內存量大量增長,部分進程占用的內存減少(VGROW或RGROW字段為負值),為VirtualBox進程騰出空間。
命令視圖(Command line)
按c鍵我們可以進入命令視圖,該視圖展示了與每個進程相對應的命令。

有時我們某位“馬大哈”同事執行了某個腳本或命令,使得系統資源占用率異常飆高,這時,我們可以很容易地通過atop的命令視圖找到導致異常的命令。
atop日志
每個時間點采樣頁面組合起來就形成了一個atop日志文件,我們可以使用"atop -r XXX"命令對日志文件進行查看。那以什么形式保存atop日志文件呢?
對于atop日志文件的保存方式,我們可以這樣:
每天保存一個atop日志文件,該日志文件記錄當天信息
日志文件以"atop_YYYYMMDD"的方式命名
設定日志失效期限,自動刪除一段時間前的日志文件
其實atop開發者已經提供了以上日志保存方式,相應的atop.daily腳本可以在源碼目錄下找到。在atop.daily腳本中,我們可以通過修改INTERVAL變量改變atop信息采樣周期(默認為10分鐘);通過修改以下命令中的數值改變日志保存天數(默認為28天):
(sleep 3; find $LOGPATH -name 'atop_*' -mtime +28 -exec rm {} \; )&
最后,我們修改cron文件,每天凌晨執行atop.daily腳本:
0 0 * * * root /etc/cron.daily/atop.daily
小結
本文對Linux系統資源及進程監控工具atop進行了介紹,對atop所記錄信息中的部分字段的含義以及進程視圖進行了分析,最后講述了atop日志文件的保存方式。
atop工具會根據終端界面的大小調整所顯示的字段,因此你使用atop時看到的部分字段可能與以上截圖不相同。
看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170125/95186.html
文章列表