服務器內存排查之free、vmstat、sar命令實戰(zhàn)教程
前言
在Linux服務器的運維場景中,程序突然卡頓且無日志報錯、CPU未跑滿的情況時有發(fā)生,此時內存問題往往是潛在的“罪魁禍首”。對于開發(fā)運維人員而言,掌握free、vmstat、sar這三個命令,就如同為服務器配備了專業(yè)的“體檢工具”,能夠在短短幾分鐘內精準定位內存相關的故障根源,為高效解決問題提供有力支持。
一、內存排查的必要性
當內存容量充足時,程序能夠順暢運行;然而,一旦內存不足,便會引發(fā)一系列問題。一方面,程序可能因無法獲取足夠的內存空間而崩潰;另一方面,系統(tǒng)不得不借助磁盤的“備用倉庫”(即swap分區(qū))來存儲和讀取數(shù)據(jù)。但磁盤的讀寫速度相較于內存而言,慢了100倍以上,這種速度差異必然導致程序出現(xiàn)明顯的卡頓現(xiàn)象,嚴重影響服務器的性能和用戶體驗。
二、free命令:內存排查的“入門利器”
free命令堪稱內存排查領域的“入門款”工具,它能夠快速提供關于內存使用情況的基本信息,讓用戶迅速了解服務器的內存狀態(tài)。
(一)簡單操作與靈活參數(shù)
在Linux終端中,只需輸入“free”命令,即可查看內存的初始狀態(tài)。若希望結果以更人性化的GB/MB為單位顯示,避免記憶KB數(shù)值的繁瑣,可添加“-h”參數(shù);若想實現(xiàn)每隔一定時間(如3秒)自動刷新內存信息,可添加“-s 3”參數(shù)。具體命令如下:
free -h -s 3

(二)結果解讀:洞察內存“收支”
free命令輸出的結果包含多個核心字段,每個字段都如同倉庫的“收支數(shù)據(jù)”,反映了內存的不同使用情況:

- Mem(物理內存主倉庫):這是程序最常用的內存空間,類似于實際工作中的主要工作區(qū)域。
- total:表示主倉庫的總容量,例如1.9GB,反映了服務器物理內存的總量。
- used:顯示已使用的內存容量,如298MB,體現(xiàn)了當前正在被程序占用的內存大小。
- free:代表完全未被使用的“空倉庫”容量,例如814MB。但需要注意的是,這個值并非真正可用的內存,因為還需要考慮緩沖和緩存所占用的空間。
- buff/cache(臨時存儲區(qū)):這部分內存類似于倉庫的“暫存架”,用于臨時存儲數(shù)據(jù)。
- buff(緩沖區(qū)):剛從磁盤接收的數(shù)據(jù)會先存放在這里進行整理,類似于快遞站的“待分揀區(qū)”。例如,剛下載的文件碎片會暫時存儲在緩沖區(qū),等待進一步處理。
- cache(緩存區(qū)):頻繁訪問的文件或數(shù)據(jù)會被存放在這里,以便快速調用,類似于家里的“常用物品柜”。例如,常用的程序代碼會被緩存在此,提高程序運行效率。
- available(真正可用內存):這是最為關鍵的指標,其值大約等于free + buff/cache,例如1.6GB。當這個值低于total的10%時,就表明內存已經(jīng)接近耗盡,需要及時采取措施。
- Swap(內存?zhèn)溆脗}庫):這是磁盤上劃分的專門空間,作為內存的備用區(qū)域。只有當主倉庫(物理內存)滿載時,系統(tǒng)才會使用Swap分區(qū)。但由于磁盤速度遠慢于內存,使用Swap分區(qū)會導致性能下降。
(三)實際場景應用:快速判斷內存狀況
通過free命令,運維人員可以在10秒內快速判斷內存是否充足。例如,當使用“free -h”命令查看結果時,如果發(fā)現(xiàn)available值只有100MB(而總內存為1.9GB),這就表明內存已經(jīng)非常緊張,可能需要清理緩存或考慮升級內存。另外,如果Swap的used值大于0,并且持續(xù)增加,這說明主倉庫的內存已經(jīng)不夠用,系統(tǒng)開始頻繁使用備用倉庫,此時必須盡快排查原因,避免問題進一步惡化。
三、vmstat命令:內存+CPU+IO的“全面體檢專家”
vmstat命令猶如服務器的“全面體檢報告”,它不僅能夠提供內存的使用情況,還能同時監(jiān)測CPU和IO的狀態(tài),是Linux運維領域中備受推崇的“明星命令”。
(一)使用方法:定期統(tǒng)計,精準把握
在終端中輸入“vmstat”命令,默認會統(tǒng)計一次當前的系統(tǒng)狀態(tài)。若希望實現(xiàn)定期統(tǒng)計,例如每隔5秒統(tǒng)計一次,共統(tǒng)計3次,可使用以下命令:
vmstat 5 3
其中,第一個數(shù)字“5”表示統(tǒng)計間隔(秒),第二個數(shù)字“3”表示統(tǒng)計次數(shù)。通過定期統(tǒng)計,可以更準確地觀察系統(tǒng)性能的變化趨勢。
(二)結果解讀:按模塊剖析性能維度
vmstat的輸出字段較多,但按照不同的性能維度進行模塊劃分后,理解起來就變得相對簡單。

