为 CorbTask 设置堆大小

Setting heap size for CorbTask

在我的 build.gradle 中,我有一个 CorbTask 类型的任务,我希望在其中对大量 URI 执行一些进程。在本例中,我处理的 URI 少于 800,000 个。

task updateSharePointMetadata(type: com.marklogic.gradle.task.CorbTask) {
  classpath = configurations.corb
  xccUrl = "xcc://${mlUsername}:${mlPassword}@${mlHost}:${mlStagingPort}"
  urisModule = "corb/selectSharepointMetadata.xqy|ADHOC"
  processModule = "corb/updateBinarySizeInSharePointMetadata.xqy|ADHOC"
  threadCount = 8
  batchSize = 100
  batchUriDelim=','
}

当我 运行 这个任务...在排队 URI 的过程中,我得到一个 OutOfMemoryError,Out of Heap space。当任务是 运行... 或至少我之前做过,现在至少是 运行s.. 但我仍然看到空闲内存警告,因为它将 uris 排队。

WARNING: free memory: 35 MiB of 394

在 gradle 属性中,我已经设置了 org.gradle.jvmargs 参数以传递给 -Xmx 设置,但这似乎没有任何区别。我假设这是因为 CorbTask 扩展了产生的 JavaExec。所以我考虑在 CorbTask 上设置 jvmArgs 属性,但那是不可设置的。

有没有人有什么想法?

上面@grtjn 的评论解决了这个问题。

tasks.withType(JavaExec) { jvmArgs = ['-Xms1g', '-Xmx2g'] }

为此类场景添加了DISK-QUEUE选项。

您可以启用 DISK-QUEUE 选项,而不是试图提高您的内存设置并希望大量 URI 能够适应。

  • 您可以配置DISK-QUEUE-MAX-IN-MEMORY-SIZE,这将限制在内存中排队的URI 数量。其余的将溢出到临时文件中的磁盘。
  • 您可以使用 DISK-QUEUE-TEMP-DIR 设置生成文件的位置(默认位置是 java.io.tmpdir)