Skip to content

Swap分区为0?

问题出于虚拟机中安装的rocketMQ启动的时候由于没有swap分区导致报错:

text
Memory: 4k page, physical 4008748k(3436056k free), swap 0k(0k free)

解决方案:

  1. 创建交换分区
    shell
    sudo fallocate -l 1G /swapfile  # 创建一个1GB大小的swap文件
  2. 设置文件权限
    shell
    sudo chmod 600 /swapfile
  3. 把这个文件设置成swap空间
    shell
    sudo mkswap /swapfile
  4. 启动swap空间
    shell
    sudo swapon /swapfile
  5. 为了让swap设置在重启之后依然有效,需要把它添加到/etc/fstab文件中
    shell
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

验证是否生效

shell
free -h
swapon --show

如果能看到 /swapfile,并且 Swap 不再是 0,说明配置已经生效。

设置流程

mermaid
flowchart TD
    A[检查 free -h] --> B{Swap 是否为 0}
    B -- 否 --> C[无需创建]
    B -- 是 --> D[创建 swapfile]
    D --> E[设置 600 权限]
    E --> F[mkswap 格式化]
    F --> G[swapon 启用]
    G --> H[写入 /etc/fstab]
    H --> I[重启后验证]

常见问题

问题原因和处理
swapon failed: Operation not permitted容器或受限虚拟化环境可能不允许启用 swap
重启后失效没有写入 /etc/fstab 或写入格式错误
权限报错/swapfile 权限不是 600
磁盘空间不足先用 df -h 检查根分区剩余空间

生产环境建议

  1. Swap 不能替代物理内存,频繁使用 Swap 会明显变慢。
  2. 对 RocketMQ、Elasticsearch、数据库这类服务,优先保证内存充足。
  3. 虚拟机学习环境可以创建 1G 到 2G Swap,生产环境要结合监控和服务类型评估。
  4. 修改 /etc/fstab 前要谨慎,写错可能影响系统启动。