Java / Scala Selenium, похоже, пропускает память

#java #scala #selenium #proxy

#java #scala #селен #прокси

Вопрос:

Я пытаюсь создать стабильную систему в Linux, чтобы сделать некоторые приобретения в Scala / Java для создания баз данных, анализа; и т.д., используя Selenium 3 beta 4. Я вижу, что мои процессы неожиданно умирают после 1000 или около того запусков или становятся настолько медленными, что едва работают с использованием xvfb. Как видно ниже, проблемы с пространством кучи, похоже, нет. Есть ли известная проблема, которую я не могу найти в Google и на Github, какая-то утечка в драйвере Gecko? Я использую Firefox 49 и GeckoDriver 10. Есть ли проблема с запуском нескольких браузеров с разными прокси в отдельных потоках? Как я могу решить эту проблему, сохраняя прокси для каждого экземпляра браузера и несколько потоков в одной системе? Нужны ли мне контейнеры Linux для выполнения этой задачи?

Я проверил использование памяти, но оно меньше 2 ГБ. Я установил xmx на 4g. Загрузка процессора составляет 75%. Моя потребность в поддержке прокси исключает возможность использования таких инструментов, как grid. Мне нужны вращающиеся прокси-серверы без добавления крайней степени сложности по 1 прокси на экземпляр с максимально равномерным использованием.

Увеличение скорости от Java не является незначительным, поскольку я могу очень быстро выполнять довольно приличный ETL с использованием потоков. При объединении с пулом клиентов Apache Http Async я могу получить 10 тысяч записей в форме 2NF с некоторой стандартизацией за несколько часов, в отличие от дня или двух с Python. Я также попытался создать браузер в FX, но «незначительная» утечка памяти на основе Oracle с целевым разрешением, по-видимому, в Java 9, связанная с дескрипторами мультимедиа, убивает процесс после 20-25 страниц. На самом деле мне иногда нужно обрабатывать носители.

Я устанавливаю настройки в Capabilities и в FirefoxProfile:

 fp = new FirefoxProfile(path)
  

Мой профиль устанавливает следующее:

 fp.setPreference("app.update.auto",false)
fp.setPreference("app.update.enabled",false)
fp.setPreference("app.update.silent",true)
fp.setPreference("xpinstall.customConfirmationUI",false)
fp.setPreference("extensions.updates.enabled",false)
fp.setPreference("extensions.update.autoUpdateDefault",false)
fp.setPreference("extensions.update.enabled",false)
fp.setPreference("datareporting.policy.dataSubmissionEnabled",false)
fp.setPreference("datareporting.healthreport.uploadEnabled",false)
  

Мои настройки прокси (1 для каждого браузера) устанавливаются с помощью следующего кода:

 fp.setPreference("network.proxy.type",1)
fp.setPreference("network.proxy.http",proxyHost)
fp.setPreference("network.proxy.http_port",proxyPort)
fp.setPreference("network.proxy.ssl",proxyHost)
fp.setPreference("network.proxy.ssl_port",proxyPort)
fp.setPreference("network.proxy.socks",proxyHost)
fp.setPreference("netowrk.proxy.socks_port",proxyPort)
  

Комментарии:

1. пожалуйста, проверьте свое дерево зависимостей и проверьте, есть ли в нем netty 4.0 или async-http-client 2.0. *?

2. @Tolsi io.netty:netty:3.5.7.Final.jar

3. Я действительно не знаю, у меня утечка памяти из-за ForkJoinTask[] (я вижу это с помощью VisualVM на вкладке sampler) с play 2.5. (netty 4.0. * и async-http-client 2.0. *) ws, но после перекомпиляции с netty 4.1 и async-http-client 2.1 alphaон исчез

4. @Tolsi Странной частью для меня было бы то, что из VisualVM вообще нет утечки памяти. Использование памяти значительно ниже максимального, что-то вроде 20 МБ. Я знаю, что проблема не в моем клиенте Apache, потому что я потратил целую вечность на то, чтобы остановить утечку памяти, и оказалось, что в основном это JavaFX.