總體思路:
1)先執行free命令,確認系統整體內存使用情況;【如果內存使用率大於80%,可能存在問題】
2)再通過vmstat命令來進一步確認內存瓶頸;【重點關注:swpd、si、so、bi、bo】
3)缺頁錯誤判斷(寫的很粗略);
一、free
free命令顯示了Linux系統中物理內存、交換分區的使用統計信息。
total:總計物理內存的大小 used:已使用內存大小 free:可用內存 shared:多個進程共享的內存總額
buff/cache:磁盤緩存的大小
空閒內存=free+buffers+cached=total-used
free -m:以MB爲單位顯示內存數據 (下圖我發現有時存在不同,used有時候包含buffers/cached,有時不包含buffers/cached,此文以不包含爲例講解,具體情況請具體分析)
可用內存 = free + buffers + cached
第一行 物理內存使用:
物理內存總量(total)= used+可用內存 = 3317+(330+4162)=7809
第二行 交換分區使用:
交換分區內存總量 = 正在使用的交換分區內存+空閒交換分區內存 = used+free=478+3489=3967
分析:
注意>50% 告警>70% 嚴重>80%
需要注意的是在下面這些情況下,系統是正常的,不需要擔心:
空閒內存free接近於0【注:還有buffers/cache可用】
可用內存(free+buffers/cache)佔total的 20% 以上
下面情況說明內存過低,需要注意:
可用內存(free+buffers/cache)過低,接近於0的時候 或 used接近total【也有說法爲內存使用率大於80%或85%或90%】
dmesg | grep oom-killer顯示有OutOfMemory-killer正在運行(不理解)
二、vmstat
通過free初步瞭解內存可用情況後,需結合vmstat進一步查看交換情況
vmstat 1 2:1秒鐘刷新顯示一次,共刷新顯示2次
重點關注 swpd、si、so 3個指標;
分析:
1)si、so(si:從磁盤交換的內存大小;so:交換到磁盤的內存大小)
si、so2個值長期爲0,則無內存方面性能問題;
如果si、so這2個值長期大於0,此時系統性能會受到影響,磁盤IO和CPU資源都會被消耗;需要考慮增加系統內存;
如果so數值大,且swpd佔比很高,表示內存已經飽和;需要考慮增加系統內存;
如果swpd(虛擬內存)不斷增加,而且存在着大量的頁面交換(si和so),證明系統的物理內存已經不能滿足系統需求,系統必須把物理內存的頁面交換到磁盤中去;
ps:當看到空閒內存(free)很少的或接近於0時,就認爲內存不夠用了,這個是不正確的。不能光看這一點,還要結合si和so;如果free很少,但是si和so也很少(大多時候是0),那麼不用擔心,系統性能這時不會受到影響的。(存疑,free本來就不能斷定內存不夠,還得關注buffers/cache的值)
2)bi、bo(bi:從塊設備接受的塊;bo:發送給塊設備的塊)
如果bi、bo這個值長期不爲0,說明內存可能有問題,因爲沒有用到緩存(當然不排除直接I/O的情況,但一般很少直接I/O的)
如果用作緩衝區(buff)和快速緩存(cache)的物理內存不斷增加,而空閒的物理內存(free)不斷減少,證明系統中運行的進程正在不斷消耗物理內存;
三、缺頁
1、sar -W 查看次缺頁數
頁面發生交換時,服務器的吞吐量會大幅下降;服務器狀況不良時,如果懷疑因爲內存不足而導致
了頁面交換的發生,可以使用這個命令來確認是否發生了大量的交換
說明:sar命令,次缺頁多意味已經在不停地和swap打交道,證明內存已經飽和;
pswpin/s:每秒系統換入的交換頁面(swap page)數量
pswout/s:每秒系統換出的交換頁面(swap page)數量
四、內存OOM
內存不夠用會觸發內核的OOM機制;
查看內核日誌有無OOM機制kill進程;
參考
[1] https://blog.csdn.net/xiaona0523/article/details/107855669