SWAP

跳转至: 导航, 搜索

关于

Linux 将物理内存分为内存段,叫做页面。交换是指内存页面被复制到预先设定好的硬盘空间(叫做交换空间)的过程,目的是释放这份内存页面。物理内存和交换空间的总大小是可用的虚拟内存的总量。

swap(交换空间) 是由 Linux 内核和用户空间实用程序(util-linux 软件包)提供支持的。

使用 swap 扩展您的虚拟内存是否有好处取决与您的物理内存。如果物理内存不足以支撑您日常使用全部的程序的话(体现在日常使用时内存满了导致的卡顿,死机),使用 swap 也许会对您有些帮助。这样可以避免内存耗尽的情况,Linux 内核 OOM Killer 机制将尝试通过杀进程的方式来自动释放内存。如果您想让虚拟内存足够使用,请添加相应的差值(或更多)作为交换空间。

相关使用方法

  • 在系统安装过程中,除非你特别配置,否则 YaST2 会自动创建一个 2 GB 的 SWAP 分区。
  • 不推荐在 BTRFS 系统中启用 swapfile 。

检查交换空间的状态

# swapon --show

显示物理内存以及交换使用情况

free -h

性能

SWAP 操作通常比直接访问 RAM 中的数据慢得多。为了提高性能而完全禁用交换有时会导致性能下降,因为它减少了可用于 VFS 缓存的内存,导致更频繁和费时的磁盘 I/O。

交换值可以被调整以帮助提高性能。

swappiness sysctl 参数表示内核对交换空间的偏好(或避免)。swappiness 的值在 0 到 200 之间(如果 Linux < 5.8,最大 100),默认值是 60 。低值导致内核避免使用交换空间,高值导致内核尝试使用交换空间,100 的值意味着IO消耗被假定为相等。在足够的内存上使用一个较低的值是可以提高许多系统的响应速度。

要检查当前的交换性值:

# sysctl vm.swappiness

另外,可以读取文件 /sys/fs/cgroup/memory/memory.swappiness 或 /proc/sys/vm/swappiness ,以获得原始整数值。

由于 /proc 的组织性较差,而且只是为了兼容的目的而保留,我们鼓励你使用 /sys 来代替。
1 表示优先使用 RAM ,60 为默认值,0 表示禁用 swap。

要临时设置 swappiness 值:

# sysctl -w vm.swappiness=10

要永久地设置交换值,请创建一个 sysctl.d(5) 配置文件。比如说

/etc/sysctl.d/99-swappiness.conf
vm.swappiness=10

要测试和更多关于为什么这可能有效,请看这篇文章

检测脚本

Stackoverflow 上有一个讨论如何检测哪些进程在使用 swap 的问题,你应该可以在此获得一些启发:How to find out which processes are using swap space in Linux?

参考