轻量服务器上如何同时安装并运行MySQL、Redis和Java应用(JAR包)?

服务器

在轻量服务器(如腾讯云轻量应用服务器、阿里云共享型实例,通常 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)'
内存监控 实时观察是否接近上限 htopfree -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)
  • 📈 监控(极简)

    # 安装基础监控(无依赖)
    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 mysqlactive
Redis ~15MB <1% redis-cli pingPONG
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博客 » 轻量服务器上如何同时安装并运行MySQL、Redis和Java应用(JAR包)?