Phantomjs умирает за счет большого объема памяти [javascript]


Answers

Мне удалось обойти это, установив флаг / LARGEADDRESSAWARE

Если у вас установлена ​​визуальная студия, запустите ее из командной строки visual studio

editbin /LARGEADDRESSAWARE <pathto>/PhantomJS.exe
Question

Мы используем phantomjs для запуска нашей страницы тестов qunit на нашем сервере сборки TFS. Наша версия тестового бегуна построена из нижеследующего примера

https://github.com/ariya/phantomjs/blob/master/examples/run-qunit.js

С течением времени количество тестов увеличилось с сотен до нескольких тысяч, а в прекрасный день фантомцы начали рушиться. Он буквально умирает, говоря, что загружает дамп, и когда вы видите дамп, это 0kb !!

Когда мы внимательно рассмотрели его в обработчике процессов, мы обнаружили, что потребление памяти phantomjs продолжает расти, поскольку phantomjs запускает тесты и в конечном итоге сбой где-то 833 МБ.

Да, тот же объем памяти использовался хром и IE! И да, да, наши тесты были утечкой памяти :( Мы исправили это, использование памяти снизилось на 50% на chrome и IE, и мы ожидали, что phantomjs справятся с этим сейчас. Но нет, phantomjs все еще терпит крах, обработчик процессов показывает одну и ту же память потребление.

http://phantomjs.org/api/webpage/method/close.html

Согласно вышеперечисленной документации phantomjs выпускает распределение кучи только на закрытии? Может ли это быть причиной того, что наш фиксированный тест потреблял меньше памяти на хроме, но не фантомы? И последний, как это исправить? Как сделать phantomjs сохранить сбор мусора javascript-объектов, чтобы уменьшить выделение кучи?

Обновление 1 - 07/28

Мы занялись. Я изменил свой скрипт, чтобы выполнить модуль моих модулей по модулю. В цикле после выполнения всех тестов для модуля я вызываю page.close, чтобы он освобождал память для каждого модуля и никогда не строил мертвую кучу объектов. Не закрывать этот вопрос, так как с его обходным решением, а не решением. Надежды создатели исправит это когда-нибудь.