一、问题抽象
问题并非 OOM,而是:
JVM 堆未限制
MySQL Buffer Pool 偏大
插件引入常驻内存结构
swap 参与度过低
这是一个典型的“资源边界缺失”问题。
二、内存结构分析(2GB)
三、关键设计决策
1. JVM 必须硬限制
-Xmx256m
这是唯一能确保 Java 不突破系统边界 的手段。
2. 插件即“长期驻留对象”
搜索、互动、AI 类插件,本质是:
索引
监听器
任务调度
在小内存环境中,应视为高风险组件。
3. swap 是兜底,不是扩容
通过:
vm.swappiness=10
让 swap 成为“最后保险”,而非日常资源。
四、稳定态验证
稳定态特征:
available >30%
swap 使用量 <5%
Java RSS <400MB
GC 不出现 Full GC 风暴
五、工程结论
小内存服务器不是性能问题,
是资源治理问题。
只要边界清晰,
Halo + Spring Boot 完全可以长期稳定运行。