Ошибки нехватки памяти с размером permsize 1024M и размером кучи 2048M для XML-файлов, обрабатываемых внутри цикла for-each в XPL, каждый размером около 4,5 МБ на диске - PullRequest
0 голосов
/ 02 июня 2011

У меня есть несколько циклов for-each, которые я использую для перебора элементов XML-файла конфигурации очень маленького размера (2 КБ на диске) для динамического получения исходного URL-адреса и целевого URL-адреса. Затем я извлекаю данные из исходного URL-адреса, используя URLGenerator (потому что он выполняет потоковую передачу), и загружаю их в базу данных XML, используя процессор XForms Submissions. Исходные и целевые URL-адреса вычисляются динамически, и самые внутренние циклы, где происходит поиск и загрузка, происходят в общей сложности примерно 32 раза, каждый раз с файлом XML в среднем около 4,5 МБ (макс. Около 6 МБ, мин. Несколько КБ ). Каждый раз, когда я пытаюсь это сделать, у меня возникает ошибка нехватки памяти для Tomcat, работающего с щедро распределенными размерами permgen и heap, JVM - 32-разрядная, ОС - 32-разрядная; Я хочу выход из этой ошибки нехватки памяти:

  1. Я думал, что отдельные представления XForms будут отдельными транзакциями, поэтому не будут накапливаться, вызывая проблему нехватки памяти
  2. Есть ли способ выполнить потоковую загрузку, используя процессор XForms Submissions вместо создания полного документа в памяти?
  3. Я не знаю, поможет ли это, но есть ли способ выполнить агрессивную сборку мусора в Orbeon, чтобы у меня не возникало проблем с нехваткой памяти?

При необходимости я могу выложить код здесь (для XPL).

Исходный код (в ответ на комментарий с просьбой об этом)

1 Ответ

0 голосов
/ 03 июня 2011
  1. Если вы запустите oxf:xforms-submission внутри цикла, они будут выполняться независимо, а загрузка 30 документов в цикле займет только память, необходимую для самого большого документа.
  2. Требуется отправка XFormsиметь полный документ в памяти, чтобы иметь возможность загрузить его;он не поддерживает потоковую передачу (в отличие от oxf:url-generator).
  3. Настройка виртуального пергена VM по умолчанию часто слишком мала, поэтому я рекомендую вам попробовать увеличить пространство permgen .
...