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