сервер webkit_периодически зависает при запуске из Capybara в Ruby

У меня возникла проблема, когда экземпляр сервера webkit_с Capybara и capybara-webkit, работающий без головы, подключенный к локальному экрану Xvfb, зависает при посещении URL-адреса. Кажется, это происходит после нескольких минут многократного посещения разных URL-адресов и запуска поисковиков. (Я использую капибару для очистки экрана в ванильном Ruby, а не для тестирования.)

Я подтвердил, что когда он зависает, сайт по-прежнему доступен (, например, через curl или wget в командной строке). Я также попытался обернуть код Ruby, который вызывает посещение и последующие средства поиска, в блок Timeout, чтобы после 60 секунд ожидания был посещен новый URL-адрес, но любая попытка посещения()терпит неудачу после первого раза, когда это происходит. Единственный способ решить эту проблему — убить как процесс Ruby, вызывающий Capybara/capybara-webkit, так и серверный процесс webkit_и перезапустить их.

Когда я выполняю трассировку серверного процесса webkit_, я неоднократно вижу такой вывод:

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, он зависает при чтении():

Process 3331 attached - interrupt to quit
read(5, 
^C <unfinished...>
Process 3331 detached

Я знаю, что код Ruby зависает по методу посещения водосвинки().

Любые идеи о том, что я могу сделать, чтобы устранить неполадки или исправить это, приветствуются. Я предполагаю, что проблема как-то связана с тем, что серверу webkit_некоторого ресурса необходимо посетить URL-адрес, но я не уверен, что делать дальше.

Спасибо!

11
задан Chris Hart 4 March 2012 в 21:01
поделиться