云引擎 Java 运行环境
这篇文档是针对 Java 运行环境的深入介绍,如希望快速地开始使用云引擎,请查看 快速开始部署云引擎应用。
云引擎目前支持使用 Maven 或 Gradle 构建出的 WAR 或 JAR 项目。也支持直接上传 WAR 包。
如果要开始 一个新的项目,建议从我们的示例项目开始:
Java 对内存的需求较高,体验版实例的 256M 内存可能会导致 Java 进程启动时内存不足而崩溃(OOM)导致部署失败,或运行时内存不足而频繁重启。
我们建议 Java 项目至少选用 512 MB 以上的内存,Spring Boot 项目至少选用 1024 MB 以上的内存,并在之后的运行过程中根据内存用量统计随时调整。调整内存规格的方法详见 云引擎平台功能 § 调整实例规格和数量。
启动命令
在完成构建后,云引擎会在 target 和 build 目录下查找 .war 或者 .jar 文件:
- 如果找到
.war会将其放入 Servlet 容器(Jetty 9.x)来运行 - 如果找到
.jar会通过java -jar来运行
配置 JVM 参数
云引擎运行 Java 应用时,会自动将 -Xmx 参数设置为实例规格的 70%,剩下的 30% 留给堆外内存和其他开销。如果你的应用比较特殊(比如大量使用堆外内存)可以自己定制 -Xmx 参数。假设使用 2 GB 内存规格的实例运行,则可以在云引擎的设置页面增加「自定义环境变量」,名称为 JAVA_OPTS,值为 -Xmx1500m,这样会限制 JVM 堆最大为 1.5 GB,剩下 500 MB 留给持久代、堆外内存或者其他一些杂项使用。注意:-Xmx 参数如果设置得过小可能会导致大量 CPU 消耗在反复的 GC 任务上。
配置 Java 版本
在项目根目录创建一个 system.properties 即可配置 Java 的版本:
java.runtime.version=11
目前云引擎支持的版本有 AdoptOpenJDK 8、11、12、13、14。
如未设置 Java 版本,云引擎会默认使用支持的版本中最新的稳定版本(LTS)。
直接上传 WAR 包
在本地构建(如使用 mvn package)出 WAR 包后,可以在使用命令行工具部署时添加 --war 选项表示上传 WAR 包而不是源代码:
tds deploy --war
这种情况下在云端不会有安装依赖和构建的过程,WAR 包会被直接放入 Servlet 容器运行。