设置CorbTask的堆大小

时间:2019-04-05 04:21:54

标签: marklogic marklogic-9 ml-gradle marklogic-corb

在我的build.gradle中,我有一个类型为CorbTask的任务,我希望在该任务上通过大量URI执行某些过程。在这种情况下,我处理的URL少于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,堆满空间。当任务运行时……或者至少我早些时候做过,现在至少已经运行了..但是我仍然看到“空闲内存”警告,因为它使uris排队。

WARNING: free memory: 35 MiB of 394

在gradle属性中,我已经设置了org.gradle.jvmargs参数来传递-Xmx设置,但是似乎没有什么区别。我认为这是因为CorbTask扩展了JavaExec,它是衍生出来的。因此,我研究了可能在CorbTask上设置了jvmArgs属性,但这是不可设置的。

有人有什么想法吗?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

为这种情况添加了 DISK-QUEUE 选项。

您可以启用 DISK-QUEUE 选项,而不是尝试增加内存设置并希望可以使用大量URI。

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