奋斗
努力

Spring Boot项目在Linux云服务器上推荐什么配置?

云计算

在 Linux 云服务器上部署 Spring Boot 项目时,推荐配置需兼顾稳定性、性能、可观测性、安全性和运维便利性。以下是一套经过生产验证的综合推荐(适用于中等流量 Web/API 服务,如日活 1w–10w 的业务系统):


✅ 一、服务器基础配置(以主流云厂商为例)

项目 推荐配置 说明
操作系统 Ubuntu 22.04 LTS 或 CentOS Stream 9 / Rocky Linux 8/9 优先选长期支持(LTS)版本,内核较新(≥5.4),兼容性好、安全更新及时;避免使用已 EOL 的 CentOS 7
CPU & 内存 2–4 核 CPU + 4–8 GB RAM Spring Boot 默认 JVM 堆内存建议设为总内存的 50%~75%;
• 2C4G:适合开发/测试或轻量级服务(QPS < 300)
• 4C8G:推荐生产起步配置(QPS 500–2000+,支持合理 GC 和监控)
磁盘 ≥40 GB SSD(建议 NVMe) 系统盘 + 应用日志 + JVM dump 目录需足够空间;日志按天轮转 + 压缩 + 定期清理(如 logrotate
网络 公网 IP + 安全组严格限制(仅开放 80/443/22/自定义管理端口) ❗禁用 root 远程登录,强制密钥认证

✅ 二、JVM 运行时配置(关键!)

# 示例:启动脚本中使用的 JAVA_OPTS(强烈建议通过 application.yml 外部化配置 + JVM 参数分离)
JAVA_OPTS="-server 
  -Xms2g -Xmx2g           # 堆内存固定(避免动态伸缩GC抖动),建议设为相等值
  -XX:+UseG1GC            # JDK 8u212+/11+/17+ 默认且推荐,低延迟、大堆友好
  -XX:MaxGCPauseMillis=200 
  -XX:+UseStringDeduplication   # 减少字符串重复内存占用(尤其 JSON/HTTP 场景)
  -XX:+HeapDumpOnOutOfMemoryError 
  -XX:HeapDumpPath=/var/log/myapp/heapdump.hprof 
  -XX:+PrintGCDetails -XX:+PrintGCDateStamps 
  -Xloggc:/var/log/myapp/gc.log -XX:+RotateGCLogFiles -XX:NumberOfGCLogFiles=10 
  -Dfile.encoding=UTF-8 
  -Duser.timezone=Asia/Shanghai"

🔍 提示

  • 使用 jstat / jmap / jstackArthas 实时诊断;
  • 生产环境务必关闭 -XX:+UseCompressedOops(64位系统默认开启,无需显式设置);
  • JDK 版本:OpenJDK 17 LTS(推荐)或 21 LTS(Spring Boot 3.x 强制要求 JDK 17+)。

✅ 三、Spring Boot 应用层优化配置(application-prod.yml

server:
  port: 8080
  tomcat:
    max-connections: 1000
    accept-count: 200
    max-http-post-size: 10MB
    connection-timeout: 5000
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/plain,application/json,application/xml
    min-response-size: 1024

spring:
  profiles:
    active: prod
  datasource:
    hikari:
      maximum-pool-size: 20        # 根据 DB 连接数上限和 QPS 调整(通常 10–30)
      minimum-idle: 5
      connection-timeout: 30000
      idle-timeout: 600000
      max-lifetime: 1800000
  redis:
    lettuce:
      pool:
        max-active: 20
        max-idle: 10
        min-idle: 2

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus,loggers,threaddump,heapdump
  endpoint:
    health:
      show-details: when_authorized
  server:
    port: 9090                    # 独立 Actuator 端口(安全组隔离)

💡 安全增强

  • Actuator 端点必须加 Spring Security(Basic Auth 或 JWT);
  • /actuator/env, /actuator/beans 等敏感端点禁止暴露公网
  • 使用 spring-boot-starter-actuator + micrometer-registry-prometheus 对接 Prometheus。

✅ 四、进程管理与守护(推荐 systemd)

✅ 创建 /etc/systemd/system/myapp.service

[Unit]
Description=My Spring Boot App
After=network.target

[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java $JAVA_OPTS -jar /opt/myapp/app.jar --spring.profiles.active=prod
Restart=always
RestartSec=10
SuccessExitStatus=143
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
Environment="LANG=en_US.UTF-8"

# 防止 OOM Killer 杀死进程(可选)
OOMScoreAdjust=-500

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo journalctl -u myapp -f  # 查看日志

✅ 五、日志与监控体系(生产必备)

组件 推荐方案 说明
日志收集 FilebeatElasticsearch / Loki 替代传统 rsyslog,支持结构化日志(Logback JSON encoder)
指标监控 Prometheus + Grafana + Micrometer 监控 JVM、HTTP、DB、Cache、线程池等核心指标
链路追踪 SkyWalking(轻量)或 Jaeger + OpenTelemetry Spring Boot 3.x 推荐 OTel 自动注入
告警 Alertmanager(Prometheus 生态)或 Grafana Alerting 设置 GC 时间、HTTP 5xx、线程阻塞、内存泄漏等阈值告警

✅ 六、安全加固(必须项)

  • ✅ 使用反向X_X(Nginx/Traefik):终止 HTTPS、限流(limit_req)、防 CC、隐藏 Server 头;
  • ✅ Nginx 配置 HTTPS(Let’s Encrypt 免费证书 + 自动续期);
  • ✅ Spring Security 启用 CSRF(非 API 场景)、CORS 白名单、HSTS、X-Content-Type-Options;
  • ✅ 数据库连接使用最小权限账号(只授予 SELECT/INSERT/UPDATE 所需表);
  • ✅ 敏感配置(DB 密码、API Key)绝不硬编码:使用 Spring Cloud Config / Vault / 环境变量 + --spring.config.import=configtree:/etc/secrets/
  • ✅ 定期 apt update && apt upgrade + unattended-upgrades 开启。

✅ 七、部署与 CI/CD 建议

  • 构建产物:mvn clean package -DskipTests → 生成 app.jar(Fat Jar)或使用 jlink + jpackage(JDK 14+)构建原生镜像(可选);
  • 推荐 Docker 化(但非必须):
    FROM eclipse-jetty:11-jre17-slim
    COPY app.jar /var/lib/jetty/webapps/app.jar
    EXPOSE 8080
  • CI/CD 工具:GitHub Actions / GitLab CI / Jenkins(自动构建 → 单元测试 → 部署到预发 → 人工审批 → 生产)

🚫 避坑清单(高频错误)

错误做法 正确做法
java -jar app.jar & 启动(无守护、易退出) ✅ 使用 systemdsupervisord
logging.file.name 写死绝对路径(权限问题) ✅ 改用 logging.file.path: /var/log/myapp/(确保目录存在+myapp用户可写)
不设 Xmx → JVM 用满物理内存 → 触发 OOM Killer ✅ 必须显式设置 -Xms/-Xmx
Actuator 暴露 /actuator/env 到公网 ✅ 仅允许内网访问 + Basic Auth
日志不轮转 → 单个文件达数十 GB → 磁盘爆满 logback-spring.xml 配置 <rollingPolicy> + logrotate 双保险

如需我帮你:

  • ✅ 生成完整的 systemd service 文件模板
  • ✅ 提供 logback-spring.xml 轮转+压缩配置
  • ✅ 输出 Nginx 反向X_X + HTTPS + 限流完整配置
  • ✅ Spring Boot 3.x + JDK 17 最小安全启动脚本
  • ✅ Prometheus + Grafana 监控大盘 JSON

欢迎随时告诉我你的具体场景(如:是否已有 Nginx?是否用 Docker?QPS 预估?是否需要高可用集群?),我可以为你定制化输出 👇

祝你上线顺利,零事故!🚀

未经允许不得转载:云服务器 » Spring Boot项目在Linux云服务器上推荐什么配置?