LINUX.ORG.RU

phantomjs не закрывает сокет (CLOSE_WAIT)

 ,


0

1

Доброго времени суток!

PhantomJSDriver почему-то не закрывает сокет. После вызова close() и quit() сокет подвисает в состоянии CLOSE_WAIT:

# netstat -alptun
...
tcp        1      0 127.0.0.1:56092         127.0.0.1:2402          CLOSE_WAIT  18946/java      
tcp        1      0 127.0.0.1:36449         127.0.0.1:5734          CLOSE_WAIT  18946/java      
...

Вот кусок кода с закрытием:

try
  {
      final URL url = getCrawlerUrl(httpRequest);
      if (useSnapshot)
          {
              html = readSnapshot(url);
          } 
      if (html == null)
          { 
              driver = new PhantomJSDriver(caps);
              driver.get(url.toString());
              Thread.sleep(500);

              WebDriverWait wait = new WebDriverWait(driver, 2);
              wait.until(ExpectedConditions.invisibilityOfElementLocated(By.cssSelector("div[global-spinner]")));
              html = driver.getPageSource();
              if (useSnapshot)
                  {
                      writeSnapshot(url, html);
                  } 
          }   
  }
catch (Exception ex)
  { 
      ex.printStackTrace();
  }
finally
  {
      if (driver != null)
          { 
              driver.close();
              driver.quit();
          }   
  }

Подскажите, что мы делаем не правильно? Или это прблема самого фантома?

Версия phantomjs:

$ phantomjs -v
1.9.8

$ java -version
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.6) (7u79-2.5.6-1~deb8u1)
OpenJDK 64-Bit Server VM (build 24.79-b02, mixed mode)

ps: Тема началась тут: CLOSE_WAIT сокеты

Вот еще по теме: https://github.com/SeleniumHQ/selenium/issues/1080

★★

CLOSE_WAIT означает, что с противоположной стороны уже пришел FIN, а твой фантом даже не попытался ничего закрыть

попробуй сделать quit без close

попробуй установить фантом через apt-get или что там на твоем дистрибутиве, а не через npm как делают вначале нормальные люди, это важно

если ничего не поможет, просто в system.exec сделай netstat -p, найди в нем процесс фантома и убей его по пиду

stevejobs ★★★★☆
()
Ответ на: комментарий от GoodPerson

похоже, дейтсвительно это баг фантома.

попробуй сделать quit без close

пробовали, так изначально и было - результат тот же.

попробуй установить фантом через apt-get

в стандартных репозиториях не нашел его (debian jessie):

$ apt-cache search phantom
libghc-tagged-dev - newtype wrappers for phantom types
libghc-tagged-doc - newtype wrappers for phantom types; documentation
libghc-tagged-prof - newtype wrappers for phantom types; profiling libraries
Как именно ставил уже не помню. Попробуем другие версии, отпишусь.

если ничего не поможет, просто в system.exec сделай netstat -p, найди в нем процесс фантома и убей его по пиду

Помогает только, если сначала убить процесс phantomjs, потом рестартонуть tomcat. Сокет за процессом java а не за phantomjs.

samson ★★
() автор топика

Тег java тут вроде не к месту

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.