LoginSignup
3
4

More than 3 years have passed since last update.

RSeleniumが変なエラー吐いて落ちた! <- docker内の dev/shm の容量不足が原因だった件

Last updated at Posted at 2019-07-11

鼻歌まじりにWEBクロールしていて、突如の悪魔の囁き...

Selenium message:unknown error: session deleted because of page crash from unknown error: 
cannot determine loading status

げ、なんだよこれ。

変な書き方してたかな...とまずは自分を疑いコードを見直すも、
どこもおかしい所は無い。

【追記 2019/7/11】

まずは解決策

docker run -it --shm-size=1024m ...

/dev/shm の容量が足りないこと、dockerのデフォルトが64MBであることが原因なので、
docker runの時に指定してあげるとどのホストOSでも動くと思います。(Macで確認)

Linux hostであれば下記の解決策、
"-v /dev/shm:/dev/shm" コンテナ内からホスト側の/dev/shm にマウントしてしまうのが一番メモリのムダが無いです。

以下は以前のバージョンです:

...えー...
てわけでエラーメッセージでググります:

これだ!
SO先生偉い!

unknown error: session deleted because of page crash from unknown error: cannot determine loading status from tab crashed with ChromeDriver Selenium

原因としては
「dockerコンテナ内で起動すると、/dev/shm が凄く小さいので溢れて落ちることがある」
のだそうで。

ここでDebanjanBさんより示されている対策は3つ:

ホストの /dev/shm を使う - docker run に以下を追加

-v /dev/shm:/dev/shm

/dev/shm を大きくしてリマウント: コンテナ内から

sudo mount -t tmpfs -o rw,nosuid,nodev,noexec,relatime,size=512M tmpfs /dev/shm

chrome_optionsに以下のどちらかを追加:

# sandboxを無効に (あれ?すでにやってるけど)
chrome_options.add_argument('--no-sandbox')   

# shm を無効に (遅くなるとのこと)
chrome_options.add_argument('--disable-dev-shm-usage')

自分は -v /dev/shm:/dev/shm を足して起動する方法で解決しました!
(Linuxホストじゃないと使えないかも?)

逆に二番目はエラーで実行出来ませんでした。
3番めは試していません。

もし同じエラーで困った方が居たら参考になれば幸いです。

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4