Java服务性能需求与部署指南
基础服务资源需求
| 服务名称 | CPU核数 | 内存需求 | 说明与建议 |
|---|---|---|---|
| ✅ Spring Boot 基础服务 | ≥1核 | ≥512MB | 控制依赖包大小,-Xms256m -Xmx512m,中小业务系统基本运行无压力 |
| ✅ Spring Boot + Security | ≥1核 | ≥768MB | 安全模块略微增加开销,建议设置 Xmx=768m |
| ✅ Spring Cloud 单个服务 | ≥2核 | ≥1GB | 注册中心、配置中心等每个都需独立内存,需微服务拆分合理 |
| ✅ Spring Boot + Redis Client | ≥1核 | ≥512MB | 调用Redis服务,自己不部署Redis Server,开销较小 |
| ✅ MinIO 单实例 | ≥1核 | ≥512MB~1GB | MinIO轻量,但文件多或并发高时内存吃紧,建议单独容器运行 |
| ✅ MongoDB | ≥2核 | ≥1.5GB | 可用于中小型文档存储系统,不建议与其他服务混布 |
| ✅ MySQL(轻量) | ≥1核 | ≥1GB | 数据量不大、查询不复杂时可用,建议控制连接数与缓存大小 |
| ✅ Nginx / 网关 | ≥0.5核 | ≥128MB | 非常轻量,做反代或限流即可,建议与主服务隔离容器运行 |
扩展服务资源需求
| 服务名称 | CPU核数 | 内存需求 | 说明与建议 |
|---|---|---|---|
| ✅ Elasticsearch | ≥2核 | ≥2GB | 搜索引擎服务,内存密集型,建议堆内存设置为物理内存的50% |
| ✅ Redis Server | ≥1核 | ≥512MB~2GB | 根据缓存数据量调整,持久化开启时需要额外内存 |
| ✅ RabbitMQ | ≥1核 | ≥512MB | 消息队列服务,消息堆积时内存需求增加 |
| ✅ Kafka | ≥2核 | ≥1GB | 高吞吐量消息队列,建议独立部署,配置足够的磁盘空间 |
| ✅ Nacos | ≥1核 | ≥512MB | 注册中心和配置中心,集群模式需要更多资源 |
| ✅ Zipkin | ≥1核 | ≥512MB | 链路追踪服务,数据量大时需要增加内存 |
| ✅ Prometheus | ≥1核 | ≥1GB | 监控数据收集,时序数据库,需要足够的存储空间 |
| ✅ Grafana | ≥0.5核 | ≥256MB | 监控面板,资源需求较小 |
JVM 参数优化建议
基础配置
# 小型服务 (512MB)
-Xms256m -Xmx512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m
# 中型服务 (1GB)
-Xms512m -Xmx1024m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m
# 大型服务 (2GB+)
-Xms1g -Xmx2g -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1g
GC 优化
# G1GC (推荐用于大内存应用)
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:G1HeapRegionSize=16m
# ParallelGC (适用于吞吐量优先场景)
-XX:+UseParallelGC -XX:ParallelGCThreads=4
# ZGC (低延迟场景,JDK 11+)
-XX:+UseZGC -XX:+UnlockExperimentalVMOptions
Docker 部署建议
资源限制
# docker-compose.yml 示例
version: '3.8'
services:
spring-boot-app:
image: your-app:latest
deploy:
resources:
limits:
cpus: '1.0'
memory: 512M
reservations:
cpus: '0.5'
memory: 256M
environment:
- JAVA_OPTS=-Xms256m -Xmx512m
健康检查
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
监控指标
关键指标
- CPU 使用率: < 70%
- 内存使用率: < 80%
- GC 频率: Full GC < 1次/小时
- 响应时间: P95 < 500ms
- 错误率: < 0.1%
监控配置
# application.yml
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
metrics:
export:
prometheus:
enabled: true
性能优化建议
应用层优化
连接池配置
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000缓存策略
- 使用 Redis 缓存热点数据
- 合理设置缓存过期时间
- 避免缓存穿透和雪崩
异步处理
@Async
@EventListener
public void handleEvent(CustomEvent event) {
// 异步处理业务逻辑
}
系统层优化
文件描述符限制
ulimit -n 65536TCP 参数调优
echo 'net.core.somaxconn = 65535' >> /etc/sysctl.conf
echo 'net.ipv4.tcp_max_syn_backlog = 65535' >> /etc/sysctl.conf
故障排查
常见问题
内存溢出 (OOM)
- 检查堆内存设置
- 分析内存泄漏
- 调整 GC 参数
CPU 使用率过高
- 检查死循环代码
- 分析 GC 频率
- 优化算法复杂度
响应时间过长
- 检查数据库查询
- 分析网络延迟
- 优化缓存策略
诊断工具
# JVM 诊断
jstat -gc <pid> 1s
jmap -histo <pid>
jstack <pid>
# 系统诊断
top -p <pid>
iostat 1
netstat -an
部署环境建议
开发环境
- CPU: 1-2核
- 内存: 2-4GB
- 存储: SSD 20GB+
测试环境
- CPU: 2-4核
- 内存: 4-8GB
- 存储: SSD 50GB+
生产环境
- CPU: 4-8核
- 内存: 8-16GB
- 存储: SSD 100GB+
- 网络: 千兆网卡
- 备份: 定期数据备份
注意: 以上配置仅供参考,实际部署时需要根据具体业务场景和负载情况进行调整。建议在生产环境部署前进行充分的压力测试。