linux中swap类似win的虚拟内存,当物理内存不足时会把进程暂时不用的内存放入磁盘,进程再次访问这些内存时从磁盘中取出来,解决内存不足的问题。
swap触发条件
1.大块内存分配请求
2.kswapd0定期扫描,查看内存是否紧张,内存紧张时进行回收。具体回收条件可通过cat /proc/sys/vm/min_free_kbytes查看页最小阈值(pages_min),其中页最小阈值(pages_low)=pages_min*5/4,和页高阈值(pages_high)=pages_min*3/2,当现有内存处于pages_min与pages_low区间时,kswapd0会执行回收内存。
开启swap
1.创建文件 :fallocate -l 2G /data/swapfile
2.创建交换分区: mkswap /data/swapfile
3.开启swap:swapon /data/swapfile,开启后可通过free验证
关闭swap
swapoff -a
swap使用统计
使用sar -S 1 每秒统计一次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情况