在轻量服务器(如腾讯云轻量应用服务器、阿里云共享型实例,通常 1C2G 或 2C4G)上同时运行 MySQL、Redis 和 Java 应用(JAR 包),关键在于资源合理分配、服务轻量化配置与进程管理优化。以下是经过生产验证的轻量级部署方案(以 Ubuntu 22.04 / CentOS 7+ 为例):
✅ 一、前提检查(务必执行)
# 查看资源(重点关注内存和磁盘)
free -h # 确保可用内存 ≥ 1.2GB(MySQL + Redis + JVM 至少需 1G+)
df -h # 磁盘建议 ≥ 20GB(系统 + 数据 + 日志)
ulimit -n # 建议 ≥ 65535(避免连接数瓶颈)
⚠️ 若为 1C1G 实例,强烈不建议部署三者共存(MySQL 默认占 500MB+,Redis 200MB+,Java 应用至少 512MB)。推荐最低配置:2核4G 内存,系统盘 40GB+
✅ 二、安装策略:优先使用 APT/YUM + 轻量配置(非 Docker)
| 组件 | 推荐方式 | 原因说明 |
|---|---|---|
| MySQL | apt install mysql-server(Ubuntu)或 yum install mysql-community-server(CentOS) |
避免 Docker 额外开销;原生更省内存 |
| Redis | apt install redis-server(Ubuntu)或 yum install redis(CentOS) |
官方包已优化,默认单线程,内存可控 |
| Java 应用 | 直接运行 JAR(java -jar)+ systemd 管理 |
零容器依赖,启动快,内存占用明确 |
✅ 不推荐 Docker(轻量服务器资源紧张,Dockerd 自身占 100MB+ 内存,且网络/存储叠加开销明显)
✅ 三、关键:资源限制与轻量化配置
🔹 1. MySQL 轻量配置(/etc/mysql/mysql.conf.d/mysqld.cnf)
[mysqld]
# 内存精简(关键!)
innodb_buffer_pool_size = 128M # 默认 128M 即可(勿超总内存 30%)
key_buffer_size = 16M
max_connections = 50 # 降低并发连接数
table_open_cache = 64
sort_buffer_size = 256K
read_buffer_size = 256K
log_error = /var/log/mysql/error.log
# 关闭不必要功能
skip-log-bin
skip-host-cache
skip-name-resolve
sudo systemctl restart mysql
🔹 2. Redis 轻量配置(/etc/redis/redis.conf)
# 内存控制
maxmemory 128mb
maxmemory-policy allkeys-lru # 内存满时自动淘汰
# 关闭持久化(开发/测试环境可选,生产建议 RDB 每6小时)
save "" # 禁用 RDB
appendonly no # 禁用 AOF
# 其他
tcp-keepalive 300
timeout 300
sudo systemctl restart redis-server
🔹 3. Java 应用(JAR)启动优化
# 示例:启动命令(根据实际调整堆内存)
java -Xms256m -Xmx512m
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-Dspring.profiles.active=prod
-jar /opt/myapp/app.jar
--server.port=8080
✅ 堆内存建议:
- 2C4G 服务器 →
-Xms256m -Xmx512m(留足内存给 OS、MySQL、Redis)- 启动后用
jstat -gc <pid>观察 GC 是否频繁(>1次/分钟需调大)
✅ 四、进程管理:统一用 systemd(稳定 + 开机自启)
创建 Java 应用 service(/etc/systemd/system/myapp.service):
[Unit]
Description=My Java Application
After=network.target mysql.service redis-server.service
[Service]
Type=simple
User=ubuntu # 替换为你的普通用户(勿用 root)
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/myapp/app.jar --server.port=8080
Restart=always
RestartSec=10
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
[Install]
WantedBy=multi-user.target
启用服务:
sudo systemctl daemon-reload
sudo systemctl enable mysql redis-server myapp
sudo systemctl start mysql redis-server myapp
sudo systemctl status myapp # 检查是否正常运行
✅ 五、安全与监控(轻量但必要)
| 项目 | 推荐操作 |
|---|---|
| 防火墙 | sudo ufw allow OpenSSH && sudo ufw allow 8080 && sudo ufw enable(关闭 MySQL/Redis 网络端口!) |
| MySQL 安全 | sudo mysql_secure_installation(设 root 密码、删匿名用户、禁远程 root) |
| Redis 安全 | 编辑 /etc/redis/redis.conf:bind 127.0.0.1(仅本地访问)requirepass your_strong_password(启用密码)protected-mode yes |
| 基础监控 | htop(实时看 CPU/内存)、df -h(磁盘)、journalctl -u myapp -f(日志) |
✅ 六、故障排查速查表
| 现象 | 快速解决 |
|---|---|
| Java 应用启动失败 OOM | 检查 free -h → 减小 -Xmx;确认 MySQL/Redis 未超配 |
| Redis 连接被拒绝 | sudo ss -tlnp | grep :6379 → 检查 bind 和 protected-mode |
| MySQL 连接不上 | sudo systemctl status mysql → 查 /var/log/mysql/error.log |
| 应用启动后立即退出 | journalctl -u myapp -n 50 --no-pager 看错误栈(常见:端口冲突、数据库连不上、配置文件路径错) |
✅ 进阶建议(可选)
- 日志轮转:对 MySQL/Redis/Java 日志用
logrotate防止占满磁盘 - 备份脚本:每天凌晨用
mysqldump+redis-cli bgsave+tar打包到 COS/OSS - 健康检查:用
curl -I http://localhost:8080/actuator/health(Spring Boot)或自定义/health接口
✅ 总结一句话:
“宁可牺牲功能,绝不透支内存” —— 关闭所有非必要服务(如 MySQL 的 binlog、Redis 的 AOF)、严格限制各组件内存上限、用 systemd 统一管控,即可在 2C4G 轻量服务器上长期稳定运行三者。
需要我为你生成:
- ✅ 完整的
mysql.cnf/redis.conf轻量版模板? - ✅ 一键部署脚本(自动安装+配置+启动)?
- ✅ Spring Boot 应用的
application-prod.yml示例(含 MySQL/Redis 连接池优化)?
欢迎随时告诉我 👇
CLOUD云枢