Linux swap 是操作系统在物理内存不足时,将部分内存数据临时存储到磁盘指定空间(交换分区或交换文件)的一种机制。它通过扩展可用内存空间,防止系统因内存耗尽而崩溃,但牺牲了磁盘I/O性能。以下是关键要点:
1. 核心作用
- 内存扩展:当物理内存(RAM)不足时,将不活跃的内存页(如后台进程数据)移至swap空间,腾出RAM供急需的进程使用。
- 避免OOM:防止系统触发OOM(Out of Memory) Killer强制终止进程,导致服务中断。
- 休眠支持:休眠(hibernation)功能依赖swap空间保存内存完整状态到磁盘。
2. 实现形式
- 交换分区:独立的磁盘分区,传统推荐方式,性能较高。
- 交换文件:普通文件形式,灵活性高(可动态调整大小),现代Linux内核支持良好。
3. 配置参数
- swappiness(/proc/sys/vm/swappiness):
控制内核使用swap的倾向(0-100)。默认值60,越低越倾向于保留物理内存;设为0不表示禁用swap,仅极端情况下使用。
- 压力调整:可通过`vm.swappiness`、`vm.vfs_cache_pressure`等参数优化交换行为。
4. 性能权衡
- 磁盘速度远低于RAM,频繁swap会导致延迟飙升。
- SSD可缓解性能问题,但可能加剧写入磨损(需配合TRIM/discard优化)。
5. 应用场景
- 内存有限系统:如云实例、旧硬件,需合理分配swap防止内存耗尽。
- 突发负载:临时处理内存需求高峰。
- 特殊工作负载:如大数据处理时避免JVM等进程被OOM Killer终止。
6. 管理命令
- `free -h`:查看swap使用情况。
- `swapon --show`:显示活跃的swap设备。
- `mkswap`/`swapon`/`swapoff`:创建、启用、关闭swap。
7. 现代系统的争议
- 大内存服务器(如64GB+)可能无需swap,但建议保留少量用于容错。
- 容器化环境(如Kubernetes)常需定制swap策略,部分场景禁用以保证确定性。
swap并非内存不足的万能解药,合理规划需结合应用特性和监控数据(如`vmstat`、`sar`)。过度依赖swap可能掩盖内存泄漏等问题,需综合优化代码和资源配置。