在部署 Java 项目到服务器时,合理配置服务器性能参数对于项目的稳定性、响应速度和资源利用率至关重要。以下是一个全面的指南,涵盖服务器硬件选择、JVM 参数调优、操作系统优化、线程池设置、数据库连接池、日志管理等关键方面。
🧩 一、服务器硬件配置建议
| 项目规模 | CPU(核) | 内存(GB) | 磁盘(SSD) | 带宽(Mbps) | 备注 |
|---|---|---|---|---|---|
| 小型(测试/单机) | 2~4 核 | 4~8 GB | 50~100 GB SSD | 10~20 Mbps | 单实例部署 |
| 中型(生产/轻量级服务) | 4~8 核 | 16~32 GB | 200~500 GB SSD | 50~100 Mbps | 可部署多个微服务 |
| 大型(高并发/分布式系统) | 16 核以上 | 64 GB+ | 1 TB+ SSD | 100 Mbps+ | 集群部署,负载均衡 |
注意:
- JVM 内存一般不超过物理内存的 70%,避免 OOM。
- 如果使用 Spring Boot + MySQL + Redis,至少预留 2~4GB 给其他组件。
⚙️ 二、JVM 调优参数推荐(HotSpot)
1. 基础参数
-Xms2g -Xmx2g
-XX:MaxMetaspaceSize=512m
-XX:+UseG1GC
-XX:+PrintGCDetails -XX:+PrintGCDateStamps
-Xloggc:/path/to/gc.log
2. 性能优化建议
-XX:+DisableExplicitGC # 禁止 System.gc()
-XX:+ParallelRefProcEnabled # 并行处理引用对象
-XX:+UnlockExperimentalVMOptions
-XX:+UseStringDeduplication # G1 下开启字符串去重(Java 8+)
-XX:MaxGCPauseMillis=200 # 控制最大停顿时间
3. GC 日志分析工具推荐:
- GCViewer
- GCEasy
jstat/jvisualvm/JConsole
📈 三、线程池与异步任务配置
Spring Boot 默认使用 Tomcat 线程池:
server:
tomcat:
max-threads: 200
min-spare-threads: 20
自定义线程池示例(适用于异步/定时任务):
@Bean("taskExecutor")
public ExecutorService taskExecutor() {
int corePoolSize = Runtime.getRuntime().availableProcessors() * 2;
return new ThreadPoolTaskExecutor(
corePoolSize,
corePoolSize * 2,
60L, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(1000),
new ThreadPoolTaskExecutor.CallerRunsPolicy());
}
💾 四、数据库连接池配置(如 HikariCP)
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
idle-timeout: 30000
max-lifetime: 1800000
connection-timeout: 30000
pool-name: MyHikariCP
连接池大小应根据数据库承载能力调整,避免数据库瓶颈。
🌐 五、Tomcat/Nginx 性能优化
1. Tomcat 优化(application.yml)
server:
port: 8080
tomcat:
accept-count: 100
max-connections: 10000
max-http-form-post-size: 10MB
2. Nginx 优化(nginx.conf)
http {
client_max_body_size 10M;
upstream backend {
least_conn;
server 127.0.0.1:8080 weight=3;
keepalive 32;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
}
}
}
📁 六、日志与监控
1. 日志输出优化
- 使用
logback或log4j2 - 异步日志输出,减少 I/O 阻塞
- 按天滚动日志文件,保留一定周期
2. 监控工具推荐
- APM 工具:
- SkyWalking
- Pinpoint
- Zipkin
- 指标监控:
- Prometheus + Grafana
- JVM 监控:
- JMX Exporter
- VisualVM
🔐 七、安全与防护配置
- 使用 HTTPS(Let’s Encrypt 免费证书)
- 防止 DDoS(Nginx 限流模块)
- SQL 注入过滤(MyBatis、Hibernate 自带防注入机制)
- 权限控制(Spring Security / Shiro)
📦 八、容器化部署建议(Docker)
FROM openjdk:17-jdk-alpine
COPY *.jar app.jar
ENTRYPOINT ["java", "-Xms512m", "-Xmx2g", "--enable-preview", "-jar", "app.jar"]
Kubernetes 配置建议:
- 设置合理的 memory/cpu limits
- 启用 readiness/liveness 探针
- 使用 Horizontal Pod Autoscaler
✅ 总结:典型配置模板(Spring Boot + MySQL)
server:
port: 8080
tomcat:
max-threads: 200
accept-count: 100
spring:
datasource:
url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
username: root
password: 123456
hikari:
maximum-pool-size: 20
connection-timeout: 30000
jpa:
properties:
hibernate:
use-new-id-generator-mappings: false
format_sql: true
logging:
level:
org.hibernate.SQL: DEBUG
org.hibernate.type.descriptor.sql.BasicBinder: TRACE
如果你提供更具体的项目类型(如 Spring Boot、微服务、电商、社交平台等),我可以给出更定制化的配置建议。需要吗?
云知识