在Linux服务器上部署Java应用时,需要注意以下关键配置:
1. Java环境配置
# 选择合适的JDK版本(推荐LTS版本)
# 设置JAVA_HOME环境变量
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk
export PATH=$JAVA_HOME/bin:$PATH
# 验证Java版本
java -version
2. JVM参数优化
# 内存配置(根据服务器内存调整)
-Xms2g -Xmx4g # 堆内存初始和最大值
-XX:MaxMetaspaceSize=512m # 元空间大小
-Xss256k # 线程栈大小
# GC优化(根据应用特点选择)
-XX:+UseG1GC # G1垃圾收集器
-XX:MaxGCPauseMillis=200 # 最大GC暂停时间
# 其他重要参数
-XX:+HeapDumpOnOutOfMemoryError # OOM时生成堆转储
-XX:HeapDumpPath=/path/to/dumps
-Dfile.encoding=UTF-8 # 字符编码
3. 应用部署配置
# 应用目录结构
/opt/your-app/
├── bin/ # 启动脚本
├── conf/ # 配置文件
├── lib/ # 依赖jar包
├── logs/ # 日志目录
└── temp/ # 临时文件
4. 启动脚本配置
#!/bin/bash
# 设置环境变量
export APP_HOME=/opt/your-app
export LOG_DIR=$APP_HOME/logs
# 创建日志目录
mkdir -p $LOG_DIR
# 启动应用
java -jar
-Dspring.profiles.active=prod
-Dlogging.path=$LOG_DIR
-Dserver.port=8080
$APP_HOME/lib/your-app.jar
5. 系统资源配置
# 文件描述符限制
ulimit -n 65535
# 用户进程限制
# 编辑 /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535
* soft nproc 65535
* hard nproc 65535
# 内核参数调整(/etc/sysctl.conf)
vm.swappiness=10
net.core.somaxconn=65535
6. 网络和安全配置
# 防火墙配置
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
# 使用非root用户运行
useradd -r -s /bin/false appuser
chown -R appuser:appuser /opt/your-app
7. 日志管理
# 日志轮转配置(/etc/logrotate.d/your-app)
/opt/your-app/logs/*.log {
daily
rotate 30
compress
missingok
notifempty
create 644 appuser appuser
}
8. 监控和运维
# 健康检查端点(Spring Boot示例)
management.endpoints.web.exposure.include=health,metrics,info
management.endpoint.health.show-details=always
# 使用systemd管理服务
# /etc/systemd/system/your-app.service
[Service]
User=appuser
WorkingDirectory=/opt/your-app
ExecStart=/opt/your-app/bin/start.sh
9. 容器化部署(可选)
# Dockerfile示例
FROM openjdk:11-jre-slim
COPY target/app.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
最佳实践建议:
- 环境分离:区分开发、测试、生产环境配置
- 配置外部化:使用外部配置文件或配置中心
- 版本管理:明确记录JDK和应用版本
- 备份策略:定期备份配置和重要数据
- 监控告警:设置JVM和应用性能监控
根据具体应用类型(Spring Boot、Tomcat等)和业务需求,可能还需要额外的特定配置。
CLOUD技术笔记