设置CorbTask的堆大小

问题描述 投票:2回答:2

在我的build.gradle中,我有一个类型为CorbTask的任务,我希望在大量的URI上执行一些进程。在这种情况下,我正在处理少于800,000个URI。

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空间。当任务运行...或者至少我之前做过,现在至少它运行..但我仍然看到自由内存警告,因为它排队uris。

WARNING: free memory: 35 MiB of 394

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

有没有人有任何想法?

marklogic marklogic-9 ml-gradle marklogic-corb
2个回答
2
投票

为这样的场景添加了DISK-QUEUE选项。

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

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

2
投票

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

tasks.withType(JavaExec) { jvmArgs = ['-Xms1g', '-Xmx2g'] }
© www.soinside.com 2019 - 2024. All rights reserved.