linux java服务器部署
- 云服务器
- 2025-08-25
- 5
环境准备
1 系统要求
| 组件 | 最低版本/配置 | 推荐版本/配置 |
|---|---|---|
| Linux内核 | ≥2.6 | ≥4.x(如Ubuntu 20.04+) |
| Java运行时 | OpenJDK 8+ | OpenJDK 11/17 LTS |
| 内存 | 2GB RAM(小型应用) | 4GB+(生产环境建议) |
| 磁盘空间 | 剩余10GB可用 | 剩余20GB+ |
| 网络带宽 | 百兆基础 | 根据并发量动态调整 |
2 依赖包安装(以CentOS为例)
# 更新软件源 sudo yum update -y # 安装必要工具链 sudo yum install -y wget unzip net-tools tree curl policycoreutils-java # 设置Java优先选择顺序(若多版本共存) sudo alternatives --config java
注意:Ubuntu系使用apt install openjdk-<version>替代yum命令。
JDK安装与配置
1 下载官方发行版
访问Oracle官网或Adoptium开源仓库获取对应架构的tar.gz包:
wget https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.9%2B9/OpenJDK17U-jdk_x64_linux_hotspot_17.0.9_9.tar.gz
2 解压并部署
mkdir /usr/local/java && tar zxvf OpenJDK17U-jdk_x64_linux_hotspot_.tar.gz -C /usr/local/java/ chown -R root:root /usr/local/java/
3 环境变量设置
编辑/etc/profile追加以下内容:

执行生效命令:source /etc/profile,通过java -version验证安装结果。
应用部署流程
1 上传项目包
使用SCP工具传输打包好的WAR/JAR文件至服务器:

或直接通过FTP客户端上传至指定目录。
2 Tomcat容器化部署(示例)
| 步骤 | 命令行操作 |
|---|---|
| 创建目录结构 | mkdir -p /data/tomcat/webapps && chown -R tomcat:tomcat /data/tomcat |
| 放置应用包 | 将myapp.war放入/data/tomcat/webapps/目录下 |
| 启动服务 | systemctl start tomcat(需先配置Systemd单元文件) |
| 访问测试 | 浏览器输入http:// |
替代方案:Spring Boot应用可直接用nohup java -jar myapp.jar > log.out 2>&1 &后台运行。
3 Nginx反向代理配置
编辑/etc/nginx/conf.d/default.conf添加:

location /api/ { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
重启服务使配置生效:nginx -s reload
进程守护方案对比
| 方案名称 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Systemd | 原生支持日志捕获、开机自启 | 学习曲线较陡 | 长期稳定运行的服务 |
| Supervisor | 可视化管理界面,配置简单 | 资源占用略高 | 多进程协作型应用 |
| PM2(Node生态) | 实时性能监控面板 | Java非原生生态适配性一般 | Node.js混编项目 |
| nohup+& | 零依赖快速实现 | 缺乏优雅退出机制 | 临时调试用途 |
日志管理规范
1 标准输出重定向
# 将控制台日志同时写入文件和滚动显示 java -Dlogging.level=INFO -jar app.jar > /var/log/app/stdout.log 2>&1 & tail -f /var/log/app/stdout.log # 实时查看最新日志
2 日志切割策略(Logrotate示例)
创建配置文件/etc/logrotate.d/javaapp:
/var/log/app/.log { daily # 每天轮转一次 missingok # 忽略丢失的文件不报错 rotate 7 # 保留最近7天的日志文件 compress # 启用gzip压缩旧日志 delaycompress # 延迟一天后才开始压缩 notifempty # 如果日志为空则不处理 }
常见问题与解答
Q1: Java进程突然消失怎么办?
A: 按以下顺序排查:
1️⃣ 检查内存使用情况(free -m),确认是否触发OOM Killer;
2️⃣ 查看系统日志(journalctl -xe | grep java);
3️⃣ 验证启动参数合法性,特别是堆大小设置(建议不超过物理内存的80%);
4️⃣ 确保应用程序没有未捕获的异常导致主动退出。
Q2: 如何优化GC性能?
A: 推荐组合策略:
添加JVM参数示例:-XX:+UseG1GC -Xms2g -Xmx2g -XX:MaxGCPauseMillis=200;
启用垃圾回收日志分析:-Xlog:gc:file=/var/log/gc.log;
使用VisualVM或JConsole进行可视化调优;
对堆外内存进行监控(可通过jmap --heap命令