Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Codeception съедает много памяти

codeception
php
Теги: #<Tag:0x00007f7b63e28098> #<Tag:0x00007f7b64d63d50>

(Russ Eagle) #1

Используем Yii2 Advanced App Template, тестируем все приложения на отдельной виртуальной машине. После запуска тестов все идёт нормально, но чем дольше идёт тестирование, тем больше памяти съёдает PHP. В определённый момент памяти на ВМ стаёт недостаточно и тесты валятся. Сейчас у нас около 1000 тестов. Пик памяти выделеной по PHP перед обвалом, примерно 600Мб.

Тесты запускаем с помощью команды: codecept run --steps --xml -n --no-colors

Вот последнее, что было записано в лог:

2015-03-30 09:23:08 [][-][-][error][yii\base\ErrorException:2] exception 'yii\base\ErrorException' with message 'proc_open(): fork failed - Cannot allocate memory' in /opt/.composer/vendor/symfony/console/Symfony/Component/Console/Application.php:974
Stack trace:
#0 [internal function]: yii\base\ErrorHandler->handleError(2, 'proc_open(): fo...', '/opt/.composer/...', 974, Array)
#1 /opt/.composer/vendor/symfony/console/Symfony/Component/Console/Application.php(974): proc_open('stty -a | grep ...', Array, NULL, NULL, NULL, Array)
#2 /opt/.composer/vendor/symfony/console/Symfony/Component/Console/Application.php(784): Symfony\Component\Console\Application->getSttyColumns()
#3 /opt/.composer/vendor/symfony/console/Symfony/Component/Console/Application.php(745): Symfony\Component\Console\Application->getTerminalDimensions()
#4 /opt/.composer/vendor/symfony/console/Symfony/Component/Console/Application.php(675): Symfony\Component\Console\Application->getTerminalWidth()
#5 /opt/.composer/vendor/symfony/console/Symfony/Component/Console/Application.php(133): Symfony\Component\Console\Application->renderException(Object(WebDriverCurlException), Object(Symfony\Component\Console\Output\StreamOutput))
#6 /opt/.composer/vendor/codeception/codeception/codecept(27): Symfony\Component\Console\Application->run()
#7 {main}

Мы пробовали вызывать сборщик мусора gc_collect_cycles(); после каждого теста и после каждого suit, но не помогло.
В чём может быть проблема и как её обойти? Заранее спасибо за ответы!


(Ray Romanov) #2

А строку запуска, плиз в студию.


(Russ Eagle) #3

Тесты запускаем с помощью команды: codecept run --steps --xml -n --no-colors


(Ray Romanov) #4

Основной вопрос, зачем --steps, если надо наглядно то формируй --html отчет.
Я запускаю с такими опциями --no-colors --report --debug --xml --html --json --tap
После выполнения всех (230) тестов, выводится сообщение что использовано 20Мб памяти хотя в процессе работы htop показывает 285Мб.
Да по поводу отчетов --xml --html - эти отчеты формируются в памяти и после окончания теста выгружаются в файл, --json --tap - записываются в процессе.
Единственно можно еще поковыряться в php.ini


(Russ Eagle) #5

убирание флажков особо не повлияло. Может проблема во фреймворке/приложении? Рост памяти ровнозависим количеству тестов. Есть вариант дробления с последующим вызовом отдельно разных видов тестов или что-то подобное, но хотелось бы этого избежать, так как это, по-сути, временное решение