Java服务器的配置要求取决于应用类型、并发量、业务复杂度等因素。以下是一些通用的配置建议和关键考虑因素,供参考:
1. 基础硬件配置
小型应用/开发环境
- CPU: 2核以上(如轻量级Web服务、微服务)
- 内存: 4GB~8GB(JVM堆内存建议分配2GB~4GB)
- 磁盘: 50GB SSD(系统 + 日志 + 应用)
- 网络: 1Gbps带宽(低并发场景)
中等规模生产环境
- CPU: 4核~8核(如电商后端、API服务)
- 内存: 8GB~16GB(JVM堆内存建议4GB~8GB)
- 磁盘: 100GB~200GB SSD(需考虑日志轮转和持久化数据)
- 网络: 1Gbps~10Gbps(根据并发量调整)
高并发/大型应用
- CPU: 16核以上(如高流量Web、大数据处理)
- 内存: 32GB+(JVM堆内存建议不超过物理内存的70%)
- 磁盘: RAID SSD或NVMe(高频IO场景需高性能存储)
- 网络: 10Gbps+(可能需要负载均衡)
2. JVM参数优化
- 堆内存(关键参数):
-Xms4g -Xmx4g # 初始和最大堆内存(建议设为相同值避免动态调整开销) -XX:MaxMetaspaceSize=512m # 元空间限制 - 垃圾回收器(根据吞吐量/延迟需求选择):
- G1 GC(通用场景):
-XX:+UseG1GC -XX:MaxGCPauseMillis=200 - ZGC(低延迟):
-XX:+UseZGC -Xmx16g
- G1 GC(通用场景):
- 其他参数:
-XX:+HeapDumpOnOutOfMemoryError # OOM时生成堆转储 -Dfile.encoding=UTF-8 # 统一编码
3. 操作系统优化
- 文件描述符限制(高并发时需调整):
ulimit -n 65535 # Linux下修改 - 内核参数(如TCP连接复用):
net.ipv4.tcp_tw_reuse = 1 net.core.somaxconn = 1024 - 时区与语言:确保服务器时区与业务一致(如
Asia/Shanghai)。
4. 中间件与依赖配置
- Web容器(Tomcat/Jetty等):
- 调整线程池(如Tomcat的
maxThreads根据并发量设置)。 - 禁用不必要的协议(如AJP)。
- 调整线程池(如Tomcat的
- 数据库连接池(HikariCP/Druid):
spring.datasource.hikari.maximum-pool-size=20 # 根据DB性能调整 - 缓存:Redis/Memcached连接数需与内存匹配。
5. 监控与日志
- 监控工具:Prometheus + Grafana(监控JVM、CPU、内存)。
- 日志管理:Log4j2/Logback配置异步日志,避免IO阻塞。
- APM工具:SkyWalking、Arthas(诊断性能瓶颈)。
6. 云环境建议
- 容器化:Docker + Kubernetes时,需限制容器资源(如CPU配额、内存Limit)。
- 弹性伸缩:根据CPU利用率(70%~80%)或QPS自动扩缩容。
7. 安全配置
- 防火墙:限制非必要端口(如仅开放80/443)。
- JVM安全策略:启用安全管理器(如
-Djava.security.manager)。 - 定期更新:JDK版本需定期升级(如OpenJDK LTS版本)。
示例场景
Spring Boot应用(日活10万)
- 配置: 4核CPU / 8GB内存 / 100GB SSD
- JVM:
-Xms6g -Xmx6g -XX:+UseG1GC -XX:MaxGCPauseMillis=150 - Tomcat:
server.tomcat.max-threads=200 server.tomcat.accept-count=100
根据实际压力测试(如JMeter)调整配置,避免过度分配或资源不足。生产环境建议通过监控工具动态优化。
云服务器