Codeception / module-yii2

Codeception module for Yii2 framework
MIT License
16 stars 36 forks source link

High memory usage growing with each consecutive test #78

Open arrilot opened 1 year ago

arrilot commented 1 year ago

Steps to reproduce:

  1. Install basic yii2 template
  2. Add tests https://github.com/arrilot/yii2-codeception-memory-leak-demo/pull/1/files
  3. run vendor/bin/codecept run tests/unit/leak/A500Test.php
Time: 00:02.015, Memory: 156.00 MB
OK (500 tests, 500 assertions)
  1. run vendor/bin/codecept run tests/unit/leak/A1000Test.php
Time: 00:06.381, Memory: 300.00 MB
OK (1000 tests, 1000 assertions)

1000 tests consumed twice as much memory as 500 tests. Module is not freeing 300kb of memory after each iteration of one test

  1. run both test files - vendor/bin/codecept run tests/unit/leak/
Time: 00:12.377, Memory: 446.00 MB
OK (1500 tests, 1500 assertions)

Module is not freeing 300kb of memory after each test even after all tests in a file were finished

  1. comment Yii2 module out in unit.suite.yml
Time: 00:00.349, Memory: 20.00 MB
OK (1500 tests, 1500 assertions)

Memory usage is 20 smaller

phpinfo.txt

SamMousa commented 1 year ago

Can you try this without the generator? Could also be phpunit which expands the generator for each test case or something. Just to confirm.

arrilot commented 1 year ago

This has nothing to do with generator or phpunit because the issue is gone if codeception Yii2 module is turned off We also face the very same issue with our real test suit consisting of hundreds unique tests and no generators.

In fact. I've managed to find the exact line which results in memory leak

https://github.com/Codeception/module-yii2/blob/master/src/Codeception/Lib/Connector/Yii2.php#L299

If we comment it out:

Time: 00:04.577, Memory: 18.00 MB
OK (1000 tests, 1000 assertions)

With it:

Time: 00:06.544, Memory: 300.00 MB
OK (1000 tests, 1000 assertions)

Looks like a container is leaking a bunch of memory