patorashのブログ

方向性はまだない

docker-composeでseleniumを使っててChromeがクラッシュする際に対処法について

先日こんな記事を書いていました。

patorash.hatenablog.com

この記事では、Capybaraの設定について取り上げていたのですが、CapybaraがInvalid session idのエラーを起こす原因については特定できていませんでした。おそらくメモリが不足しているから、という推測はありましたが、どうやらそれで決定のようです。

ひとまず、シングルプロセスでのテストの完走は果たしたので、2並列で行なったところ、そちらも完走しました🎉🎉🎉

しかし、3並列にしたらいきなり落ちまくりました😱

やはりメモリ不足が原因のようです。

Chromeのコンテナにメモリを設定するには?

以下の記事を参考にしました。

qiita.com

この記事で紹介されていた記事に書いてありました。

qiita.com

shmサイズとな!?

shmサイズは、Chromeがコンテンツをダウンロードした際の一時ファイル領域のサイズのようです。複数のChromeを立ち上げると、ここが枯渇してしまい、クラッシュするようです。 shmサイズはデフォルトで64mらしいので、並列実行する分、多めに設定してみます。

shmサイズを設定する

shmサイズを設定するには、docker-compose.ymlのchromeの箇所を修正します。

version: '3.3'

services:
  # 略
  chrome:
    image: selenium/standalone-chrome:latest
    shm_size: 256m # とりあえず4倍に…
    ports:
      - '4444:4444'
    volumes:
      - ./tmp/download:/tmp/download

  # 略

この設定で4並列でテストを実行したところ、問題なくテストが完了しました🥳🥳🥳

ようやくCircleCIの設定にいけそうです。