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参数、堆内堆外内存使用情况,以及堆内存映像等来确定原因;

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