Linux基礎之Swap

Swap機制

  當物理內存不足時,Linux系統會釋放出部分不常用的內存,臨時保存到Swap空間(磁盤空間)中, 等應用程序需要這些內存時再從Swap分區中恢復保存的數據到內存中;
  Swap機制只是內存回收策略的一種,內存不足時並不是只能使用swap機制;

Swap大小查看

  • free -m(靜態)
  • top(動態)
    在這裏插入圖片描述
  • sar -r -S 1(動態)
    在這裏插入圖片描述

內存回收機制

  當物理內存不足時,Linux有兩種方式來釋放部分內存

  • 方式1:回收Page Cache/Buffer Cache等緩存;
  • 方式2:利用Swap機制將部分不常用內存置換到磁盤;

  回收內存時具體使用哪種機制由內核決定(有套複雜的算法),不過用戶可以通過swappiness來調整使用 Swap機制的積極程度,swappiness 的範圍是 0-100,數值越大表示越積極使用 Swap,也就是更傾向於使用swap機制;數值越小,越消極使用 Swap,也就是更傾向於回收緩存。查看swappiness的值:

cat  /proc/sys/vm/swappiness

查看Swap影響的進程

  swap會將不常用的內存置換出去,因此很可能多個進程會受影響, /proc/pid/status文件中記錄了每個進程的詳細信息,其中VmSwap字段表示進程的swap大小,如下圖所示:
在這裏插入圖片描述
利用這個信息,可以通過腳本得到所有進程的swap使用情況,甚至進一步排序及可視化等,按照swap大小排序腳本如下:

# 按VmSwap使用量對進程排序,輸出進程名稱、進程ID以及SWAP用量
for file in /proc/*/status; do awk '/VmSwap|Name|^Pid/{printf $2 " " $3}END{ print ""}' $file; done | sort -k 3 -n -r | head

Swap高排查思路

Step1: 確定可疑進程

  在top界面中輸入‘M’,使個進程按照佔用內存大小排序,觀察%MEM大小及增長趨勢,將佔用量大以及增長快的進程作爲可疑進程排查;

Step2: 分析進程行爲

Case1: buff/cache佔用內存過大。使用cachetop命令(需安裝bcc-tools)查看進程佔用buff/cache情況,如果buff/cache過大或者增長快,那麼Swap高很有可能是因爲進程在讀寫文件,通過lsof/strace查看進程具體的文件操作;
Case2: 非緩存佔用內存過大。以Java爲例,需要檢查JVM參數、堆內堆外內存使用情況,以及堆內存映像等來確定原因;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章