只是swap被占用,os有它的释放规则。
当系统的物理内存压力增大时,Linux 会根据内存的使用情况和交换空间的使用情况,决定是否要将数据移到 swap 区域。
内核会优先交换掉 不活跃的内存页,例如那些长时间没有被访问的数据页。Linux 使用一个叫做 “页面老化”(page aging)的机制来判断哪些内存页不常用。
当物理内存被填满,或者 Linux 内核判断需要释放内存时,它会将内存中不常用的页面移到 swap 空间(称为 swapout)。当内存空闲并且需要更多的内存时,内核会从 swap 中恢复数据到物理内存(称为 swapon)。
内存页回收的触发条件:
系统内存紧张时。
swap 空间可用时,内核会将较少使用的内存页移到 swap,以释放物理内存。
如果内存压力减少(例如有新的内存空闲出来),内核会尝试把部分从 swap 中移回物理内存。
swappiness 是一个内核参数,控制系统开始使用 swap 的频率。它的值在 0 到 100 之间,默认值通常为 60。
低值(如 0-20) 表示尽量避免使用 swap,只有在物理内存非常紧张时才使用 swap。
高值(如 80-100) 表示系统会更积极地使用 swap,甚至在物理内存还有剩余时也可能交换数据到 swap 中。
如何查看 swappiness 值:
cat /proc/sys/vm/swappiness
如何修改 swappiness 值: 临时修改(会在重启后失效):
sysctl vm.swappiness=30
永久修改(编辑 /etc/sysctl.conf 文件):
echo "vm.swappiness=30" >> /etc/sysctl.conf
sysctl -p