单个Spring Boot应用在2C2G服务器上占用多少系统资源?

在 2核2GB(2C2G)的服务器上,一个空的、未做任何优化的默认 Spring Boot 应用(基于 Spring Boot 3.x + JDK 17+,打包为 jar 运行),其典型系统资源占用如下(实测与生产经验综合):

✅ 内存(RAM)占用(关键指标)

场景 JVM 堆内存(-Xmx) 实际 RSS 内存占用 说明
最小启动(无参数,JDK 默认配置) ~256MB(JDK 自动设置) ~350–450 MB 启动后立即观察 ps aux --sort=-%mempmap -x <pid>;含堆、元空间、线程栈、JIT 代码缓存、本地内存(Netty/IO 等)
合理配置(推荐)
-Xms256m -Xmx256m -XX:MetaspaceSize=128m
256MB heap + 128MB metaspace ~320–400 MB 更稳定,避免动态扩容开销;适合轻量服务
极简优化(GraalVM Native Image) —(无 JVM) ~60–120 MB 静态编译,冷启动快,内存极低,但构建复杂、不支持所有反射/动态X_X

🔍 实测参考(Spring Boot 3.2 + JDK 17.0.2,OpenJDK):

$ ps -o pid,rss,comm -p $(pgrep -f 'ApplicationKt')  
  PID   RSS COMMAND  
12345  382192 java     # ≈ 373 MB RSS

✅ CPU 占用

  • 空闲状态(无请求、无定时任务)
    • 持续 CPU 使用率:0.1% ~ 0.5%(主要是 GC 线程、心跳、Spring Scheduler 空轮询等)
    • 短时峰值(如首次类加载、JIT 编译):≤ 100% 单核(约 0.5s),可忽略
  • 简单 HTTP 请求(如 /actuator/health:单次响应 ≈ 2–5ms,CPU 消耗微乎其微

✅ 其他资源

资源 占用情况 备注
磁盘空间 ~15–50 MB JAR 包(含嵌入式 Tomcat/Jetty)+ 日志(logback 默认滚动)
文件描述符(FD) ~50–100 个 Tomcat 默认监听 8080、AJP(若启用)、JMX、日志文件等
线程数(JVM) ~25–40 个 主线程、GC、Tomcat 线程池(默认 200 max,但空闲仅保留 10)、定时调度、Actuator 端点等

⚠️ 关键注意事项(2C2G 下易踩坑!)

  1. 不要裸跑,默认配置会吃光内存!
    JDK 17+ 在容器/小内存环境不再自动适配堆大小(需显式设 -Xmx),否则可能默认分配 1–2GB 堆 → OOM Killer 杀进程。

  2. Tomcat 默认连接池过大

    # application.yml 推荐调优(2C2G 场景)
    server:
     tomcat:
       max-connections: 100      # 降低最大连接数
       accept-count: 20           # 队列长度
       max-threads: 20            # 核心线程数 ≈ 2×CPU cores
       min-spare-threads: 5
  3. 禁用非必要功能(显著降内存):

    management:
     endpoints:
       web:
         exposure:
           include: "health,info"  # 关闭 env, beans, metrics 等(尤其避免暴露 /actuator/env)
    spring:
     main:
       banner-mode: off             # 关闭启动 Banner(省 100KB+)
     output:
       ansi:
         console-available: false   # 禁用 ANSI(终端无关)
  4. 选择轻量 Web 容器(可再省 30–50MB):

    <!-- pom.xml 移除 tomcat,改用 undertow -->
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-web</artifactId>
       <exclusions>
           <exclusion>
               <groupId>org.springframework.boot</groupId>
               <artifactId>spring-boot-starter-tomcat</artifactId>
           </exclusion>
       </exclusions>
    </dependency>
    <dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-undertow</artifactId>
    </dependency>

✅ 总结:2C2G 上的可行方案

场景 推荐配置 预期内存 是否可行
✅ 单应用 + 基础 API + 少量并发(<100 QPS) -Xms256m -Xmx256m -XX:MetaspaceSize=128m + Undertow + 精简 Actuator ~330 MB RSS ✔️ 安全(剩余 ~1.6GB 给 OS/其他进程)
⚠️ 同时跑 MySQL + Redis + Spring Boot ❌ 不推荐 内存严重不足(MySQL 最小需 512MB+) × 建议拆服务或升级配置
✅ 多个轻量 Spring Boot 微服务(如 3–4 个) 每个 -Xmx128m + Quarkus/Spring Native 每个 ~100–150 MB ✔️ 可行(需 careful 资源隔离)

如需进一步优化(如压测数据、GC 日志分析、Docker 内存限制配置),欢迎提供具体场景(如是否用 MyBatis、Redis、消息队列等),我可以给出针对性建议。

未经允许不得转载:CLOUD云枢 » 单个Spring Boot应用在2C2G服务器上占用多少系统资源?