Open5

PHPUnitのメモリ使用量が増加し続けてフリーズする

renadachirenadachi

困った

時系列で

  1. GitHub Actions がタイムアウトしていた。(jobにtimeout-minutes: 30を入れていたので30分(正確には34分)でタイムアウトした)
  2. ログを見るとPHPUnitの実行が止まっている。
  3. 手元のPCで同じコマンドを実行するとテストは成功する。
  4. 「なるべくGitHub Actionsの環境と合わせてみよう」とDocker Composeでcpu: 2, memory: 7gbでコンテナ立てて実行すると再現(今ここ)
    メモリが落ちているところはコマンド実行をkillしたところ。
renadachirenadachi

--process-isolation をつけてみる

どこかでメモリリークしてそうな気がするのでひとまず--process-isolationをつけて成功するか試してみる。

Serialization of 'Illuminate\Http\Testing\File' is not allowedで失敗。

リソース制限しているコンテナ上ではなく、いつもの環境で--process-isolationをつけて実行してみる。

同じエラー😢

@dataProviderでシリアライズできないオブジェクトを返してるから出てる。テストコードを修正して再実行。

成功。リソース制限しているコンテナ上でも成功。

renadachirenadachi

メモリリークの調査

TestCase.phpにメモリ使用量をログ出力するように仕込んでみる。

    public function tearDown(): void
    {
        Log::debug(memory_get_usage() / 1024 / 1024 . 'MB');

        parent::tearDown();
    }

徐々にメモリが増えている様子は見えるが、90~150MBでGB単位ではない。

renadachirenadachi

XDebugを無効にしてみる

メモリリークなくなった😢

renadachirenadachi

pcovにした

フリーズしなくなった。やったね