走啊走
加油

ruoyi分离版在2核2G服务器可以部署么?

服务器价格表

结论:可以部署,但性能非常紧张,仅适合开发测试、演示或极低流量的内部系统,不适合生产环境。

RuoYi-Vue-Plus(或 RuoYi-Vue)分离版通常包含 ruoyi-admin(后端 Spring Boot)、ruoyi-ui(前端 Vue 打包文件)以及可选的 ruoyi-quartz(定时任务)、ruoyi-system 等模块。在 2 核 2G 的服务器上运行,主要面临以下瓶颈和解决方案:

1. 资源消耗分析

  • JVM 内存限制:Spring Boot 应用默认会尝试占用较多堆内存。如果 JVM 启动参数未优化,默认的 -Xmx 可能直接超过 2G 的物理内存,导致 OOM(Out Of Memory)崩溃。
  • 操作系统开销:Linux 系统本身需要预留约 300MB-500MB 内存用于内核、文件系统缓存等,实际留给 Java 应用的可用内存可能只有 1.5G 左右。
  • 并发能力弱:2 核 CPU 在处理高并发请求、复杂 SQL 查询或 JSON 序列化时会迅速达到 100% 负载,导致响应延迟极高。
  • 依赖组件:如果服务器还同时运行了 MySQL、Redis 或 Nginx,2G 内存将捉襟见肘,极易被系统杀掉进程(OOM Killer)。

2. 必须进行的优化配置

如果你必须在 2C2G 上部署,必须进行以下严格优化,否则服务无法稳定运行:

A. 调整 JVM 参数 (关键)

修改 application.yml 或启动脚本中的 JVM 参数,强制限制最大堆内存:

# 建议设置 -Xms512m -Xmx512m 或 -Xmx768m
java -jar -Xms512m -Xmx512m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 ruoyi-admin.jar

注意:不要超过 768MB,给系统和数据库留出空间。

B. 数据库与中间件策略

  • MySQL
    • 如果是 Docker 部署,务必限制容器内存(如 --memory=512m)。
    • 修改 my.cnf,大幅降低 innodb_buffer_pool_size(例如设为 256M),关闭不必要的日志缓冲。
    • 推荐方案:如果可能,将数据库部署在另一台机器,或者使用云厂商提供的 RDS 实例,避免占用本地内存。
  • Redis
    • 同样限制内存,设置为 maxmemory 256mb
  • Nginx
    • Nginx 本身很轻量,但需配置合理的 worker_processes(设为 1 即可)。

C. 前端静态化

确保前端项目(Vue)已经执行 npm run build,并只通过 Nginx 托管静态文件,不要让 Nginx 去反向X_X到后端的 /api 以外的路径。

3. 场景建议

场景 可行性 建议
本地开发/学习 ✅ 完全可行 配合 .env 环境变量跳过某些非核心模块,开启调试模式。
项目演示/PPT 展示 ⚠️ 勉强可行 仅限单人访问,避免多用户同时操作,需做好上述内存优化。
低流量内部工具 ⚠️ 风险较高 仅限每天几十次访问,且业务逻辑简单。需监控内存,随时准备重启。
生产环境/对外服务 不可行 极易宕机,数据丢失风险大,用户体验极差。

4. 替代方案

如果预算有限但必须上线,建议考虑以下架构调整:

  1. 升级配置:最低建议升级到 2 核 4G4 核 4G,这是 Spring Boot 应用的舒适区。
  2. 微服务拆分:将 ruoyi-commonruoyi-system 等模块拆分开,或者移除不用的模块(如代码生成器、定时任务等),只保留最核心的登录和菜单功能。
  3. 更换框架:如果业务极其简单,可以考虑更轻量的框架(如 Go-Zero, Gin, 或基于 FastAPI/Flask 的 Python 方案),对内存需求更低。

总结:2 核 2G 是 RuoYi 分离版的“极限生存”配置。如果你只是为了跑通流程或学习,请做好 JVM 调优;如果是为了正式业务,请务必增加内存至 4G 以上。