Установка размера кучи для CorbTask - PullRequest
2 голосов
/ 05 апреля 2019

В моем 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 space.Когда задача запущена ... или, по крайней мере, я сделал это раньше, теперь, по крайней мере, она запускается ... но я все еще вижу предупреждение о свободной памяти, поскольку оно ставит в очередь URIS.

WARNING: free memory: 35 MiB of 394

В свойствах gradleУ меня уже есть настройка параметра org.gradle.jvmargs для передачи настройки -Xmx, но, похоже, это не имеет значения.Я предполагаю, что это потому, что CorbTask расширяет JavaExec, который порождается.Поэтому я посмотрел на настройку свойства jvmArgs в CorbTask, но его нельзя установить.

У кого-нибудь есть идеи?

Ответы [ 2 ]

2 голосов
/ 05 апреля 2019

Для таких сценариев была добавлена ​​опция DISK-QUEUE .

Вместо того, чтобы пытаться увеличить настройки памяти и надеяться, что большой набор URI подойдет, вы можете включить опцию DISK-QUEUE .

  • Вы можете настроить DISK-QUEUE-MAX-IN-MEMORY-SIZE , который установит ограничение на количество URI, помещенных в очередь в памяти. Остальное попадет на диск во временных файлах.
  • Вы можете указать, где будут создаваться файлы, с помощью DISK-QUEUE-TEMP-DIR (по умолчанию это java.io.tmpdir)
2 голосов
/ 05 апреля 2019

Комментарий от @grtjn выше решает проблему.

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