结论:可以部署,但需要优化配置。
RuoYi-Vue-Plus(或标准的 RuoYi-Vue)分离版在 2 核 2G 的服务器上是可以运行的,但这属于“勉强够用”的级别。如果直接以默认配置启动所有服务(后端 + 前端 + MySQL + Redis),服务器很容易出现内存溢出(OOM)导致进程被系统杀掉,或者 CPU 占用率长期飙升至 100%。
为了确保稳定运行,你需要针对 2G 内存进行严格的资源限制和参数调优。以下是具体的分析和优化建议:
1. 资源瓶颈分析
-
内存压力:
- JVM (Spring Boot):默认情况下,Spring Boot 应用会尝试占用物理内存的 1/4 到 1/2。如果没有设置
-Xmx,在 2G 机器上极易触发 OOM Killer。 - MySQL:默认的
innodb_buffer_pool_size可能设置为几百 MB 甚至更多,这会瞬间吃光剩余内存。 - Redis:虽然轻量,但也需要占用几十 MB 内存。
- Nginx/前端静态资源:占用较小,但不可忽略。
- 操作系统预留:Linux 内核本身也需要约 200MB-300MB 内存。
- 现状:2GB – (JVM 800M) – (MySQL 500M) – (Redis 50M) – (OS 200M) ≈ 450MB 剩余空间,非常紧张。
- JVM (Spring Boot):默认情况下,Spring Boot 应用会尝试占用物理内存的 1/4 到 1/2。如果没有设置
-
CPU 压力:
- 2 核 CPU 在处理高并发请求、复杂的 SQL 查询或文件上传/下载时,容易成为瓶颈。如果是开发环境或内部低频使用系统,通常没问题;如果是对外公开且有一定流量,响应速度可能会变慢。
2. 关键优化方案(必须执行)
要在 2G 服务器上稳定运行,必须修改以下配置:
A. JVM 参数调整(最关键)
不要使用默认启动命令。在 application.yml 或启动脚本中明确限制最大堆内存。
- 推荐配置:将最大堆内存限制在 512MB – 640MB。
- 启动示例:
java -jar ruoyi-admin.jar --spring.profiles.active=prod -Xms512m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m注意:如果开启热部署(DevTools),内存需求会增加,生产环境务必关闭热部署。
B. MySQL 优化
默认配置对 2G 内存来说太奢侈了。需要修改 my.cnf 或 mysql.conf.d:
[mysqld]
# 限制缓冲池大小,设为物理内存的 25%-30% 左右
innodb_buffer_pool_size = 256M
# 降低连接数,防止并发过高耗尽内存
max_connections = 100
# 其他临时表等参数也可适当调小
tmp_table_size = 16M
max_heap_table_size = 16M
提示:如果业务量极小,也可以考虑使用 SQLite 代替 MySQL,能节省大量内存,但会牺牲部分性能。
C. Redis 配置
Redis 默认没有严格内存限制,需配置 maxmemory:
maxmemory 128mb
maxmemory-policy allkeys-lru
D. 前端与 Nginx
- 确保只部署必要的静态资源。
- 如果不需要实时编译,直接使用构建好的
dist目录即可。 - 在 Nginx 中开启 gzip 压缩,减少带宽消耗。
E. 开启 Swap(虚拟内存)
这是 2G 服务器的救命稻草。即使内存满了,Swap 也能防止进程直接被杀(虽然速度会变慢)。
- 操作:创建一个 2G 或 4G 的 Swap 文件。
# 创建 2G swap 文件 dd if=/dev/zero of=/swapfile bs=1M count=2048 chmod 600 /swapfile mkswap /swapfile swapon /swapfile # 写入 fstab 开机生效 echo '/swapfile none swap sw 0 0' >> /etc/fstab建议设置
vm.swappiness=10,让系统优先使用物理内存,只有在真的不够时才用 Swap。
3. 场景建议
| 使用场景 | 可行性 | 建议 |
|---|---|---|
| 个人学习/测试 | ✅ 完全可行 | 按上述优化配置即可,体验流畅。 |
| 内部演示/小团队 OA | ✅ 可行 | 需严格控制并发,避免多人同时上传大文件或复杂报表导出。 |
| 生产环境/对外业务 | ⚠️ 风险较高 | 仅适用于极低并发(如日活 < 100)的系统。若用户稍多,建议升级至 4G 内存 或采用 Docker 容器化隔离 并限制资源。 |
总结
2 核 2G 可以部署 RuoYi 分离版,但不能裸奔。你必须手动限制 JVM 堆内存(<600M)、精简 MySQL 配置,并务必开启 Swap 分区。只要做好这些优化,作为一个轻量级的内部管理系统是完全没问题的。
云知识CLOUD