Swap分区为0?
问题出于虚拟机中安装的rocketMQ启动的时候由于没有swap分区导致报错:
text
Memory: 4k page, physical 4008748k(3436056k free), swap 0k(0k free)解决方案:
- 创建交换分区shell
sudo fallocate -l 1G /swapfile # 创建一个1GB大小的swap文件 - 设置文件权限shell
sudo chmod 600 /swapfile - 把这个文件设置成swap空间shell
sudo mkswap /swapfile - 启动swap空间shell
sudo swapon /swapfile - 为了让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 检查根分区剩余空间 |
生产环境建议
- Swap 不能替代物理内存,频繁使用 Swap 会明显变慢。
- 对 RocketMQ、Elasticsearch、数据库这类服务,优先保证内存充足。
- 虚拟机学习环境可以创建 1G 到 2G Swap,生产环境要结合监控和服务类型评估。
- 修改
/etc/fstab前要谨慎,写错可能影响系统启动。
