我正在推送一个配置了 3g 内存的批处理应用程序,
applications:
- name: batch-app
memory: 3G
services:
- scheduler
buildpack: java_buildpack
为批处理应用程序创建作业
cf create-job batch-app job-name ".java-buildpack/open_jdk_jre/bin/java org.springframework.boot.loader.JarLauncher"
然后按如下方式计划作业:
cf schedule-job job-name "30 * ? * *"
现在,每个计划的作业执行都会失败,并显示以下错误:
2018-10-20 [APP/TASK/612f1b80] [OUT] Exit status 137 (out of memory)
当同一作业作为任务运行时,它也会成功(即使内存少于清单中指定的内存(:
cf run-task job-name ".java-buildpack/open_jdk_jre/bin/java org.springframework.boot.loader.JarLauncher" --name "manual" -m 2GB
我在这里错过了什么?
这现在是可能的。如果您使用的是计划程序版本 1.2.33+,则计划程序 API 支持计划作业以及为计划任务定义内存和磁盘限制的功能。
请参阅发行说明。
请注意,对于调度程序 v1.2.33+,API 支持此功能,但相应版本的 cf cli 调度程序插件不支持。您至少需要 cf cli 调度程序插件的 1.3 版才能支持通过 cli 更改这些值。
您可以从 坦祖网络 这里下载最新的 cf cli 插件。然后安装带有cf install-plugin -f path/to/download/scheduler-for-pcf-cliplugin-macosx64-binary-1.4.0-build.2
插件。
安装最新的插件后,您可以创建作业并使用--memory
和--disk
标志设置限制。
例如:
cf create-job smallest-app say-hi 'echo "Hello World!"' --disk 512M --memory 128M
之后,您可以运行cf run-job example
以查看排队的作业。您也可以像往常一样使用cf schedule-job
或cf run-job
。
我相信较新的调度程序cf cli插件也应该适用于1.2.33 +版本,但是如果您遇到问题。使用curl
发送请求的过程应该仍然有效。
这是用于计划作业的命令,详见 https://docs.pivotal.io/scheduler/1-2/api/#create-job:
curl -i -X POST https://scheduler.run.example.com/jobs?app_guid=$(cf app your-app --guid)
-H 'Content-Type: application/json'
-H 'Accept: application/json'
-H "Authorization: $(cf oauth-token)"
-d "{
"command": "echo 'hi'",
"disk_in_mb": 1024,
"memory_in_mb": 1024,
"name": "example"
}"
其中https://scheduler.run.example.com
是计划程序的位置。这分解为https://scheduler.<system-domain>
,其中system-domain
是安装基础的域。
如果运行cf api
,您将看到 API URL。系统域是https://api.
之后的部分。
例如:
$ cf api
api endpoint: https://api.run.example.com
api version: 2.145.0
在此示例中,"run.example.com"是我的系统域,因此https://scheduler.run.example.com
是我的调度程序 URL。
如果您使用的是 1.2.33 之前的调度程序版本,则不可能。旧版本的计划程序不支持具有自定义内存或磁盘设置。不幸的是,计划的作业也不会使用应用程序的内存限制。它使用在基础上设置的默认内存限制,例如您没有设置内存限制,通常是 1G。
您可以通过几种方式解决此问题。
- 您可以增加平台的默认内存限制。这显然有影响平台上依赖默认值的其他人的缺点。
- 您可以推送仅包装批处理作业的 Web 应用。然后,您可以使用计划程序的调用 API 让计划程序按给定间隔调用 URL。https://docs.pivotal.io/pcf-scheduler/1-2/using-calls.html。这样做的缺点是需要做一些额外的工作。
您可能还会发现这些 API 文档很方便。