部署Java应用在Linux服务器时,需综合考虑硬件、软件及环境配置。以下为详细要求和建议:
一、硬件配置
-
CPU
- 轻量级应用(如小型Web服务):1-2核
- 高并发/计算密集型(如电商、大数据):4核以上,建议多线程优化。
- 建议:优先选择高频CPU(如Intel Xeon或AMD EPYC)。
-
内存(RAM)
- 基础应用:2-4GB(如Spring Boot单体应用)。
- 微服务/大型应用:8GB+,按服务数量动态扩展。
- JVM调优:堆内存(
-Xms/-Xmx)建议不超过总内存的70%(避免Swap开销)。
-
存储
- SSD:必备(高IOPS,降低磁盘I/O瓶颈)。
- 容量:
- 系统盘:20GB+(Linux基础)。
- 数据盘:根据日志、数据库等需求扩展(建议50GB+)。
- RAID:生产环境建议RAID 10(兼顾性能与冗余)。
-
网络
- 带宽:
- 内部API:1Gbps内网。
- 对外服务:按用户量预估(如1000并发需至少10Mbps公网)。
- 延迟:关键应用部署在靠近用户的区域(如CDN或边缘节点)。
- 带宽:
二、软件环境
-
操作系统
- 推荐发行版:
- 稳定首选:CentOS 7/8 Stream、Ubuntu LTS(20.04/22.04)、RHEL。
- 轻量级:Alpine Linux(容器场景)。
- 内核版本:4.x+(支持最新Java特性如虚拟线程需Linux 6.x+)。
- 推荐发行版:
-
Java环境
- JDK版本:
- 长期支持(LTS):OpenJDK 11/17/21(推荐Azul Zulu或Oracle JDK)。
- 容器化:使用
jlink裁剪自定义JRE。
- 安装方式:
# Ubuntu/Debian sudo apt install openjdk-17-jdk # CentOS/RHEL sudo yum install java-17-openjdk-devel
- JDK版本:
-
依赖工具
- 构建工具:Maven/Gradle。
- 容器化:Docker + Kubernetes(如需编排)。
- 监控:Prometheus + Grafana(集成JMX导出器)。
三、服务器优化
-
JVM参数调优
- 示例启动参数:
java -Xms2G -Xmx2G -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar app.jar - 关键参数:
-XX:+HeapDumpOnOutOfMemoryError:内存溢出时保存快照。-XX:NativeMemoryTracking=summary:追踪Native内存泄漏。
- 示例启动参数:
-
系统调优
- 文件描述符:
ulimit -n 65535 # 防止高并发下"Too many open files" - 内核参数(
/etc/sysctl.conf):vm.swappiness = 10 # 减少Swap使用 net.core.somaxconn = 4096 # 提高TCP队列
- 文件描述符:
-
安全配置
- 防火墙:仅开放必要端口(如80/443/SSH)。
sudo ufw allow 8080/tcp # Ubuntu示例 - 定期更新:
yum update/apt upgrade(含安全补丁)。
- 防火墙:仅开放必要端口(如80/443/SSH)。
四、部署策略
-
容器化部署
-
使用Dockerfile多阶段构建减小镜像体积:
FROM eclipse-temurin:17-jdk as builder WORKDIR /app COPY . . RUN ./gradlew build FROM eclipse-temurin:17-jre COPY --from=builder /app/build/libs/app.jar /app.jar CMD ["java", "-jar", "/app.jar"]
-
-
高可用方案
- 负载均衡:Nginx/HAProxy + 多实例部署。
- 健康检查:Spring Boot Actuator
/health端点。
五、监控与日志
-
日志管理
- 工具:Log4j2/Logback + ELK Stack(集中收集)。
- 日志轮转:配置
logrotate避免磁盘占满。
-
性能监控
- JVM工具:
jstat、jstack、VisualVM。 - 系统级:
top、vmstat、sar(Sysstat包)。
- JVM工具:
六、扩展建议
- 云服务选择:
- AWS:EC2(c5.large适合计算优化)+ EBS gp3。
- 阿里云:ECS通用型g7 + ESSD云盘。
- Serverless:低流量场景考虑AWS Lambda(需GraalVM编译)。
根据实际业务需求调整配置,测试环境应模拟生产压力(如JMeter压测)。
云服务器