- procs(進程排隊情況)
- r:表示正在運行以及等待CPU的進程數(shù)。如果這個數(shù)值長期大于服務器的CPU核心數(shù)(例如,服務器為4核CPU,而r長期大于4),則說明CPU資源不足,進程需要排隊等待處理。
- b:代表等待資源的進程數(shù),這些資源可能包括內存、磁盤IO等。如果這個數(shù)值大于0,說明有進程因為資源不足而“卡殼”,無法正常執(zhí)行。
- memory(內存主倉庫+備用倉庫)
- swpd:顯示備用倉庫(Swap)已經(jīng)使用的空間大?。▎挝唬篕B)。如果這個數(shù)值大于0,說明主倉庫的內存已經(jīng)不夠用,系統(tǒng)開始使用備用倉庫。如果swpd長期大于0且持續(xù)增加,就需要考慮升級內存或者終止一些無用的進程。
- free:表示主倉庫的空閑內存容量。
- buff:緩沖區(qū)容量,類似于數(shù)據(jù)整理的“待分揀區(qū)”。
- cache:緩存區(qū)容量,類似于存放常用物品的“常用物品柜”。如果cache的值非常大,而io中的bi值比較小,說明文件系統(tǒng)的緩存效率較高,能夠有效地減少磁盤IO操作。
- swap(備用倉庫存取速度)
- si:每秒從備用倉庫(磁盤)讀入內存的數(shù)據(jù)量(單位:KB),即從備用倉庫往主倉庫運輸數(shù)據(jù)。
- so:每秒從內存寫入備用倉庫的數(shù)據(jù)量(單位:KB),即主倉庫放不下數(shù)據(jù)時,往備用倉庫運輸數(shù)據(jù)。正常情況下,si和so的值都應該為0。如果這兩個值長期大于0(例如持續(xù)5分鐘都有數(shù)值),說明主倉庫的內存嚴重不足,必須采取措施解決,如升級內存或檢查是否存在內存泄漏問題。
- io(磁盤讀寫速度)
- bi:每秒從磁盤讀入的數(shù)據(jù)量(單位:KB)。
- bo:每秒寫入磁盤的數(shù)據(jù)量(單位:KB)。如果bi + bo的值很大,并且后面的wa(IO等待CPU時間)大于20%,說明磁盤IO成為了系統(tǒng)的瓶頸,即使內存容量足夠,也會導致系統(tǒng)出現(xiàn)卡頓現(xiàn)象。
- system(系統(tǒng)內核消耗的CPU)
- in:表示某一時間間隔內觀測到的每秒設備終端數(shù)。
- cs:表示每秒產(chǎn)生的上下文切換次數(shù)。這個值越小越好,如果值過大,說明CPU大部分時間浪費在上下文切換上,沒有得到充分利用。此時,需要考慮調低線程或者進程的數(shù)目,以提高CPU的使用效率。需要注意的是,in和cs的值越大,由內核消耗的CPU就越多。
- CPU(CPU干活情況)
- us:用戶程序使用的CPU時間占比,例如訂單系統(tǒng)、網(wǎng)頁服務等業(yè)務程序。如果這個值長期大于50%,說明用戶程序對CPU的占用過高,可能需要優(yōu)化程序或算法。
- sy:系統(tǒng)內核使用的CPU時間占比,例如內存管理、磁盤IO等系統(tǒng)操作。us + sy的值最好小于80%,否則說明CPU資源不足,無法滿足系統(tǒng)運行的需求。
- id:表示CPU處于空閑狀態(tài)的時間百分比。
- wa:表示IO等待所占用的CPU時間百分比。如果wa大于20%,說明IO操作過慢,拖慢了整個系統(tǒng)的速度。引起I/O等待的原因可能是磁盤大量隨機讀寫造成的,也可能是磁盤或者監(jiān)控器的帶寬瓶頸(主要是塊操作)導致的。
(三)實際場景應用:破解“內存+CPU+IO”連環(huán)瓶頸
例如,某服務器使用“vmstat 5 3”命令進行監(jiān)測,發(fā)現(xiàn)swpd = 1GB(備用倉庫正在使用)、si = 50KB/s(持續(xù)從備用倉庫讀入數(shù)據(jù))、wa = 25%(IO等待時間較長)。這一系列數(shù)據(jù)表明,服務器內存不足,導致系統(tǒng)開始使用備用倉庫。而備用倉庫位于磁盤,磁盤IO速度較慢,進而使得CPU需要等待IO操作完成,形成了“內存不足→使用備用倉庫→磁盤IO慢→CPU等待”的連環(huán)瓶頸。在這種情況下,首先需要增加服務器的內存容量,然后再檢查磁盤IO的性能,進行相應的優(yōu)化。
四、sar命令:內存狀態(tài)的“定期復查記錄”
sar命令類似于內存的“定期復查記錄”,它與free命令功能類似,但更適合用于“長期監(jiān)控”。例如,如果希望每隔3秒查看一次內存變化情況,無需手動刷新,sar命令可以自動持續(xù)輸出內存信息。
(一)使用方法:持續(xù)監(jiān)控,輕松掌握
在終端中輸入以下命令,即可實現(xiàn)每隔3秒輸出一次內存信息,按Ctrl + C組合鍵可以停止監(jiān)控:
sar -r 3
其中,參數(shù)“-r”表示查看內存使用率相關統(tǒng)計,后面的“3”是統(tǒng)計間隔(秒)。
(二)結果解讀:與free“互通有無”

