云引擎 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 容器运行。
安装依赖和构建
如果上传了源代码,云引擎会自动安装依赖并构建。
云引擎会根据项目根目录是否存在 pom.xml
或 gradlew
文件来判断所使用的包管理器,然后使用对应的 Maven 或 Gradle 命令来安装依赖并构建。
自定义构建过程
除了默认的构建过程和运行命令外,开发者还可以在 leanengine.yaml
中进一步地调整运行命令(run
)、依赖安装命令(install
)和构建命令(build
),覆盖默认的行为:
run: echo 'run another command'
install:
- {use: 'default'}
- echo 'install additional dependencies here'
build:
- echo 'overwrite default build command here'
详细的说明见 Reference: leanengine.yaml
,下面是一些具体的例子:只上传 jar 包而不在线上进行构建
runtime: java
install: []
build: []
run: java -jar your-package.jar
在这里我们指定了使用 Java 运行时、将依赖安装和构建步骤覆盖为空,然后直接指定了运行命令(运行项目根目录下的 your-package.jar
)。