在我的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
属性,但这是不可设置的。
有人有什么想法吗?
答案 0 :(得分:2)
上面@grtjn的评论解决了这个问题。
tasks.withType(JavaExec) { jvmArgs = ['-Xms1g', '-Xmx2g'] }
答案 1 :(得分:2)
为这种情况添加了 DISK-QUEUE 选项。
您可以启用 DISK-QUEUE 选项,而不是尝试增加内存设置并希望可以使用大量URI。