sar命令的輸出字段和free命令的核心含義一致,例如kbmemfree(空閑內存)、kbmemused(已用內存)、kbbuffers(緩沖區(qū))、kbcached(緩存區(qū))等,只是顯示格式有所不同。通過sar命令,用戶可以快速了解服務器的內存狀態(tài),特別適合需要“長期觀察內存變化”的場景,例如監(jiān)控某程序運行時的內存消耗情況。
五、內存排查思路:高效定位問題的“三步法”
為了提高內存排查的效率,可以按照“先整體、再細節(jié)、后長期”的思路進行操作:
(一)第一步:用free快速判斷“內存夠不夠”
首先輸入“free -h”命令,查看available(可用內存)的占比情況。如果available值大于總內存的20%,說明內存充足;如果小于10%,則表明內存緊張,需要進一步深入排查。
(二)第二步:用vmstat找“瓶頸在哪”
如果free命令顯示內存緊張,接下來輸入“vmstat 5 3”命令,仔細觀察swap的si/so(判斷是否在使用備用倉庫)、procs的r/b(查看進程是否排隊)、IO的wa(確定是否因IO拖慢系統(tǒng))等指標。通過這些數(shù)據(jù),可以定位問題究竟是單純的內存問題,還是內存與CPU/IO混合導致的問題。
(三)第三步:用sar做“長期監(jiān)控”
如果想跟蹤某程序(例如新上線的APP)的內存消耗情況,輸入“sar -r 3”命令,持續(xù)觀察內存的變化趨勢。通過長期監(jiān)控,可以判斷程序是否存在“內存泄漏”問題,即程序在運行過程中內存使用量逐漸增加,最終導致內存耗盡。
六、總結
free、vmstat、sar這三個命令在服務器內存排查中各有其獨特的用途:
- free命令主要用于“快速查看”服務器的內存使用情況,為用戶提供一個初步的內存狀態(tài)評估。
- vmstat命令則擅長“全面排查”,能夠同時監(jiān)測內存、CPU和IO等多個性能指標,幫助用戶深入分析系統(tǒng)性能瓶頸。
- sar命令適用于“長期監(jiān)控”,可以持續(xù)跟蹤內存的變化情況,對于發(fā)現(xiàn)潛在的內存問題具有重要意義。
到此這篇關于服務器內存排查之free、vmstat、sar命令實戰(zhàn)的文章就介紹到這了,更多相關服務器內存排查free、vmstat、sar命令內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
使用Putty遠程(SSH)管理Linux VPS的圖文教程
Putty是一個免費的、Windows 32平臺下的telnet、rlogin和ssh客戶端,但是功能絲毫不遜色于商業(yè)的telnet類工具。2010-12-12

