在2核2GB的服务器上部署MySQL和Spring Boot应用是可行的,但需要谨慎配置以避免资源不足的问题。以下是一些关键建议和优化方向:
1. 资源分配建议
- MySQL:至少分配1GB内存(需调整配置)
- Spring Boot:剩余内存(约500MB~1GB,视应用复杂度而定)
- 系统预留:保留少量内存(约200MB)给操作系统和其他进程。
2. MySQL 优化配置
# my.cnf 或 my.ini 关键参数
[mysqld]
innodb_buffer_pool_size = 512M # 核心参数,通常设为可用内存的50%-70%
innodb_log_file_size = 64M
innodb_flush_method = O_DIRECT
max_connections = 50 # 低并发场景可降低到30
skip_name_resolve = ON
performance_schema = OFF # 关闭性能监控节省内存
key_buffer_size = 16M # 仅MyISAM需要,若不用可设为0
query_cache_type = 0 # 禁用查询缓存(MySQL 8.0已移除)
注意事项:
- 避免使用MyISAM表,优先选择InnoDB。
- 定期优化表或使用
pt-online-schema-change进行DDL操作。
3. Spring Boot 优化
-
JVM参数(在启动脚本中配置):
java -Xms512m -Xmx512m -XX:+UseG1GC -jar your-app.jar- 使用G1垃圾回收器(低延迟)。
- 避免过大的堆内存,防止OOM。
-
应用层优化:
- 启用缓存(如Caffeine/Redis)减少数据库查询。
- 限制线程池大小(如Tomcat的
server.tomcat.max-threads=50)。 - 关闭不必要的Actuator端点(
management.endpoints.enabled-by-default=false)。
4. 系统级优化
- Swap空间:确保启用Swap(至少1GB),避免OOM Killer终止进程。
- 防火墙:限制非必要端口访问(如仅开放80/443和SSH)。
- 监控:用
htop、vmstat或Prometheus监控资源使用。
5. 部署方案
-
方案A(轻量级):
- MySQL与Spring Boot同机部署,通过本地Socket通信。
- 适合低并发(<100 QPS)或测试环境。
-
方案B(推荐):
- 将MySQL迁移到云数据库(如AWS RDS或阿里云RDS),释放服务器资源。
- Spring Boot独立部署,通过远程连接数据库。
6. 预期性能
- 支持并发:约50~100并发请求(视SQL复杂度而定)。
- 瓶颈点:
- 内存不足可能导致频繁Swap或OOM。
- 高并发时CPU可能满载(2核处理能力有限)。
7. 扩展建议
- 垂直升级:优先升级内存至4GB。
- 水平扩展:引入读写分离或缓存(如Redis)。
- 容器化:使用Docker限制资源,避免单一服务耗尽资源。
如果应用预期增长较快,建议尽早规划更高配置或分布式架构。
云服务器