适合人群:Halo 用户 / 小内存服务器 / Java 初学运维
目标:照着做,不踩坑


一、环境说明

  • 服务器内存:2GB

  • 系统:Linux

  • 应用:

    • Halo 2.x(Spring Boot)

    • MySQL

    • Nginx

    • 1Panel


二、问题表现

  • 内存长期 >70%

  • available <300MB

  • CPU 偶发 100%

  • 页面偶尔卡顿


三、修复步骤(按顺序执行)

Step 1:确认内存压力

free -h
ps aux --sort=-%mem | head

Step 2:启用 swap + 降低 swappiness

echo 'vm.swappiness=10' | tee /etc/sysctl.d/99-swappiness.conf
sysctl -p /etc/sysctl.d/99-swappiness.conf

Step 3:MySQL 小内存配置

innodb_buffer_pool_size = 256M
max_connections = 50
performance_schema = OFF

Step 4:限制 JVM 内存(关键)

DefaultEnvironment="JVM_OPTS=-Xms128m -Xmx256m -XX:MaxMetaspaceSize=128m"
systemctl daemon-reexec

Step 5:插件治理

删除:

  • 搜索组件

  • 评论互动增强

  • AI 类插件

保留:

  • RSS

  • Sitemap

  • 应用市场


四、最终状态

  • available >500MB

  • Java RSS ≈ 300MB

  • MySQL RSS ≈ 200MB

  • swap 仅兜底


五、结论

2核2G服务器跑 Halo,
核心不是升级机器,而是限制 JVM + 控制插件。