速卖通素材
努力

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

服务器

在 Linux 云服务器上部署 Spring Boot 项目时,推荐配置需兼顾稳定性、性能、可维护性与安全性。以下是一套经过生产验证的综合推荐(适用于中等流量 Web 应用,如企业后台、API 服务等):


✅ 一、服务器基础配置(云厂商选型参考)

项目 推荐配置 说明
操作系统 Ubuntu 22.04 LTS / CentOS Stream 9 / AlmaLinux 9 优先选长期支持(LTS)版本,安全更新及时;避免 CentOS 7/8(已 EOL)
CPU & 内存 ≥ 2核 CPU + 4GB RAM(起步)
建议:4核8GB(日活 1w+ 或含缓存/定时任务)
Spring Boot 默认堆内存 -Xms2g -Xmx2g 需预留系统内存(OS + JVM + 其他进程)
磁盘 ≥ 50GB SSD(推荐 NVMe) 系统盘 + 日志存储;若用 Elasticsearch/MongoDB 等,需额外数据盘
网络 绑定固定公网 IP,配置安全组(仅开放 80/443/22/管理端口) ❗禁止开放 22 端口给全网,建议白名单或跳板机

✅ 二、JVM 与 Spring Boot 运行时优化

▪️ 启动脚本示例(start.sh

#!/bin/bash
APP_JAR="myapp.jar"
JAVA_HOME="/usr/lib/jvm/java-17-openjdk-amd64"  # 推荐 JDK 17(LTS)
JAVA_OPTS="-server 
  -Xms2g -Xmx2g 
  -XX:+UseG1GC 
  -XX:MaxGCPauseMillis=200 
  -XX:+UseStringDeduplication 
  -XX:+HeapDumpOnOutOfMemoryError 
  -XX:HeapDumpPath=/var/log/myapp/heap-dump.hprof 
  -Dfile.encoding=UTF-8 
  -Duser.timezone=Asia/Shanghai 
  -Dspring.profiles.active=prod"

nohup ${JAVA_HOME}/bin/java ${JAVA_OPTS} -jar ${APP_JAR} > /dev/null 2>&1 &
echo $! > /var/run/myapp.pid

关键点说明

  • 使用 JDK 17+(Spring Boot 3.x 强制要求;2.x 推荐 JDK 17,兼容性好、GC 性能优)
  • 堆内存设为 Xms == Xmx(避免动态扩容开销),占总内存 50%~75%(留足 OS 缓存、Metaspace、直接内存)
  • G1 GC 适合大堆(≥4GB),低延迟场景更优;小内存可用 ZGC(JDK 17+)
  • 必加 -Dfile.encoding=UTF-8-Duser.timezone=Asia/Shanghai(防乱码/时区错误)

▪️ Spring Boot 生产配置(application-prod.yml

server:
  port: 8080
  tomcat:
    max-connections: 5000
    max-threads: 200
    min-spare-threads: 20
    connection-timeout: 30000
  compression:
    enabled: true
    mime-types: text/html,text/xml,text/plain,application/json,application/javascript

spring:
  profiles:
    active: prod
  datasource:
    hikari:
      maximum-pool-size: 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

logging:
  level:
    root: INFO
    com.mycompany: WARN  # 关键包调高日志级别
  file:
    name: /var/log/myapp/app.log
  logback:
    rollingpolicy:
      max-file-size: 100MB
      max-history: 30

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus,loggers,threaddump
  endpoint:
    health:
      show-details: when_authorized
  server:
    port: 9001  # 独立 Actuator 端口(安全组限制访问)

⚠️ 注意:

  • 禁用 /actuator/env, /actuator/beans 等敏感端点(或通过 Spring Security 严格鉴权)
  • 日志路径使用绝对路径,确保目录存在且应用有写权限(chown myapp:myapp /var/log/myapp

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

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

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

[Service]
Type=simple
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -Xms2g -Xmx2g -jar /opt/myapp/myapp.jar
Restart=always
RestartSec=10
Environment=SPRING_PROFILES_ACTIVE=prod
StandardOutput=journal
StandardError=journal

# 防止 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  # 查看实时日志

✅ 优势:自动重启、日志集成、依赖管理、资源隔离。


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

领域 措施
系统层 • 创建专用非 root 用户(useradd -r -s /sbin/nologin myapp
• 禁用密码登录,仅用 SSH 密钥
• 安装 fail2ban 防暴力破解
应用层 • Nginx 反向X_X(SSL 终结、限流、WAF 规则)
• Spring Security 配置 CSRF、CORS、CSP、HSTS
• 敏感配置(DB 密码、API Key)用 spring-cloud-starter-config 或 Vault 管理
网络层 • 云安全组:仅放行 80/443(HTTP/HTTPS)、9001(仅内网或 X_X 访问 Actuator)
• 关闭 22 端口公网暴露,改用跳板机或 Cloud Shell

✅ 五、监控与运维

工具 用途 推荐配置
Prometheus + Grafana 监控 JVM、HTTP 指标、数据库连接池 Spring Boot Actuator /actuator/prometheus 对接
ELK / Loki 集中式日志分析 Filebeat 收集 /var/log/myapp/*.log → Kafka → Logstash/Elasticsearch
Nginx 反向X_X + SSL + 静态资源托管 配置 HTTP/2、Gzip、缓存头、IP 限流(limit_req
Backup 数据库 + 配置文件自动备份 crontab + mysqldump + rsync 到对象存储(如 OSS/S3)

🚫 避坑清单(血泪经验)

  • ❌ 不要直接用 java -jar xxx.jar 启动(无守护、无日志轮转、OOM 后不自启)
  • ❌ 不要在 application.yml 中硬编码密码(用 --spring.config.import=configserver: 或环境变量)
  • ❌ 不要关闭 spring-boot-starter-validation(参数校验是第一道防线)
  • ❌ 不要忽略 @Transactional 的传播行为和异常类型(默认只对 RuntimeException 回滚)
  • ❌ 不要让 Spring Boot 打包成 fat-jar 后仍用 java -cp 加载外部 jar(类加载冲突!)

🔧 附:一键检查脚本(部署后运行)

# check-env.sh
echo "=== JVM Info ==="
ps aux | grep java | grep -v grep
java -version

echo -e "n=== Memory Usage ==="
free -h
df -h

echo -e "n=== App Status ==="
systemctl is-active myapp
curl -s http://localhost:8080/actuator/health | jq .

echo -e "n=== Logs (last 5 lines) ==="
tail -5 /var/log/myapp/app.log

如需进一步定制(如:高并发场景调优、容器化 Docker 部署、K8s Helm Chart、灰度发布方案),欢迎补充业务规模(QPS/日活/数据量)和架构细节,我可提供针对性方案 👇

是否需要我为你生成:

  • ✅ 完整的 Dockerfile + docker-compose.yml(带 Nginx/PostgreSQL)
  • ✅ Nginx HTTPS 反向X_X配置模板(含 Let’s Encrypt 自动续签)
  • ✅ Prometheus 监控指标采集规则(Grafana Dashboard JSON)?

欢迎随时提出!

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