【Tomcat 内存 / Swap 说明】
一、当前服务器配置
- CPU:2 核
- 物理内存(RAM):约 6GB(
free -h一般显示为 5.x GiB) - Swap(交换空间):3GB(新增加,用作内存应急缓冲)
二、核心概念
物理内存(RAM)
- 速度非常快,用来跑程序、处理请求。
- 容量有限,这台机器约 6GB。
Swap(交换分区 / 交换文件)
- 用硬盘的一块空间“假装成内存”来应急。
- 比内存慢 10~100 倍,只适合作为 安全垫,不是用来提速的。
三、没有 Swap 时的风险
正常负载时
- Tomcat 大约占 3~4GB;
- 操作系统和其他进程再占一部分;
- 还剩几百 MB~1GB 空闲,系统看起来是稳定的。
高峰 / 异常场景
- 例如:后台发布大量内容 + 触发静态导出 + 搜索引擎爬虫同时抓取;
- JVM 会临时多吃几百 MB~1GB 内存;
- 再加上系统本身开销,很容易把 6GB 物理内存吃满。
没有 Swap 会发生什么?
- 内存一满,Linux 会启动 OOM Killer(Out Of Memory Killer):
- 扫描进程,挑“最占内存”的进程强制
kill -9; - 在这台机子上,几乎一定是 Java / Tomcat 被杀。
- 扫描进程,挑“最占内存”的进程强制
- 结果:
- Tomcat 瞬间消失;
- Nginx 反向代理 全部变成 502;
- 网站长时间不可用,搜索引擎抓取大量 5xx,容易被降权。
- 内存一满,Linux 会启动 OOM Killer(Out Of Memory Killer):
难以排查的点
- OOM Kill 往往不会在应用日志里留明显记录;
- 肉眼看到的现象就是“突然 502,必须手动重启 Tomcat 才恢复”。
四、加上 3GB Swap 之后的变化
整体「可用空间」变成了:
- 约 6GB 物理内存(RAM) + 3GB Swap;
- 理论上有约 9GB 的总可用空间(其中 3GB 是“慢一点的应急缓冲”)。
当物理内存接近打满时:
- 系统会把“暂时不用的冷数据”搬到 Swap 上;
- 为当前活跃的线程、JVM 堆等腾出物理内存;
- 大幅降低触发 OOM Killer 的概率,Tomcat 不会那么容易被系统一刀切掉。
从
free -h大致能看到类似情况:Mem: total ~5.xGi used ~4.xGi available ~0.5–1GiSwap: total 3.0Gi used 很少(几十 MB 以内)- 说明 Swap 只是站在一边“待命”,平时几乎不参与,只有在高峰时刻才会真正帮你顶一顶。
五、Swap 会不会拖慢网站?
正常情况下:基本不会。
- 热点数据都在物理内存里;
- Swap 几乎不被访问,对响应速度几乎没有影响。
极端高负载时:
- 很久没访问的冷数据可能被放到 Swap;
- 再访问这些数据时会比纯内存略慢一些;
- 但和「Tomcat 被杀掉导致整站 502、无法访问」相比,这点性能代价是可以接受的。
六、小结(可直接贴到论坛)
没有 Swap 的情况:
内存一满 → 内核触发 OOM Killer → 直接杀掉 Tomcat → 网站长时间 502 / 5xx,搜索引擎抓取大量失败,请求被拒绝,容易被降权。加上 3GB Swap 之后:
在原有约 6GB 内存基础上,多了 3GB 的“保险缓冲” → 高峰时可以先把冷数据挪到 Swap → 给 JVM 和系统多一点喘息空间 → 大幅降低 OOM Kill 风险,整体稳定性明显提升。
在现有硬件配置(2 核 + 约 6GB 内存)的前提下,增加 3GB Swap 是一项性价比非常高、也非常有必要的「让服务器稳定的配置」。