在轻量服务器(如腾讯云轻量应用服务器、阿里云共享型实例,通常 1C2G 或 2C4G)上同时运行 MySQL、Redis 和 Java 应用(JAR),关键在于资源合理分配、服务轻量化配置和进程可靠管理。以下是经过生产验证的轻量级部署方案(以 Ubuntu 22.04 / Debian 12 为例,兼顾安全与稳定性):
✅ 一、前提检查(务必执行)
# 查看资源(重点关注内存!)
free -h # 确保可用内存 ≥ 1.2GB(MySQL+Redis+Java最低需求)
df -h # 确保磁盘 ≥ 10GB(建议 SSD)
ulimit -n # 建议 ≥ 65535(避免连接数瓶颈)
⚠️ 警告:若仅 1C1G(如最低配轻量服务器),不建议同时运行三者——MySQL 和 Redis 默认内存占用高,极易 OOM。推荐至少 1C2G(实测最低可行)或 2C4G(推荐)。
✅ 二、安装与轻量化配置(核心!)
1️⃣ MySQL(使用 mysql-server,禁用无关组件)
# 安装(Ubuntu/Debian)
sudo apt update && sudo apt install -y mysql-server
# 安全加固(自动设置 root 密码、删除匿名用户等)
sudo mysql_secure_installation
# ✨ 关键:编辑配置文件,大幅降低内存占用
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
精简配置(贴入 [mysqld] 段):
# 内存优化(2G内存机器适用)
innodb_buffer_pool_size = 128M # 占总内存 ~1/4(勿超 512M)
key_buffer_size = 16M
max_connections = 50 # 限制最大连接数
table_open_cache = 64
sort_buffer_size = 256K
read_buffer_size = 256K
# 禁用性能模式(节省内存)
performance_schema = OFF
# 日志精简
slow_query_log = OFF
log_error = /var/log/mysql/error.log
sudo systemctl restart mysql
2️⃣ Redis(使用 redis-server,启用内存限制)
sudo apt install -y redis-server
# ✨ 关键:配置内存限制与持久化策略
sudo nano /etc/redis/redis.conf
关键配置:
# 绑定本地,禁用公网访问
bind 127.0.0.1 ::1
protected-mode yes
# 内存限制(2G机器设为 256MB,防止吃光内存)
maxmemory 256mb
maxmemory-policy allkeys-lru # 内存满时LRU淘汰
# 关闭持久化(开发/轻量场景可接受;如需数据持久,改用 RDB)
save "" # 禁用 RDB 自动保存
appendonly no # 禁用 AOF(AOF 日志会持续写入磁盘)
# 降低后台线程开销
io-threads 1
sudo systemctl restart redis-server
3️⃣ Java 应用(JAR 包)—— 使用 systemd 托管(推荐)
# 创建应用目录
sudo mkdir -p /opt/myapp
sudo cp your-app.jar /opt/myapp/app.jar
# 创建专用用户(安全隔离)
sudo useradd -r -s /bin/false myapp
# 设置权限
sudo chown -R myapp:myapp /opt/myapp
sudo chmod 755 /opt/myapp
# 创建 systemd 服务(内存控制 + 自启)
sudo nano /etc/systemd/system/myapp.service
/etc/systemd/system/myapp.service:
[Unit]
Description=My Java Application
After=network.target mysql.service redis-server.service
[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java
-Xms128m -Xmx512m # JVM 堆内存:最小128M,最大512M(按需调整)
-XX:+UseG1GC # G1 GC 更适合小内存
-Dspring.profiles.active=prod
-jar /opt/myapp/app.jar
Restart=on-failure
RestartSec=10
# 限制资源(防失控)
MemoryLimit=768M # 总内存上限(含堆外内存)
CPUQuota=80% # 限制 CPU 使用率(可选)
[Install]
WantedBy=multi-user.target
# 启用并启动
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
# 查看日志
sudo journalctl -u myapp -f
✅ 三、关键优化与验证
| 项目 | 操作 | 验证命令 |
|---|---|---|
| 端口占用 | MySQL(3306), Redis(6379), Java(8080等) 不冲突 | sudo ss -tuln | grep -E ':(3306|6379|8080)' |
| 内存监控 | 实时观察是否接近上限 | htop 或 free -h |
| 服务依赖 | Java 启动前确保 MySQL/Redis 已就绪 | systemctl list-dependencies myapp.service |
| 连接测试 | Java 应用连通性 | 在 Java 中打印 System.out.println("DB connected: " + dataSource.getConnection().isValid()); |
✅ 四、进阶建议(提升稳定性)
-
🔐 安全加固
- MySQL:创建专用账号(
CREATE USER 'app'@'localhost' IDENTIFIED BY 'strong-pwd'; GRANT SELECT,INSERT ON db.* TO 'app'@'localhost';) - Redis:设置密码(
requirepass your_strong_redis_password→ Java 连接串加?password=xxx) - 防火墙:
sudo ufw allow OpenSSH && sudo ufw enable(默认只开 SSH)
- MySQL:创建专用账号(
-
📈 监控(极简)
# 安装基础监控(无依赖) sudo apt install -y sysstat # 每5分钟记录一次资源:sudo nano /etc/cron.d/sysstat → 添加 `*/5 * * * * root /usr/lib/sysstat/sadc -S ALL 1 1 /var/log/sysstat/sa$(date +%d)` -
🔄 自动恢复
- 所有服务已通过
systemd设置Restart=on-failure,崩溃后自动重启 - 可添加健康检查脚本(如检测 Java 应用
/actuator/health返回 200)
- 所有服务已通过
-
🧹 清理冗余
sudo apt autoremove -y && sudo apt clean sudo journalctl --vacuum-size=100M # 限制日志大小
❌ 常见陷阱避坑
- OOM Killer 杀进程 → 严格设置
MemoryLimit+maxmemory+-Xmx,三者之和 ≤ 总内存 × 0.8 - MySQL 启动失败 → 检查
/var/log/mysql/error.log,常见因innodb_buffer_pool_size过大 - Java 连不上 Redis → 检查
bind配置(必须含127.0.0.1)、protected-mode yes、密码是否正确 - 启动顺序错乱 →
After=和Wants=在 service 文件中确保依赖关系
✅ 最终效果(2C4G 轻量服务器实测)
| 服务 | 内存占用 | CPU 占用 | 状态 |
|---|---|---|---|
| MySQL | ~180MB | <5% | systemctl is-active mysql → active |
| Redis | ~15MB | <1% | redis-cli ping → PONG |
| Java App | ~600MB | 10~30% | curl http://localhost:8080/actuator/health → {"status":"UP"} |
💡 终极提示:轻量服务器不是“全能服务器”,宁可牺牲功能(如关闭 MySQL 慢日志、Redis AOF),也要保住稳定性。如业务增长,优先迁移至专业云数据库(如腾讯云 CVM + 云数据库 MySQL + 云 Redis)。
需要我为你生成:
- ✅ 一键部署脚本(bash)
- ✅ Spring Boot 应用的
application-prod.yml示例 - ✅ Docker Compose 轻量版(如果偏好容器化)
欢迎随时提出 👇
CDNK博客