通过 "Scheduler for PCF" 计划的作业失败,并出现内存不足错误



我正在推送一个配置了 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-jobcf 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 文档很方便。

最新更新