HtmlUnit выбрасывает из памяти и, возможно, утечка памяти - PullRequest
2 голосов
/ 24 сентября 2011

Я использую Selenium с HtmlUnitDriver с включенным javascript и получаю ошибки Out Of Memory (я использую Java) Я просто просматриваю ту же страницу. Я использую только одну команду GET. Какое решение преодолеть ситуацию?

Ответы [ 3 ]

2 голосов
/ 28 сентября 2011

У меня была похожая проблема. В результате возникла проблема с автоматической загрузкой кадров ... функция, которую нельзя отключить.

Взгляните на это: Чрезвычайно простой код не работает в HtmlUnit

Это может помочь.

Обновление

Текущая версия HtmlUnit - 2.10. Я начал использовать HtmlUnit с версии 2.8, и каждая новая версия в конечном итоге потребляла больше памяти. Я дошел до того, что загрузка 5 страниц с включенным javascript привела к процессу размером 2 ГБ.

Есть много способов улучшить эту ситуацию с точки зрения javascript. Однако, когда вы не можете изменить javascript (например, если вы сканируете сайт), ваши руки связаны. Отключение javascript - это, конечно, лучший способ. Однако это может привести к тому, что выбранные страницы будут отличаться от ожидаемых.

Мне все же удалось преодолеть эту ситуацию. После многих тестов я заметил, что это не может быть проблемой с HtmlUnit (который я считал виновным с самого начала). Казалось, что это JVM. Переход от Sun JVM к OpenJDK добился цели, и теперь процесс, вместо того, чтобы использовать 2 ГБ памяти, требует только 200 МБ. Я добавляю информацию о версии.

Sun (Oracle) 32-битная JVM:

$java -version
java version "1.6.0.26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)

OpenJDK 32-битная JVM:

$java -version
java version "1.6.0_18"
OpenJDK Runtime Environment (IcedTea6 1.8.13) (6b18-1.8.13-0+squeeze2)
OpenJDK Server VM (build 14.0-b16, mixed mode)

Оперативная система:

$ uname -a
Linux vostro1015 2.6.32-5-686-bigmem #1 SMP Sun May 6 04:39:05 UTC 2012 i686 GNU/Linux

Пожалуйста, поделитесь своим опытом с этим.

1 голос
/ 24 сентября 2011

Дайте больше памяти JVM, добавив ее в командную строку Java, которая запускает JVM, в которой работает Selenium:

-Xmx512m

В этом примере для JVM предоставляется максимум 512 Мб.*

Это зависит от того, откуда вы запускаете Selenium.Если maven, вы можете добавить его в переменную окружения MAVEN_OPTS, если Eclipse, вам нужно отредактировать конфигурацию запуска для тестового класса и т. Д.

0 голосов
/ 08 января 2013

Относящиеся к HtmlUnit:

Не забудьте позвонить webClient.closeAllWindows();.Я всегда помещаю его в finally -блок вокруг области, в которой я использую веб-клиента.Таким образом, можно быть уверенным, что весь javascript остановлен и все ресурсы освобождены.

Также полезной является настройка для webClient:

    webClient.setJavaScriptTimeout(JAVASCRIPT_TIMOUT);
    webClient.setTimeout(WEB_TIMEOUT);
    webClient.setCssEnabled(false);  // for most pages you do not need css to be enabled
    webClient.setThrowExceptionOnScriptError(false); // I never want Exceptions because of javascript

JAVASCRIPT_TIMOUT, которая не должна быть слишком длиннойзапуск JavaScript может быть причиной проблем с памятью.WEB_TIMEOUT подумайте, как долго вы хотите ждать максимум.

...