URL にアクセスすると、ローカルの Xvfb 画面に接続されたヘッドレスで実行されている Capybara および capybara-webkit を使用した webkit_server のインスタンスがハングするという問題が発生しています。数分間、異なる URL に繰り返しアクセスし、ファインダーを実行した後に発生するようです。(テスト用ではなく、バニラRubyの画面スクレイピングアプリケーションにカピバラを使用しています。)
ハングしてもサイトにアクセスできることを確認しました (たとえば、コマンド ラインで curl または wget を使用)。また、訪問と後続のファインダーを呼び出す Ruby コードを Timeout ブロックでラップしてみました。これにより、60 秒待ってから新しい URL が訪問されますが、最初にこれが発生した後はすべての visit() 試行が失敗します。この問題を解決する唯一の方法は、Capybara/capybara-webkit を呼び出す Ruby プロセスと webkit_server プロセスの両方を強制終了して再起動することです。
webkit_server プロセスをトレースすると、次のような出力が繰り返し表示されます。
clock_gettime(CLOCK_MONOTONIC, {5821, 680279627}) = 0
gettimeofday({1330890176, 712033}, {0, 33052112}) = 0
gettimeofday({1330890176, 712087}, {0, 140736435864256}) = 0
gettimeofday({1330890176, 712137}, {0, 33108640}) = 0
clock_gettime(CLOCK_MONOTONIC, {5821, 680486036}) = 0
clock_gettime(CLOCK_MONOTONIC, {5821, 680530091}) = 0
read(7, 0x1fac1b4, 4096) = -1 EAGAIN (Resource temporarily unavailable)
それを呼び出す Ruby プロセスをトレースすると、read() でハングします。
Process 3331 attached - interrupt to quit
read(5,
^C <unfinished ...>
Process 3331 detached
Ruby コードが Capybara の visit() メソッドでハングしていることはわかっています。
これをトラブルシューティングまたは修正するために私ができることについてのアイデアをいただければ幸いです。この問題は、webkit_server が URL にアクセスする必要があるリソースに関係していると思いますが、次に何を試せばよいかわかりません。
ありがとう!